5

我有 alpha 的纹理。我想用一些颜色给它着色,所以它会根据颜色 alpha 值着色,但整体不透明度将仅由纹理 alpha 定义。

这类似于多重纹理,但使用颜色而不是第二个纹理。怎么做?

(更新)我尝试设置纹理组合器。颜色着色很好,但 alpha 存在问题 - 它不会从纹理中获取价值(如蒙版)。我此时的代码:

glActiveTexture (GL_TEXTURE0); // do we need stage #1?
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, (GLfloat*) &tintColor_);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_ONE_MINUS_SRC_ALPHA);
// this doesn't work for alpha:
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);

截图:

无着色:

在此处输入图像描述

使用 RGBA = (0, 0.5, 1, 0.5) 进行着色:

在此处输入图像描述

4

3 回答 3

0

我得到了相同的结果(在 Android 三星 Galaxy S 上运行,物有所值)。我不明白为什么它不起作用。文档似乎相当清楚。

对我来说,如果我将 GL_MODULATE 用于 RGB,它就可以工作。如果我使用 GL_ADD 或 GL_ADD_SIGNED,它会再次失败。在 RGB 上使用这些模式时,即使在 alpha 上使用 GL_MODULATE 也会产生相同的错误行为。您可能会被困在调制颜色而不是插值上。

总之,这对我有用:

glActiveTexture (GL_TEXTURE0); // do we need stage #1?
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, (GLfloat*) &tintColor_);

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
于 2012-01-01T21:35:02.153 回答
0

您是否使用 glEnable(GL_BLEND) 尝试过上述代码?

于 2011-12-29T07:21:00.833 回答
0

您可能想阅读关于透明度的OpenGL 文档,15.020:“如何实现透明效果?”

确保您以正确的顺序渲染场景(您的答案未显示任何渲染)。

确保您使用的是所需的混合功能。

我可以提出的另一个建议是开始使用着色器。当我使用它们时,我总是感觉更有控制力。

于 2012-01-01T16:46:28.933 回答