2011-12-19 134 views
5

我使用alpha纹理。我想用某种颜色对它进行着色,所以它会根据颜色alpha值进行着色,但是整个不透明度将仅由纹理alpha定义。OpenGL ES:如何用颜色着色纹理

这与多纹理相似,但颜色代替第二纹理。 如何做到这一点?

(更新) 我试图设置纹理组合器。颜色着色很好,但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); 

屏幕截图:

没有着色:

enter image description here

色调与RGBA =(0,0.5%,1%,0.5):

enter image description here

+0

您的代码似乎是正确的我。你能否附上alpha问题的截图或描述它的坏处。 – iHunter 2011-12-26 17:39:05

+0

你可以上传纹理本身吗? – 2011-12-31 19:30:32

+0

另外,渲染代码? – 2012-01-01 16:46:37

回答

0

您是否尝试过上面的代码与glEnable(GL_BLEND)?

+0

它始终启用。 – brigadir 2011-12-30 14:44:55

0

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

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

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

我可以做的另一个建议是开始使用shaders。当我使用它们时,我总是感觉更加控制。

0

我得到了相同的结果(运行在Android三星Galaxy S上,它的价值)。我不明白为什么它不起作用。这些文件看起来很合理。

对我来说,它适用于如果我使用GL_MODULATE RGB。如果我使用GL_ADD或GL_ADD_SIGNED,它会再次失败。即使在Alpha上使用GL_MODULATE也会在RGB上使用这些模式时出现相同的错误行为。你可能会停留在调整你的颜色,而不是插入它们。

总之,这个工作对我来说:

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); 
+0

是的,调制模式都可以正常工作,但看起来并不像我想要的那样。我会把+50放在这里不松动。 – brigadir 2012-01-02 10:31:45

+0

谢谢你的赏金。对不起,我无法提供更多帮助。 – 2012-01-02 15:53:16