4

我正在学习 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);

我的场景工作正常.. 但只要我稍微远离我的物体,它们就会消失(如图像中的红球)。:平截头体示例 我从中获取图表的网络

我知道红球不在视野范围内,不会显示。所以我想要的是增加它停止绘制的距离。我尝试增加 3000.0f 但不起作用!

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

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

关于问题的一些图片: Pic1 Pic2

4

2 回答 2

4

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

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

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

于 2011-03-14T17:02:09.517 回答
3

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

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

为什么首先需要这么大的观看距离?也许还有其他方法更适合您的需求。

于 2011-03-14T16:29:21.950 回答