经验笔记 [ 原创 - by T.T ]
基础的就是几个流程
1. 初始化
dInitODE
创建 Contact Group
设置世界对象的 ERP (错误修正系数),这东西直接和精度相关的,但设置太低又经常CRASH。。所以很郁闷啊
设置世界对象的 CFM,这个的效果就是软硬程度的,石头、金属就设低点,要有那种有弹性的质感就设高点。。
然后就是重力之类的全局参数
2. 创建 ODE 运动或者静态对象
静态的直接就用 GEOM ID 构造一个物体,怎么都撞不动。。。 重力也不影响这东西
动态对象就创建个 dBody, 然后用 dGeom 设置附加到该BODY上就可以动了。想不动都不行~
如果要创建 TRI-MESH 的 ODE 对象就比较麻烦了 问题很多,官方的解决方案也不能很好解决。。。
还经常堆栈上溢!-___-#
如果非要在 ODE 里用 TRIMESH 就把工程的参数改改加个 /stack:99999999 ,就不溢出了。
不过碰撞不精确而且问题很多 特别是模型定点坐标不是 0.0~1.0 的话,那就等着到处飞吧~~
3. 用自己的3D引擎或者D3D创建物体,建立与ODE对象的关系。
4. 更新ODE运动对象,获取运动对象的信息(坐标或者四元数),设置到渲染对象上就OK了。
5. 循环4,直到退出。。。
几个注意的地方
- ode 本身接口还是很方便,容易上手的物理引擎,但大场景管理真的不好,很慢很不稳定。。
- 在ODE中使用 TRI-MESH 我在ODE论坛上看到的是说问题很多,效率不怎么高,如果非要用TRIMESH就用
上面的方法,或者改用其他物理引擎。-__-# (太不负责了)
- 最近 PhysX 授权协议改了,商业用处也免费了,就是没源码~ 对于我们来说比用ODE好太多了,ode有
源码也没这么多精力修改~ 引擎中需要修改完善的太多了!让奥加帮我们去做吧!
值得庆贺的事
PHYS-X 已经在测试中了,替代ODE之后会加入到引擎中
以后物理这块就更牛逼了!