我想在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吗?感谢。
答案 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组件作为混合函数。