我正在尝试在我的 OpenGL 2d 游戏中实现截锥剔除。在这一点上,我的游戏中唯一的几何对象是矩形,所以我认为这很容易,但我得到了意想不到的结果。我已经设置了一个对称的透视投影,其视场角为 45 度,近平面和远平面分别为 0.01 和 50。眼睛矢量始终平行于 z 轴,相机只能沿 x 和 y 轴移动。
我的想法是在我试图剔除的矩形的 z 坐标处获取相机当前可见的世界空间的矩形区域。因为相机正在看平截头体的中心,所以我计算到这个可见矩形区域边缘的距离如下:
GLfloat maxDistance = givenRectangle.z * tanf(0.5 * (fovAngle * M_PI/180) );
然后我在相机的 x 和 y 坐标之间添加和减去这个距离,以获得最大和最小可见 x 和 y,然后测试给定的矩形以查看它是否在这些值之间。
我的问题是我在这里是否走在正确的轨道上,以及为什么当我在 z=5 有一个物体时,上面的公式返回一个小得离谱的值(某物 *10^-37),在 ( 0,0,0)?