我正在尝试检查directx中屏幕上当前是否有对象。我有视图矩阵,投影矩阵,以及物体和相机的x y z。
这似乎是人们经常遇到的问题,但我试着在谷歌上到处找,找不到任何人在directx上谈论这件事,只谈论javascript的东西。
我真的不知道从哪里开始讨论这个问题。我猜它使用了某种复杂的数学方法,包括视图矩阵和立方体的位置(对象在gpu上被转换到世界空间,没有缩放或旋转(。(im也使用c++(有人能帮忙吗??感谢
对于透视投影,这是一个"截头体"与"长方体"边界体积相交测试。
对于正交投影,这是一个"框"与"框"边界体积相交测试。
DirectXMath库(也在Windows SDK中(包括在DirectXCollision.h
标头中执行这些测试的函数。使用相机的投影矩阵创建BoundingFrustum
对象实例:
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出版社(2018(
Ericson;实时碰撞检测";,Morgan Kaufmann(2005(
Glassner,";"光线追踪导论";,Morgan Kaufmann(1989(
Schneider和Eberly;"计算机图形学的几何工具";,Morgan Kaufmann(2003(