【问题标题】:OpenGL and GL_Blend with glDrawElementsOpenGL 和 GL_Blend 与 glDrawElements
【发布时间】:2015-05-17 15:28:41
【问题描述】:

通过添加 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);

非常感谢!

【问题讨论】:

  • 尝试通过glDepthFunc 设置深度函数,使用其中包含“等于”的内容,因为您要以相同的深度绘制两次。如果这不起作用,请至少在给定的代码示例中包含深度函数。
  • 谢谢!!!我用 glDepthFunc(GL_ALWAYS);现在完美运行!
  • 发布了我评论的略微修改版本作为答案。

标签: c++ opengl multitexturing


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2011-06-10
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多