【问题标题】:Fade Out OpenGL VBO with Colors but without Texture淡出带有颜色但没有纹理的 OpenGL VBO
【发布时间】:2015-05-09 07:23:19
【问题描述】:

我想在 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, ....

但由于不明原因(使用 Xcode 开发 iPad)而崩溃,我仍在尝试破译。我认为我的所有 glColorPointer 偏移量仍然可以 - 我在 MyVertexObject 中仍然有所有 4 个字节(RGBA)所以我不认为这是一个填充问题 - 我没有更改 glColorPointer 命令中的任何偏移值,只是更改了4到3。

如果我禁用 GL_COLOR_ARRAY 淡化效果很好,但现在我失去了颜色,它使用的是我上面设置的白色。

所以我被困住了,因为我似乎无法将 Alpha 通道与 RGB 颜色分开控制。还有另一种方法可以用颜色淡化 VBO 吗?谢谢。

【问题讨论】:

    标签: opengl-es fade alpha vbo blend


    【解决方案1】:

    您可以使用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 1,但似乎此选项不可用,因此我将看到如何为我的项目过渡到更现代的 OpenGL 设置。
    猜你喜欢
    • 2011-06-22
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多