Opengl es 使用颜色但不使用纹理淡出OpenGL VBO

Opengl es 使用颜色但不使用纹理淡出OpenGL VBO,opengl-es,fade,alpha,vbo,blend,Opengl Es,Fade,Alpha,Vbo,Blend,我想淡出OpenGL ES中的VBO对象。VBO使用RGBA格式GL_无符号字节绘制,如下所示: 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 chan

我想淡出OpenGL ES中的VBO对象。VBO使用RGBA格式GL_无符号字节绘制,如下所示:

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
我相当确定我应该这样设置混合:

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_数组,淡入效果会很好,但现在我已经失去了颜色,它使用的是我上面设置的白色


所以我被卡住了,因为我似乎无法将alpha通道与RGB颜色分开控制。有没有其他方法可以用颜色使VBO褪色?谢谢。

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

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

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

谢谢-这似乎正是我需要的。我应该指定我仍在使用OpenGL ES 1,但似乎此选项不可用,因此我将了解如何为我的项目过渡到更现代的OpenGL设置。