如何检查对象是否在视口 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 的位置创建 BoundingBox
或 BoundingOrientedBox
:
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)
我正在尝试检查对象当前是否在 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 的位置创建 BoundingBox
或 BoundingOrientedBox
:
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)