淡出带有颜色但没有纹理的 OpenGL VBO
Fade Out OpenGL VBO with Colors but without Texture
我想在 OpenGL ES 中淡出一个 VBO 对象。 VBO 是使用 RGBA 格式 GL_UNSIGNED_BYTE 绘制的,如下所示:
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, ....
但是由于不明原因(iPad 开发 Xcode)导致崩溃,我仍在尝试破译。我认为我所有的 glColorPointer 偏移量仍然可以 - 我在 MyVertexObject 中仍然有所有 4 个字节(RGBA)所以我不认为这是一个填充问题 - 我没有更改 glColorPointer 命令中的任何偏移值,只是改变了4 比 3。
如果我禁用 GL_COLOR_ARRAY 淡入淡出效果很好,但现在我失去了颜色,它使用的是我上面设置的白色。
所以我被困住了,因为我似乎无法从 RGB 颜色中单独控制 Alpha 通道。还有另一种方法可以用颜色淡化 VBO 吗?谢谢
您可以通过使用 GL_CONSTANT_ALPHA
作为混合函数来独立于 VBO 中的颜色指定混合因子:
glBlendColor(0.0f, 0.0f, 0.0f, alpha);
glBlendFunc(GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA);
这将为混合函数使用 glBlendColor()
中指定的 alpha 分量。
我想在 OpenGL ES 中淡出一个 VBO 对象。 VBO 是使用 RGBA 格式 GL_UNSIGNED_BYTE 绘制的,如下所示:
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, ....
但是由于不明原因(iPad 开发 Xcode)导致崩溃,我仍在尝试破译。我认为我所有的 glColorPointer 偏移量仍然可以 - 我在 MyVertexObject 中仍然有所有 4 个字节(RGBA)所以我不认为这是一个填充问题 - 我没有更改 glColorPointer 命令中的任何偏移值,只是改变了4 比 3。
如果我禁用 GL_COLOR_ARRAY 淡入淡出效果很好,但现在我失去了颜色,它使用的是我上面设置的白色。
所以我被困住了,因为我似乎无法从 RGB 颜色中单独控制 Alpha 通道。还有另一种方法可以用颜色淡化 VBO 吗?谢谢
您可以通过使用 GL_CONSTANT_ALPHA
作为混合函数来独立于 VBO 中的颜色指定混合因子:
glBlendColor(0.0f, 0.0f, 0.0f, alpha);
glBlendFunc(GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA);
这将为混合函数使用 glBlendColor()
中指定的 alpha 分量。