绘制并加载GL_DEPTH_COMPONENT纹理

时间:2010-05-07 13:38:52

标签: c++ opengl

我正在尝试从文件加载深度缓冲区并将其复制到深度缓冲区,而不是每帧清除它。

无论如何,我对opengl有点新意,所以我只是尝试加载我的纹理:

glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, DepthData);

我试着像这样画出来:

glBindTexture(GL_TEXTURE_2D, DepthTexture);
glColorMask(FALSE, FALSE, FALSE, FALSE);

glBegin(GL_QUADS);

    glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, 1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0f, 1.0f);
    glTexCoord2f(1.0f, 0.0f); glVertex2f(1.0f, 0.0f);

glEnd();

我尝试加载一个深度缓冲区,每个值设置为1.0,我试图绘制的所有东西都隐藏了,而它不应该。

我该怎么办? 顺便说一句,我不想​​使用glDrawPixels

1 个答案:

答案 0 :(得分:4)

您确实正在绘制未更新颜色缓冲区且仍在更新深度缓冲区的纹理四边形。但是,您编写的值是多边形的实际深度值,而不是纹理中找到的值!这就是为什么一切都归结为z-culled。

实现所需内容的最简单方法是使用自定义着色器并编写从纹理中读取的自定义gl_FragDepth值。