Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用glDepthFunc(GL_更大)不会绘制任何内容_C++_Opengl - Fatal编程技术网

C++ 使用glDepthFunc(GL_更大)不会绘制任何内容

C++ 使用glDepthFunc(GL_更大)不会绘制任何内容,c++,opengl,C++,Opengl,我正在运行以下代码,使用GL\u greer函数绘制矩形, 但是我没有得到离相机最远的矩形的颜色,而是得到了一个白色屏幕 glClearColor(1, 1, 1, 1); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_GREATER); glOrtho(-1, 1, -1, 1, -1, 1); glColor3f(1, 0, 0); glPushMatri

我正在运行以下代码,使用
GL\u greer
函数绘制矩形, 但是我没有得到离相机最远的矩形的颜色,而是得到了一个白色屏幕

glClearColor(1, 1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_GREATER);
glOrtho(-1, 1, -1, 1, -1, 1);
glColor3f(1, 0, 0);
glPushMatrix();
glTranslatef(0, 0, -0.5);
glRectf(-1, -1, 1, 1);
glColor3f(0, 1, 0);
glTranslatef(0, 0, 1);
glRectf(-1, -1, 1, 1);
glColor3f(0, 0, 1);
glPopMatrix();
glRectf(-1, -1, 1, 1);
所以我希望看到屏幕上最远的矩形颜色是绿色(这也很奇怪,因为zNear是-1,使用
GL_LESS
绘制绿色而不是红色-我也不明白为什么)。 然而,使用
GL\u greer
我得到的是白色屏幕而不是绿色屏幕。
这里缺少什么?

如果要翻转比较,还必须使用
glClearDepth
翻转深度缓冲区清除值。将其设置为0

默认情况下,深度缓冲区中的值在[0,1]范围内。请参阅。
清除深度缓冲区后,深度值默认设置为1。看

如果深度缓冲区中的每个值都是1,并且深度测试大于
GL\u
,则深度测试在任何情况下都会失败,因为深度不能大于1。
用于清除深度缓冲区的值可通过更改

在清除缓冲区之前,将深度缓冲区的清除值设置为0,而不是1:

glClearColor(1, 1, 1, 1); 
glClearDepth(0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glEnable(GL_DEPTH_TEST);