c++ - 截锥体和球体相交

标签 c++ intersection culling frustum

我正在阅读这篇简洁的文章:Frustum Culling

它读到要找到球体和平截头体边(平面)之间的距离是:

C = center of sphere

N = normal of plane

D = distance of plane along normal from origin

Distance = DotProduct(C, N) + D

但是我不明白变量D指的是什么。特别是,我不明白截锥体的起源是什么。它是摄像头所在的位置吗?

最佳答案

D 是您需要沿着平面的法线行进以通过定义平面的任何空间的原点的垂直距离(我希望这通常是世界坐标系中的原点,但如果您的平面在相机坐标中描述然后使用相机原点。最终,只要您在同一空间中进行计算,这并不重要。换句话说,无论您使用哪个原点作为球体和平面的空间正在比较中。)。

这与平面方程中的值相同:Ax + By + Cz + d = 0。d 是您要使用的值 D。您可以通过在平面上取一个已知点并使用它来求解 d 的平面方程来计算 d。 (A, B, C) 是平面单位法 vector 的 X,Y,Z 元素,(x, y, z) 是平面上点的坐标,求解 d 的平面方程,你就有了距离。

请注意在同一个空间中进行所有计算,无论是世界空间、相机空间还是屏幕空间。我怀疑您会想要在世界空间中进行计算。

关于c++ - 截锥体和球体相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25572337/

相关文章:

algorithm - 范围交集/联合

mysql - MySQL 中的 INTERSECT 2 个表

c++ - 如何确保没有代码使用 API?

c++ - zwave/cpp - 从恒温器获取值(温度和湿度)

c++ - 在 C++ 中何时返回指针、标量和引用?

java - Libgdx ModelBuilder.createRect 仅从一侧可见

Android OpenGL ES 渲染复杂对象不正确

c++ - 这个符号在 C++ 中是什么意思

java - 判断一个矩形是否与一条线相接

graphics - 用于视锥体剔除的松散八叉树 - 需要一些建议