如何使用alpha渲染纹理?

时间:2011-09-07 10:13:42

标签: c++ visual-c++ opengl textures alpha

如何使用alpha渲染纹理?

我有一个纹理,需要在不同的位置使用不同的alpha值进行渲染。有没有办法呢? (我的纹理是GL_RGBA)

如果不能动态改变alpha值,我必须为不同的alpha级别创建不同的纹理?

2 个答案:

答案 0 :(得分:3)

首先,确保您的纹理具有Alpha通道。您提到您正在加载RGBA格式,但在图像编辑程序中检查原始文件总是很好。然后确保您的纹理已准备好在openGL中渲染。一个常见的错误是忘记通过glTexParameter*设置纹理的过滤模式。它从需要mipmap的设置开始,所以我发现最简单的开始:

glTexParameteri(GL_TEXTURE_2D, GL_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_MAG_FILTER, GL_LINEAR);

其次,您需要设置openGL以便为混合做好准备。这涉及与glEnableGL_BLEND电话进行glBlendFunc通话。大多数情况下,您需要将函数调用设为glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA),因为大多数其他令牌组合将为您提供您未经过的效果(有关详细信息,请参阅glBlendFunc规范页面)。

最后,确保您在不同的点上对纹理进行采样。如果您使用的是立即模式(使用glVertex*绘制场景),则需要使用glTexGen*或在调用glTexCoord*之前使用glVertex*手动指定纹理点}。如果使用数组数据绘制场景,请确保使用glEnableClientState(GL_TEXTURE_COORD_ARRAY)glTexCoordPointer启用了纹理指针。

答案 1 :(得分:2)

你的纹理是GL_RGBA所以它 每个纹素的。

如果要更改用于渲染的alpha值,我可以考虑以下方法:

  • 更改纹理alpha值(不确定是否表示您不想这样做)。
  • 使用glColor4f更改顶点的Alpha值。它将乘以纹理值。您可能需要使用glEnable(GL_COLOR_MATERIAL)和/或glColorMaterial()
  • 使用顶点着色器更改顶点Alpha值。它将乘以纹理值。
  • 使用片段着色器动态更改采样的纹理值。
  • 使用两个纹理阶段并将它们相乘。第二个将具有修改后的alpha值(请参阅glActiveTexture()和朋友)。
  • 使用片段着色器和两个(或更多)纹理阶段。这是最酷的!