美文网首页
threejs 碰撞相关学习

threejs 碰撞相关学习

作者: squidbrother | 来源:发表于2023-04-04 15:39 被阅读0次

    碰撞的概述

    概述
    • 碰撞种类很多,资料中文的很少,文档也因为版本问题不是很易读,初步了解总结如下
    学习碰撞相关初步认识 - 第一版

    碰撞的分类

    借助物理引擎
    • 说明:
      物理引擎比较多,资料比较杂
      物理引擎的分类,二维引擎,三维引擎(维护的,不维护的)....
      ammo是比较成熟的 - 引擎文档总结 - https://www.jianshu.com/p/d2d7dbadecfa?v=1680680281993
      cannon是还在维护的 - 引擎文档总结 - https://www.jianshu.com/p/2f06481a8a7b?v=1680680256733

    ammo的例子:

    • https://juejin.cn/post/6985033373857579045

    cannon的例子:

    • https://juejin.cn/post/7121739944199995399/

    • 优点:
      借助物理引擎直接可以配置重力,材质,摩擦力、设置速度(角色前进)、接受外力(模仿风)

    • 缺点:
      所有数据上的碰撞都借助于另一套物理几何模型,根据物理几何模型的碰撞,来更新视图几何模型(角色、足球等)
      物理几何模型要与视图几何模型匹配,如: 足球,足球视图几何体只能是球形,物理几何体也必须是球形,半径需要严格一致,那么在处理场景的时候,就要建立一整套物理几何模型,如: 树木、路灯、椅子等,防止出现碰撞没有实现,产生穿模的问题,这个工作量是难以估计的。

    不借助物理引擎
    1. 八叉树计算法
    • 说明:
      一个threejs的非核心库,用于辅助完成碰撞计算,无需npm安装,需要路径引入(如:import { Octree } from "three/examples/jsm/math/Octree.js";)
      根据面的上下左右前后横切,完成碰撞位置的细分
      八叉树碰撞轮廓OctreeHelper

    例子:

    • https://juejin.cn/post/7207673279166562361

    • 优先:
      简单的物理世界需求,可以不用考虑单独建立一套物理世界模型

    • 缺点:
      模拟弹性、摩擦、一个物体碰撞一个盒子组成的墙壁,怎么计算这些碰撞物体的运动下落等轨迹,是个问题
      因为没有物理引擎作为支撑

    1. 射线计算法
    • 说明:
      更为复杂的模拟,自己写碰撞逻辑,如 平面(前后左右)运动、上下楼梯运动


      前后左右碰撞监测 - 调整射线的方向,返回距离刨除角色厚度
      上下楼梯

    例子:

    • https://juejin.cn/post/7188065038995816505

    • 优点:
      简单易懂,简单的需求,不用去找资料,完全自己开发

    • 缺点:
      不依靠threejs核心库以及辅助工具,需求上限受制、越来越难 ( 如角色踏空下落、奔跑跳起来碰撞物体 等 )...

    1. 未探索的....

    未完待续....

    相关文章

      网友评论

          本文标题:threejs 碰撞相关学习

          本文链接:https://www.haomeiwen.com/subject/lwrsddtx.html