1

OpenGL ES で要素をレンダリングしていますが、色は同じですが、アルファが異なります。問題は、アルファが .1 の場合、不透明度だけでなく色も変わることです。たとえば、アルファ コンポーネントの値を 0.1 に設定すると、色が黒から紫に変わります。アルファ値が .1 でない場合、またはその他の 10 分の 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]);
}
4

1 に答える 1

1

これは、事前に乗算されたアルファの通常の動作です (ブレンド関数が暗示しています)。事前に乗算されたアルファを使用する場合は、色とアルファを一緒に変更する必要があります。

originalColor * alphaしたがって、の値を変更するたびに、新しい色は と等しくなるはずですalpha。alpha の正規化された浮動小数点値 (例: 0.0 - 1.0 ) を使用し、固定小数点値 (例: 0 - 255 )を使用しないでください。

選択したブレンド関数を検討してください。

             宛先RGB = (ソースRGB * 1.0) + (宛先RGB * (1.0 - ソースA ));

従来のアルファ ブレンディングは次のとおりです。

             宛先RGB = (ソースRGB * ソースA ) + (宛先RGB * (1.0 - ソースA ));

より伝統的なブレンド方程式がすでに Src RGB * Src Aを実行していることに注目してください。特定のブレンド方程式は、RGB コンポーネントが文字通りアルファ コンポーネントによって事前に乗算されている場合にのみ正しく機能します。

于 2013-11-14T23:23:17.420 に答える