sha*_*vey 8 iphone opengl-es cocos2d-iphone
我如何使用OpenGLES 1.1(iPhone)绘制纹理,但只使用alpha绘制一些颜色?
结果应该是与原始纹理完全相同的alpha蒙版,内部使用单一纯色而不是原始颜色.
我使用glDrawArrays同glCoordPointer和glVertexPointer.
我认为做两次传球,一次是质地,另一次是纯色.我似乎无法找到倒置glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);.
编辑:经过一些更多的环顾四周,我认为应该可以实现使用glTexEnvf.这只是找到正确论点的问题.
如上所述,glTexEnv是要走的路.
要替换纹理的RGB组件并保持其alpha不变,您可以尝试这样的事情(此代码使用红色作为替换颜色):
glColor4f( 1.0f, 0.0f, 0.0f, 1.0f );
glActiveTexture( GL_TEXTURE_0 );
glEnable( GL_TEXTURE_2D );
glBindTexture(GL_TEXTURE_2D, spriteTexture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
// ... draw as usual
Run Code Online (Sandbox Code Playgroud)
这里有一些解释.
使用GL_COMBINE时,您可以完全控制不同纹理阶段的输入/输出如何组合在一起.在这种情况下,我们指定要替换(GL_REPLACE)纹理阶段0的RGB分量与前一阶段(GL_PREVIOUS)的内容,在这种情况下是单一颜色(使用glColor4f设置).
我们没有为alpha组件设置任何特殊内容,因为我们需要常规行为.添加以下行将具有与未包括(默认行为)相同的效果:
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2080 次 |
| 最近记录: |