【发布时间】: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