【问题标题】:OpenGL transparent texture (blending)OpenGL透明纹理(混合)
【发布时间】:2012-07-02 21:30:57
【问题描述】:

我需要使我的纹理之一透明。我该怎么做?

处理我的纹理的所有代码是:

    glBindTexture(GL_TEXTURE_2D, textureName);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureImg);

我必须更改/添加什么以使纹理完全透明(全 alpha)?

【问题讨论】:

  • 请注意,透明纹理与渲染透明几何体不同。混合是您需要的一件事,z 排序可能是另一件事。
  • @Kos 我会解释我在做什么。我加载图像并从中制作纹理。我需要将纹理的 alpha 通道更改为 0。在这种情况下,我可以在将来使用画笔工具之类的东西将 alpha 从 0.0 更改为 1.0。我使用多重纹理,所以一个纹理在另一个上,所以如果第二个纹理 alpha 设置为 0,则只有第一个纹理可见,当我将其更改为 1 - 第二个纹理将可见。我认为我不需要 z 排序。但是感谢您的帮助。
  • 哦,如果您不想绘制透明几何图形并计划仅使用 Alpha 通道来混合不同的纹理以在不透明对象上实现最终颜色,那么实际上您既不需要混合也不需要 z -排序。只需对片段着色器中的所有纹理进行采样,然后使用您想要的任何方程式(如T1.rgb*T1.a+T2.rgb*(1-T1.a)获得最终颜色。

标签: objective-c xcode cocoa opengl


【解决方案1】:

提供的代码只是设置纹理。您还需要使用

启用混合
    glEnable(GL_BLEND);

并设置适当的blending function

【讨论】:

  • 谢谢您,我会尝试您建议的解决方案并提供反馈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 2011-04-03
  • 2015-03-20
  • 1970-01-01
相关资源
最近更新 更多