相机外部的对象 OpenGL

Object outside camera OpenGL

本文关键字:OpenGL 对象 外部 相机      更新时间:2023-10-16

我正在使用带有gluPerspective和gluLookAt的透视视图,并且我有一个对象的x,y世界坐标。如何确定对象是否在可视区域之外?请注意,相机始终在移动。

首先:OpenGL没有摄像头。它只是变换顶点。gluLookAt只是在物体上应用了一个与思想相机的运动相反的变换。

Robert Massaioli在第一条评论中已经给出了解决方案:在OpenGL中,透视变换是用视锥体来描述的(gluPerpective只是计算视锥参数并将其传递给glFrustum)。因此,通过确定对象的视锥剔除,即如果它们被剔除,您可以确定它们是否仍然可见。

当你说他们离开相机时,你的意思是他们离开两侧是因为你看的是固定的距离吗?或者你的意思是他们就消失了。

如果是第一种情况(在镜头两侧),您应该能够根据当前的透视设置计算出您需要从 x,y 平面向上移动摄像机的距离。

如果是后一种情况,您可能只需要增加最大 Z 深度即可阻止它们被剔除。

[编辑 1] 在 gluPerspective 调用中,您可以设置视角和纵横比。您应该知道到飞机的距离以及从中心点到汽车的距离,以便获得所需的所有信息。剩下的就是一点三角函数,以确定什么是可见的,什么是不可见的。

[编辑 2] 我找到了另一个非常有用的教程,它描述了进行您想要做的视锥剔除的各种方法。