如何检查对象是否在视口 Directx 11 中

How to check if object is in viewport Directx 11

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

这似乎是人们遇到的一个常见问题,但我已经尝试遍历 google 并且找不到任何人在 directx 中仅谈论 javascript 东西。

我不太确定从哪里开始解决这个问题。我猜它使用了某种涉及视图矩阵和立方体位置的复杂数学(对象正在 gpu 上转换为世界 space,并且没有缩放或旋转)。 (我也在使用 C++) 谁能帮忙?? 谢谢

对于透视投影,这是 'frustum' 与 'box' bounding-volume 相交测试。

对于正交投影,这是 'box' 与 'box' bounding-volume 相交测试。

DirectXMath 库(它也在 Windows SDK 中)包括在 DirectXCollision.h header 中执行这些测试的函数。使用相机的投影矩阵创建 BoundingFrustum object 实例:

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

为您 object 的位置创建 BoundingBoxBoundingOrientedBox

BoundingBox box(position, extents);

然后用fr.Contains(box)看看是不是returnsDISJOINT.

此类计算的参考文献包括:

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

  • Ericson,“Real-Time 碰撞检测”,Morgan Kaufmann (2005)

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

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