目标定位与命中检测
虚拟对象命中检测
与虚拟对象的碰撞检测通常并不实际涉及测试射线与场景中某个多边形的相交,因为典型场景可能包含数百或数千个多边形,这使得直接追踪射线到多边形在大多数情况下并不实用。相反,大多数应用程序会找到一种方法来简化其命中检测算法的实现。
你所使用的任何 3D 图形引擎都可能(甚至都非常可能)提供命中检测功能,尤其是那些专为游戏开发而设计的引擎。
简化的代表性对象
一种常见的解决方案是在场景中的对象之上叠加简化的、不可见的对象。这些对象随后充当代理。例如,如果你有一个大致为矩形的对象,则在执行命中检测时使用矩形作为该对象的替代物。同样,如果一个对象本质上是圆形的,则使用最小外接圆的半径来建立碰撞测试对象。
现实世界命中检测
“LIDAR”这个缩写词根据其实现细节的不同有多种定义,但最终结果是相同的。最常见的是指“激光光成像、检测和测距”(Laser Imaging, Detection, And Ranging)或“光检测和测距”(LIght Detection and Ranging)。
与现实世界的碰撞检测是一个不同的问题,可能不仅涉及解释设备摄像头(如果可用)的图像,还可能涉及多个额外的传感器。一些设备包含红外传感器以帮助测距,而另一些设备则提供强大的光学雷达系统,该系统使用激光(通常是人眼不可见的红外激光)来确定到世界中物体的距离。
如何使用特定平台的测距系统的详细信息超出了本文的范围。然而,仍有一些希望:已有人提出了一项 WebXR 命中测试模块的提案。该模块将叠加在 WebXR 之上,以提供用于执行命中检测和碰撞检测的 API。
参见
- 3D 碰撞检测
- HTML5 游戏:3D 碰撞检测(Hacks 博客)