﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-ACG狂人-随笔分类-Game</title><link>http://www.cppblog.com/shanoa/category/10680.html</link><description>萌死人不偿命</description><language>zh-cn</language><lastBuildDate>Fri, 04 Sep 2009 02:19:30 GMT</lastBuildDate><pubDate>Fri, 04 Sep 2009 02:19:30 GMT</pubDate><ttl>60</ttl><item><title>PhysX动工</title><link>http://www.cppblog.com/shanoa/archive/2009/09/03/95157.html</link><dc:creator>酿</dc:creator><author>酿</author><pubDate>Wed, 02 Sep 2009 17:28:00 GMT</pubDate><guid>http://www.cppblog.com/shanoa/archive/2009/09/03/95157.html</guid><wfw:comment>http://www.cppblog.com/shanoa/comments/95157.html</wfw:comment><comments>http://www.cppblog.com/shanoa/archive/2009/09/03/95157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shanoa/comments/commentRss/95157.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shanoa/services/trackbacks/95157.html</trackback:ping><description><![CDATA[<p>PhysX物理引擎是众多可选的物理引擎之一，但为什么我要选PhysX而不是其他呢？也许下面的一些论述纯粹是自己的意淫，因为并没有真正的去测试过这些，不对之处请看官们指点一二，免让我这个糊涂虫误入歧途。<br><br>选择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对我就有格外的吸引力，所以当然是奋力研究了。<br><br>于是去了nvidia官网的Download区，先搞下来三个东西：cuda sdk、cuda toolkit、cuda 那个啥？？没啥，只是随便看看，顺带装了下cuda显卡驱动，呵呵。于是又下了PhysX的SDK，好了，等一切安装完毕，设置好包含目录和库目录后就开始了我的HelloWorld历程！写一个PhysX的HelloWorld较为麻烦，要有能看得见的效果还得累一阵子，于是直接拿sample里的教程进行修改，第一步当然是戳一戳刚体碰撞了，发现PhysX的抽象建模比我料想的好很多，基本上我所考虑到的它全有了，而且理解起来非常简单。<br><br>PhysX的建立过程只有很少量的代码，首先是建立一个SDK对象，然后建立碰撞场景NxScene。<br>在PhysX中，一个可以检测碰撞的对象叫做NxActor，这个NxActor的建立除了需要一个指定的NxScene以外，还需要一些描述信息，这些描述如下：<br>碰撞对象的外形描述： 统一用的是NxXXXShapeDesc的命名方式，譬如NxBoxShapeDesc，甚至NxTranglesMeshShapeDesc之类的，你可以将任意的3D形态做成NxActor的外形，物理引擎会根据这个外形的面来做碰撞检测和质点的根据。<br>碰撞对象的体型描述： 即NxBodyDesc，用于记录一个碰撞对象的质量、初始速度、初始冲量等信息，感觉似乎是将一个对象作为一个质点考虑时的一些数据，总之，没有这个描述的话，碰撞对象会被视为一个静态对象，即不能主动变动坐标的物体，亦不会存在质量和速度等信息。<br>材质ID：材质是在物理引擎的NxScene中建立的，每个对象所使用的材质ID都是指的是NxScene中的第几个材质。材质包括了摩擦力和弹力之类的信息。<br><br>恩，目前还没看到joint的使用，估计就是连接两个碰撞对象的一种力学关系吧，来回摆动的吊篮，上面又要能站人，肯定需要这个。这样看来，刚体基本上不存在什么问题了，而在我目前攻关的服务器部分，只需要刚体部分，因此PhysX的学习目前到此为止了，接下来就是对游戏服务器的框架设计上多下功夫了。<br></p>
<img src ="http://www.cppblog.com/shanoa/aggbug/95157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shanoa/" target="_blank">酿</a> 2009-09-03 01:28 <a href="http://www.cppblog.com/shanoa/archive/2009/09/03/95157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>