展开异次空间

:: 相对折叠空间/讨论游戏/软件设计.技术 ::

 

物理引擎 [ PhysX ] 经验总结

经验笔记 [ 原创 - by T.T ]

    在之前ODE的实践中发现了物理系统中的很多问题,所以在经过修改后加入了PHYS-X的支持。
本身PHYS-X新的免费授权已经放出,可以安心的使用SDK了!

基本流程:
01. 初始化 NX 相关, NX PHYSIC SDK ,NX SCENE
02. 初始化 COOK 系统
03. 设置 PHYSIC SDK 相关参数
04. 检查是否支持硬件
05. 设置相关材质

06. 创建物理相关实体

07. 开始主循环
08. 计算物理运算结果 / FETCH ( 上一帧 )
09. 模拟当前帧物理信息 ( gScene->simulate , gScene->flushStream )
10. 将物理实体坐标以及相关信息传递到渲染物体中( 将渲染物体坐标以及相关信息传递给物理实体 ) 
11. 转到 07 -> 继续循环

12. so on && 结束

接触点回调:
1. 设置 用户自定义接触碰撞回调类来检测碰撞 并在发生碰撞时调用自定义回调。
2. 需要从NxUserContactReport继承,并实现相应的接口,实现 PHYS-X 控制管理类,提供2次开发碰撞
回调接口。

运动方式:
1. 不能使用直接设置 POS 的方式,这种会导致移动发生问题,需要设置加速度或者速度来运动
2. 使用添加力的方式会有质量和体积的问题,因为 F = M * A,也就是质量 * 加速度,而质量和体积相关
模型导出的时候物体的坐标规范如果没有在 -4000~+4000之内会导致体积巨大,即使密度很小也会产生很大
的质量,那需要相当大的力来推物体。所以直接设置速度和加速等方式来控制运动。

按照 PHYSX 文档的介绍,动态非动态皮肤物体需要使用凸多边形网格:


=====
球体

=====
========
立方体

========
========
胶囊体

========
========
平面

========
==========
凸多边形

==========
==========
高度图网格

==========
==========
轮子网格

==========
==========
三角面网格

==========
==========
三角面网格
(高度图)
==========
==============
三角面网格
(PMAP)
==============
=====
球体
=====

========
立方体
========
========
胶囊体
========
========
平面
========
==========
凸多边形
==========
==========
高度图网格
==========
==========
轮子网格
==========
==========
三角面网格
==========
==========
三角面网格
(高度图)
==========
==============
三角面网格
(PMAP)
==============


从图上可以看出如果使用 三角面网格做碰撞体的话,那么三角面网格无法和三角面网格碰撞,
所以必须使用凸多边形网格作为普通物体的碰撞体,在制作碰撞体的时候将凹多边形分割成多个凸多边形。

posted on 2008-02-10 21:14 Updraft Studio 阅读(636) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。

导航

统计

公告

激情,努力

常用链接

留言簿(9)

随笔档案(53)

文章档案(25)

@Updraft Studio@

搜索

最新评论

阅读排行榜

评论排行榜

Freelance Jobs