0

通过添加 glDepthFunc(GL_ALWAYS); 解决

我正在尝试将高度场上的两个纹理与glDrawElements. Normalpointer 和 vertexpointer 数据相同,但两个纹理的 TexCoordPointer 不同。无论我尝试哪种 BlendFunc,总是只有一个纹理可见,尽管 texture_two 的大部分是透明的。与gl_blendglDrawElements一起工作还是我做错了?

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);

非常感谢!

4

1 回答 1

3

glDepthFunc您需要通过使用其中包含“等于”的东西(可能)来设置适当的深度函数GL_LEQUAL,因为您在同一深度绘制了两次。

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

于 2015-05-17T15:52:10.460 回答