使用颜色淡化OpenGL VBO但没有纹理

时间:2015-03-07 21:02:50

标签: opengl-es fade alpha vbo blend

我想在OpenGL ES中淡出一个VBO对象。使用RGBA格式GL_UNSIGNED_BYTE绘制VBO,如下所示:

glEnableClientState(GL_COLOR_ARRAY);
glColorPointer( 4, GL_UNSIGNED_BYTE, ....

我很确定我应该像这样设置混合:

glEnable( GL_BLEND );
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glColor4f( 1, 1, 1, alpha ); // I will be changing alpha from 1 to 0

但它没有褪色,这是有道理的,因为我认为src alpha来自我修正的VBO。

所以我想也许我应该将3个字节传递给驱动程序保持我的VBO颜色,然后alpha将来自glColor4f命令。

 glColorPointer( 3, GL_UNSIGNED_BYTE, ....

但是由于不明原因(使用Xcode开发iPad),我仍然试图破译。我认为我所有的glColorPointer偏移量仍然可以正常 - 我仍然在MyVertexObject中拥有全部4个字节(RGBA),因此我不认为它是填充问题 - 我不会更改glColorPointer中的任何偏移值命令,刚刚将4改为3.

如果我禁用GL_COLOR_ARRAY,则淡入淡出效果很好,但现在我已经丢失了颜色并且使用了上面设置的白色。

因此我似乎无法控制Alpha通道与RGB颜色分开。还有另一种方法可以淡化带有颜色的VBO吗?感谢。

1 个答案:

答案 0 :(得分:3)

您可以使用GL_CONSTANT_ALPHA作为混合函数,独立于VBO中的颜色指定混合因子:

glBlendColor(0.0f, 0.0f, 0.0f, alpha);
glBlendFunc(GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA);

这将使用glBlendColor()中指定的alpha组件作为混合函数。