C++ OpenGL:如何更改应用程序中的znear和zfar?

C++ OpenGL:如何更改应用程序中的znear和zfar?,c++,opengl,C++,Opengl,我正在尝试更改应用程序的zfar和near。我尝试过在初始化时使用glFrustum glFrustum(0.0, SCRWIDTH, SCRHEIGHT, 0.0, 1.0, 1000.0); 但无论我输入什么值,当我向后移动时,对象仍然会消失。我也尝试过使用一个消极的znear,但仍然没有改变 我不想缩放。您使用的是固定函数还是着色器?我必须查看代码的其余部分,以提供更准确的建议。在调用glFrustum之前,请确保使用GL_投影和glLoadIdentity调用glMatrixMode。

我正在尝试更改应用程序的zfar和near。我尝试过在初始化时使用glFrustum

glFrustum(0.0, SCRWIDTH, SCRHEIGHT, 0.0, 1.0, 1000.0);
但无论我输入什么值,当我向后移动时,对象仍然会消失。我也尝试过使用一个消极的znear,但仍然没有改变


我不想缩放。

您使用的是固定函数还是着色器?我必须查看代码的其余部分,以提供更准确的建议。在调用glFrustum之前,请确保使用GL_投影和glLoadIdentity调用glMatrixMode。然后确保在执行任何平移/旋转/缩放操作之前,GL绘图函数使用GL_MODELVIEW调用glMatrixMode,后跟glLoadIdentity。记住:glTranslate*的Z轴为负数,但glFrustum的Z轴为负数。无论使用什么值,对象都将不可避免地消失;你有一个有限的深度范围。通常,您希望zNear和zFar保持一定程度的接近,例如,不是0.002f和20000000.0f,因为除了定义可表示的深度范围外,这两个值还对精度产生负面影响。您可以拥有非常大的范围,但无法解决相邻对象之间的深度差异。我应该指出,我指的不是屏幕空间中的深度范围GLDEPTRANGE。。。;只是在剪切之前的Z值范围。感谢您的回复,我将研究我正在尝试做的事情的最佳解决方案,感谢您提供的信息!