更改alpha会改变颜色

时间:2013-11-14 17:18:36

标签: ios objective-c opengl-es alphablending

我在OpenGL ES中渲染元素并且它们具有相同的颜色,但是具有不同的alpha。问题是当alpha为.1时,颜色会发生变化,而不仅仅是不透明度。例如,当alpha分量设置为0.1时,颜色将从黑色变为紫色。当alpha值不是.1或其他第十个值时,它可以正常工作。

我在绘图之前设置了这个混合:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

绘图:

// if the element has any data, then draw it
if(vertexBuffer){
    glVertexPointer(2, GL_FLOAT, sizeof(struct Vertex), &vertexBuffer[0].Position[0]);
    glColorPointer(4, GL_FLOAT, sizeof(struct Vertex), &vertexBuffer[0].Color[0]);
    glTexCoordPointer(2, GL_FLOAT, sizeof(struct Vertex), &vertexBuffer[0].Texture[0]);
    glDrawArrays(GL_TRIANGLES, 0, [element numberOfSteps] * [element numberOfVerticesPerStep]);
}

1 个答案:

答案 0 :(得分:1)

这是预乘alpha的正常行为(您的混合函数暗示)。当您使用预乘的alpha时,您必须一起更改颜色和alpha。

因此,每当您更改originalColor * alpha的值时,新颜色应等于alpha。注意,您应该使用alpha的浮点归一化值(例如 0.0 - 1.0 )而不是定点值(例如 0 - 255

考虑您选择的混合功能:

目的地 RGB =(来源 RGB * 1.0)+(目的地 RGB *(1.0 - 来源 A ));

传统的alpha混合是:

目的地 RGB =(来源 RGB *来源 A )+(目的地 RGB *(1.0 - 来源<子> A ));

注意更传统的混合方程式如何执行Src RGB * Src A ?如果RGB分量实际上与alpha分量相乘,则您的特定混合方程式只能正常工作。