使用glDrawElements的OpenGL和GL_Blend

时间:2015-05-17 15:28:41

标签: c++ opengl multitexturing

通过添加glDepthFunc(GL_ALWAYS)解决;

我正在尝试使用glDrawElements在高度场上混合两个纹理。 Normalpointer和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);

非常感谢!

1 个答案:

答案 0 :(得分:3)

你需要通过glDepthFunc使用具有"等于"的东西来设置适当的深度函数。在其中(可能是GL_LEQUAL),因为你在同一深度画了两次。

您还可以考虑在片段着色器中自己混合纹理。