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

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);

我的场景可以正常工作,但是一旦我离开我的物体一点点,它们就会消失(如图中的红色球)。:Frustrum example 我从这个网站获取了图表 我知道红色球在视野之外不会被显示。因此,我想要增加绘制停止的距离。我试过将其增加到3000.0f,但不起作用!
    gluPerspective(45.0f,(GLfloat)width/(GLfloat)height, 0.5f, 3000000.0f);

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

一些关于问题的图片: 图片1 图片2


2个回答

4
我找到了问题所在,现在我回答自己的问题以帮助未来遇到同样问题的人:
更改zfar可以正常工作。我遇到的问题是(为了简化问题而未包含在问题中)我的天空盒。天空盒很小,将物体与天空隐藏起来。在图片2中很容易看到!
因此,如果您遇到类似的问题,请仔细检查您的天空盒。如果是zfar的问题,一切都应该是黑色的,而不是有天空纹理!

3
只需禁用深度写入,绘制天空盒:glDepthMask(GL_FALSE); draw_skybox(); glDepthMask(GL_TRUE); - datenwolf
我将图片添加到了你的回答评论中,后来又将它们添加到了原始问题中! - Oscar Foley

3
近距离和远距离值定义了深度缓冲区的精度。近距离和远距离的比例越高,深度缓冲区精度错误就越多。因此,即使您的深度缓冲区可以绘制对象,但如果它们很小且彼此靠近,则仍然可能不可见(被拒绝或被覆盖)。
如果您将近距离从3000.0f增加到10000.0f,它可能仍然有效。您的对象有多大?
首先,为什么需要那么大的视距?也许有其他方法更适合您的需求。

物体大小:我画了一个1.0f大小的大建筑(游乐轮),然后将其缩放为70.0f。您可以在此处查看对象大小:http://i1188.photobucket.com/albums/z416/cad_vga/Attraction/Capt1.png这里是我的问题:http://i1188.photobucket.com/albums/z416/cad_vga/Attraction/Capt2.png - Oscar Foley

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