通过添加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);
非常感谢!
答案 0 :(得分:3)
你需要通过glDepthFunc
使用具有"等于"的东西来设置适当的深度函数。在其中(可能是GL_LEQUAL
),因为你在同一深度画了两次。
您还可以考虑在片段着色器中自己混合纹理。