ACG狂人

其实我更爱姐汁...

PhysX动工

PhysX物理引擎是众多可选的物理引擎之一,但为什么我要选PhysX而不是其他呢?也许下面的一些论述纯粹是自己的意淫,因为并没有真正的去测试过这些,不对之处请看官们指点一二,免让我这个糊涂虫误入歧途。

选择PhysX的原因是这样的,拿目前与PhysX对立的Havok引擎来做比较,Intel和AMD-ATI支持的Havok引擎主要致力于CPU运算物理效果,而nvidia独推的cuda架构和PhysX引擎则主要致力于GPU或GPU群集运算,且不谈在游戏客户端的物理效果到底是用GPU好还是CPU好(这跟你GPU是否忙得过来有关),由于目前正在攻关的游戏开发项目需求较为特殊,我在这里只关注服务器方面的高性能刚体物理运算问题。nvidia近两年推出的cuda架构群集不断走向成熟,这种群集是用GPU阵列作为运算核心的超级并行计算机,在物理运算方面与CPU所组成的群集不是一个档次,总体运算性能甚至超过同等价位的CPU群集近百倍!我考虑将物理运算完全交给独立的GPU群集,让CPU去做那些它所擅长的工作。也许这正是符合了nvidia推广cuda的思想吧,因此看着PhysX对我就有格外的吸引力,所以当然是奋力研究了。

于是去了nvidia官网的Download区,先搞下来三个东西:cuda sdk、cuda toolkit、cuda 那个啥??没啥,只是随便看看,顺带装了下cuda显卡驱动,呵呵。于是又下了PhysX的SDK,好了,等一切安装完毕,设置好包含目录和库目录后就开始了我的HelloWorld历程!写一个PhysX的HelloWorld较为麻烦,要有能看得见的效果还得累一阵子,于是直接拿sample里的教程进行修改,第一步当然是戳一戳刚体碰撞了,发现PhysX的抽象建模比我料想的好很多,基本上我所考虑到的它全有了,而且理解起来非常简单。

PhysX的建立过程只有很少量的代码,首先是建立一个SDK对象,然后建立碰撞场景NxScene。
在PhysX中,一个可以检测碰撞的对象叫做NxActor,这个NxActor的建立除了需要一个指定的NxScene以外,还需要一些描述信息,这些描述如下:
碰撞对象的外形描述: 统一用的是NxXXXShapeDesc的命名方式,譬如NxBoxShapeDesc,甚至NxTranglesMeshShapeDesc之类的,你可以将任意的3D形态做成NxActor的外形,物理引擎会根据这个外形的面来做碰撞检测和质点的根据。
碰撞对象的体型描述: 即NxBodyDesc,用于记录一个碰撞对象的质量、初始速度、初始冲量等信息,感觉似乎是将一个对象作为一个质点考虑时的一些数据,总之,没有这个描述的话,碰撞对象会被视为一个静态对象,即不能主动变动坐标的物体,亦不会存在质量和速度等信息。
材质ID:材质是在物理引擎的NxScene中建立的,每个对象所使用的材质ID都是指的是NxScene中的第几个材质。材质包括了摩擦力和弹力之类的信息。

恩,目前还没看到joint的使用,估计就是连接两个碰撞对象的一种力学关系吧,来回摆动的吊篮,上面又要能站人,肯定需要这个。这样看来,刚体基本上不存在什么问题了,而在我目前攻关的服务器部分,只需要刚体部分,因此PhysX的学习目前到此为止了,接下来就是对游戏服务器的框架设计上多下功夫了。

posted on 2009-09-03 01:28 酿妹汁 阅读(1896) 评论(2)  编辑 收藏 引用 所属分类: Game

评论

# re: PhysX动工[未登录] 2009-09-08 11:52 shilei230

在下对Physix也很感兴趣啊,期望能一起学习,呵呵  回复  更多评论   

# re: PhysX动工 2009-09-22 20:18

好啊,我也是初学,ls的兄弟给个窝的链接啊  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理