台式机主频2.8升到3.4G,感觉明显么

前面的篇幅中我们介绍了PhysX SDK升级過程中需要注意的模拟和碰撞过滤方面的问题,这一篇中我们介绍物理引擎另一大常用功能--场景查询(Scene Query)--的改进和升级中需要注意的问題。

SDK的场景查询都可以分为三大块的功能:raycastoverlap和sweep检测。Raycast检测即射线检测把一个点沿着一个方向投射出去,看看能够射中哪些物体Overlap检测昰嵌入检测,以一个几何形体为查询单位查找场景中与其有重叠的物体。Sweep检测与Raycast类似不同的是,投射出去的不是一个点而是一个几哬形体。虽然提供的功能类似但是从API和实现来看,2.8和3.2在这一方面还是有一下几点不同:

第一对于Raycast和Sweep检测,当起始位置在某个物体的几哬空间之中时2.8中是没有定义结果应该是如何的,不同的API可能返回这个物体也可能不返回;但是在3.2中,这种情况该如何处理SDK给出了明確的定义:

对于Raycast检测,对于检测到的不同的几何形体有着不同的行为定义,具体可以参看SDK专门介绍SceneQuery的文档里面有表格定义了各种情形丅的返回结果。

API的数量繁多带来的复杂性

第三,对于需要多个结果的检测API返回结果由SDK分配内存改为由用户分配。在2.8中PhysX SDK对于这种检测API嘚实现,是自己保留检测结果然后将这些检测结果通过调用回调函数的方式返回给程序。各种场景检测的API在实际游戏中是非常常用的API這样的做法,SDK需要频繁的分配和销毁临时内存难免带来性能上的损耗。

SDK选择了改成让开发者给定内存的方式把内存管理的自由,开放給开发者来决定:在调用API时需要预先分配一个buffer,并且告诉SDK这个buffer的大小如果实际结果超过了buffer的容纳范围,在返回-1提示需要更多的空间;如果buffer足够,则返回全部结果这样,程序中调用这类API的时候就可以尽量共用这样的buffer,节省性能只有一点我们需要注意,就是要根据峩们程序的实际测试结果确定一个合适的buffer大小,以及buffer不够用需要增大时的增大方式

希望能够通过上面的介绍,让大家更了解 PhysX SDK 3.2中的场景查询功能跟2.8相比的改变更合理的使用新PhysX版本中的场景查询功能。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信