最近在深入研究 NVIDIA 的代码,与以前研究 OGRE 中的算法真的差距很大啊!
在 OGRE 中摄像机与AABB基本的碰撞判定就是每个可视锥的平面与AABB的所有点判断是否在视锥中,
当然这也是最基本的算法,只要思维清晰、智力普遍正常+偏高就很容易实现出来,
但NVIDIA有一个更好的方法,那就是用AABB的对角线顶点作判定,虽然思路很简单但具体实现可不容易~
首先需要知道每个平面对应的对角线顶点ID,在实时判定中还需要用不同于8个顶点测试的算法,但好处也是显而易见的!
下面是我的数据:
900个物体,总面数=500W面
使用传统的算法下是 6 FPS 左右,感觉效率主要消耗是在渲染三角面上的,
但是 …………
使用了NVIDIA 的算法后居然提高到 8 FPS 了,这是一个什么概念?!!
8 - 6 = 2, 2 / 6 = 1 / 3,也就是提高了 30% 的效率!
要提高 30% 的效率我以前改了好多好多东西哟!--#
分析下算法 原始的是 O( 8*6 ) = O( 48 ), 新的算法是 O( 8 )
因为每次平面判定只需要处理2个对角线了,理论上消耗的时间是原来的 1/3,提高了 2/3 也就是 60%
但由于显卡 CPU瓶颈 场景管理 RP等对结果的影响,最后结果还是令人满意的。
继续研究 NVIDIA 和 ATI 的源代码了,商业代码就是比 OPEN SOURCE 强!
毕竟是拿工资作事的啊~ hoho