我正在使用带有gluPerspective和gluLookAt的透视图,我有一个对象的x,y世界坐标。如何确定对象是否在可视区域之外?请注意,相机始终在移动。
答案 0 :(得分:5)
第一件事:OpenGL没有相机。它只是转换顶点周围。而且gluLookAt只是对物体进行变换,这与物体思维相机的运动相反。
解决方案已在Robert Massaioli的第一条评论中给出:在OpenGL中,透视变换用平截头体来描述( gluPerpective 只计算平截头体参数并将这些参数传递给 glFrustum )。因此,通过确定对象的平截头体剔除,即如果它们被剔除,您可以确定它们是否仍然可见。
答案 1 :(得分:0)
当你说他们离开相机时你的意思是他们偏离了两侧,因为你正在寻找一个固定的距离? ..或者你的意思是他们只是消失了。
如果是第一种情况(在拍摄的两侧),您应该能够根据当前的透视设置计算出需要移动相机的x,y平面的距离。
如果是后一种情况,您可能只需要增加最大Z深度以阻止它们被剔除。
[编辑1] 在gluPerspective来电中,您可以设置视角和宽高比。您应该知道飞机的距离以及从中心点到汽车的距离,这样您就可以获得所需的所有信息。剩下的只是一个小三角法来计算出可见的和不可见的东西。
[编辑2] 我找到了another very useful tutorial,其中描述了您想要做截头剔除的各种方法。