美文网首页
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