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



我正在尝试检查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

为对象的位置创建BoundingBoxBoundingOrientedBox

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(

相关内容

  • 没有找到相关文章

最新更新