OpenGL and GL_Blend with glDrawElements



通过添加gldepthfunc(gl_always);

解决了解决

我正在尝试将两个纹理与glDrawElements混合在一起。普通pointer和vertexpointer数据是相同的,但对于这两个纹理而言,TexCoordPointer有所不同。无论我尝试哪种BlendFunc,尽管Texture_two的大部分是透明的,但总是只能看到其中一种纹理。 glDrawElements是否可以使用gl_blend或我做错了?

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glBlendEquation(GL_FUNC_ADD);
glDepthFunc(GL_ALWAYS);
glNormalPointer(GL_FLOAT, 0, normals);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 0, texture_ind_one);
glBindTexture(GL_TEXTURE_2D, texture_one);
glDrawElements(GL_TRIANGLES, indicies_num, GL_UNSIGNED_INT, indices);
glNormalPointer(GL_FLOAT, 0, normals);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 0, texture_ind_two);
glBindTexture(GL_TEXTURE_2D, texture_two);
glDrawElements(GL_TRIANGLES, indicies_num, GL_UNSIGNED_INT, indices);

非常感谢!

您需要使用具有"等于"的东西(可能是GL_LEQUAL)通过glDepthFunc设置适当的深度函数,因为您是在相同的深度绘制的两次。

您还可以考虑将纹理融合在碎片着色器中。

最新更新