使用glDepthFunc(GL_GREATER)不会画任何东西

时间:2019-02-01 10:30:38

标签: c++ opengl

我正在运行以下代码,以使用export {default} from './Logo.js'; 函数绘制矩形, 但是我没有得到相机最远的矩形的颜色,而是得到了白色的屏幕。

GL_GREATER

所以我期望在屏幕上看到最远的矩形颜色,它是绿色(这也很奇怪,因为zNear为-1,并且使用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); 绘制绿色而不是红色-我不明白为什么也是如此)。 但是使用GL_LESS我得到的是白色屏幕,而不是绿色。 我在这里想念什么?

2 个答案:

答案 0 :(得分:0)

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

如果深度缓冲区中的每个值均为1并且深度测试为GL_GREATER,则深度测试在任何情况下都将失败,因为深度不能大于1。
深度缓冲区的“清除”值可以通过glClearDepth进行更改。

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

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

glEnable(GL_DEPTH_TEST);

答案 1 :(得分:-1)

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