OpenGL摄像机外部的物体

3

我正在使用 gluPerspective 和 gluLookAt 来创建透视视图,并且已经获得了一个物体的 x、y 世界坐标。那么,如何确定该物体是否在可视区域之外?请注意,相机始终在移动。


1
截锥体剔除是一种将不在屏幕上的所有内容移除的过程,因此我建议可以使用相同的算法来找到相反的结果:http://www.flipcode.com/archives/Frustum_Culling.shtml - Robert Massaioli
但是我想知道是否移除了某些内容。我有两辆车,相机设置在它们的中间点。如果它们离得太远(即它们都“离开”了相机),我必须把它们放回中间,有什么建议吗? - Luís Jesus
2个回答

5

首先,OpenGL没有相机,它只是在转换顶点。而gluLookAt只是对物体应用了一个与虚拟相机运动相反的变换。

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


0

当你说他们离开相机时,是指他们在侧面,因为你正在固定距离下观察吗?还是说他们只是消失了。

如果是第一种情况(镜头两侧),您应该能够根据当前的透视设置计算出需要将相机向上移动多远。

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

[编辑1]gluPerspective调用中,您设置了视角和纵横比。您应该知道到平面的距离以及从中心点到汽车的距离,因此您拥有所需的所有信息。剩下的就是一些三角函数来确定什么是可见的,什么是不可见的。

[编辑2] 我找到了另一个非常有用的教程,其中描述了各种执行所需的截锥体剔除的方法。


这是第一个情况。相机与汽车保持固定距离,但随着汽车旋转,这是我的主要问题。 - Luís Jesus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接