gpt4 book ai didi

c++ - 使用 glDepthFunc(GL_GREATER) 不会绘制任何东西

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:25 25 4
gpt4 key购买 nike

我正在运行以下代码以使用 GL_GREATER 函数绘制矩形,但是我得到的不是距离相机最远矩形的颜色,而是白屏。

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_GREATER 我得到的是白色屏幕而不是绿色屏幕。我在这里缺少什么?

最佳答案

默认情况下,深度缓冲区中的值在 [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);

关于c++ - 使用 glDepthFunc(GL_GREATER) 不会绘制任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54477604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com