我正在使用 gluPerspective 和 gluLookAt 来创建透视视图,并且已经获得了一个物体的 x、y 世界坐标。那么,如何确定该物体是否在可视区域之外?请注意,相机始终在移动。
我正在使用 gluPerspective 和 gluLookAt 来创建透视视图,并且已经获得了一个物体的 x、y 世界坐标。那么,如何确定该物体是否在可视区域之外?请注意,相机始终在移动。
首先,OpenGL没有相机,它只是在转换顶点。而gluLookAt只是对物体应用了一个与虚拟相机运动相反的变换。
解决方案已经在Robert Massaioli的第一条评论中给出:在OpenGL中,透视变换是以视锥体为描述基础的(gluPerpective只是计算视锥体参数并将其传递给glFrustum)。因此,通过确定对象的视锥剔除状态,即它们是否被剔除,您可以确定它们是否仍然可见。
当你说他们离开相机时,是指他们在侧面,因为你正在固定距离下观察吗?还是说他们只是消失了。
如果是第一种情况(镜头两侧),您应该能够根据当前的透视设置计算出需要将相机向上移动多远。
如果是后一种情况,您可能只需要增加最大Z深度以防止它们被剔除。
[编辑1] 在gluPerspective调用中,您设置了视角和纵横比。您应该知道到平面的距离以及从中心点到汽车的距离,因此您拥有所需的所有信息。剩下的就是一些三角函数来确定什么是可见的,什么是不可见的。
[编辑2] 我找到了另一个非常有用的教程,其中描述了各种执行所需的截锥体剔除的方法。