使用两个透明图像进行深度测试会导致奇怪的伪影

时间:2018-04-18 08:54:37

标签: c++ opengl alphablending depth-testing

我正在渲染一个由两个相同图像组成的丛林,如下图所示: enter image description here

但是当我们转动布什时,两张图像上的深度测试显然存在很大问题: enter image description here

我尝试禁用深度测试,但情况更糟糕(背景灌木与前面的重叠)。 我只是使用这段代码来渲染一个灌木丛(m_tex和m_vertex是文件中加载的灌木的坐标):

//Scene initialisation
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

//Then we render objects one per one
glBindTexture(GL_TEXTURE_2D, m_texture);
glBegin(GL_QUADS);
    glTexCoord2d(m_tex[0][0], m_tex[0][1]); glVertex3d(m_vertex[0][0] + coordinates[0], m_vertex[0][1] + coordinates[1], m_vertex[0][2] + coordinates[2]);
    glTexCoord2d(m_tex[1][0], m_tex[1][1]); glVertex3d(m_vertex[1][0] + coordinates[0], m_vertex[1][1] + coordinates[1], m_vertex[1][2] + coordinates[2]);
    glTexCoord2d(m_tex[2][0], m_tex[2][1]); glVertex3d(m_vertex[2][0] + coordinates[0], m_vertex[2][1] + coordinates[1], m_vertex[2][2] + coordinates[2]);
    glTexCoord2d(m_tex[3][0], m_tex[3][1]); glVertex3d(m_vertex[3][0] + coordinates[0], m_vertex[3][1] + coordinates[1], m_vertex[3][2] + coordinates[2]);
glEnd();

如何设法修复此错误,并使用这两个图像进行相关的深度测试?

1 个答案:

答案 0 :(得分:1)

首先,立即模式(glBegin(),glEnd()等)现在已弃用,所以我建议避免使用它,特别是如果你现在正在学习OpenGL(看一看)在文档here)。

除此之外,您应该发布一个完整示例(看看here),因为有几件事可能会导致您描述的效果(您的场景如何初始化? ,你如何加载纹理?,它们真的是RGB A ?等等。