0

我正在尝试检查一个对象当前是否在 directx 的屏幕上。我有对象和相机的视图矩阵和投影矩阵以及 xyz。

这似乎是人们遇到的一个常见问题,但我尝试在谷歌上寻找所有内容,但找不到任何人在 directx 中只谈论 javascript 的东西。

我不确定从哪里开始处理这个问题。我猜它使用了某种复杂的数学运算,涉及视图矩阵和立方体的位置(对象被转换到 gpu 上的世界空间,没有缩放或旋转)。(我也在使用 C++)有人可以帮忙吗?谢谢

4

1 回答 1

1

对于透视投影,这是一个“平截头体”与“盒子”边界体积相交测试。

对于正交投影,这是一个“盒子”与“盒子”边界体积相交测试。

DirectXMath库(它也在Windows SDK 中)包括在标头中执行这些测试的函数DirectXCollision.hBoundingFrustum使用相机中的投影矩阵创建对象实例:

BoundingFrustum fr(proj);
// use fr(proj, true) if using right-handed instead of left-handed view setup

为您的对象的位置创建一个BoundingBox或:BoundingOrientedBox

BoundingBox box(position, extents);

然后用fr.Contains(box)看它是否返回DISJOINT

此类计算的参考资料包括:

  • Akenine-Möller、Haines 和 Hoffman,“实时渲染”,AK Peters/CRC Press(2018 年)

  • Ericson,“实时碰撞检测”,Morgan Kaufmann (2005)

  • Glassner,“光线追踪简介”,Morgan Kaufmann (1989)

  • Schneider 和 Eberly,“计算机图形学的几何工具”,Morgan Kaufmann (2003)

于 2022-01-15T19:12:18.973 回答