我在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]);
}
答案 0 :(得分:1)
这是预乘alpha的正常行为(您的混合函数暗示)。当您使用预乘的alpha时,您必须一起更改颜色和alpha。
因此,每当您更改originalColor * alpha
的值时,新颜色应等于alpha
。注意,您应该使用alpha的浮点归一化值(例如 0.0 - 1.0 )而不是定点值(例如 0 - 255 )
注意更传统的混合方程式如何执行Src RGB * Src A ?如果RGB分量实际上与alpha分量相乘,则您的特定混合方程式只能正常工作。