如何增加openGL停止绘制对象的距离(zfar / gluPerspective)?

时间:2011-03-14 15:41:58

标签: opengl glut glu

我正在学习OpenGL并且遇到了gluPerspective的问题。这是我在Init()

中使用的代码
// Calculate The Aspect Ratio Of The Window
// The parameters are:
// (view angle, aspect ration of the width to the height, 
//  The closest distance to the camera before it clips, 
// FOV, Ratio,  The farthest distance before it stops drawing)
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height, 0.5f, 3000.0f);

我的场景工作正常..但是当我离开我的物体一点点时,它们会消失(如图中的红球)。 :Frustrum example Web where I took graph from

我知道红球在视线之外并且不会显示。所以我想要的是增加它停止绘制的距离。我尝试增加3000.0f但是没有用!。

    gluPerspective(45.0f,(GLfloat)width/(GLfloat)height, 0.5f, 3000000.0f);

所以我的问题是:如何增加openGL停止绘制对象的距离?

关于这个问题的一些照片: Pic1 Pic2

2 个答案:

答案 0 :(得分:4)

我弄清楚发生了什么,所以我自己回答这个问题以帮助其他人:

更改zfar可以正常工作。我遇到的问题(不包括在简化的问题中)是我的天空盒。 Skybox很小,正在用天空隐藏物体。在pic2中很容易看到!

因此,如果你有类似的问题,请仔细检查你的天空盒。如果它是一个zfar问题,应该是everthing 是黑色而不是天空纹理!

答案 1 :(得分:3)

near和far值定义深度缓冲区的精度。 near和far之间的比率越高,您获得的深度缓冲精度误差就越大。因此,您的深度缓冲区实际上可能允许绘制对象,但如果它们很小并且彼此靠近,它们仍然可能不可见(被拒绝或被透支)。

如果从3000.0f增加到10000.0f,它可能仍然有效。你的物品有多大?

为什么你首先需要那么大的观看距离?也许还有其他方法可以更好地满足您的需求。