0

Nehe の #20 チュートリアルとマスキングに関する質問を読んで、白黒画像と不透明画像を使用してマスキングを実装しましたが、結果は完全に期待どおりではありません (iPhone で OpenGL ES 1 を使用しているため、使用できませんシェーダー)。
Source+Mask=Result
結果の画像でわかるように、マスクの白い部分は透明ではなく、黒い部分はソースの色ではなく、白 (!) レンダリングに使用するソース コードは次のとおりです。

    // we render from one big texture using coordinates
    // so changing rectangle will change the drawn image
    _pressedFrame = maskRect;
    glBlendFunc(GL_DST_COLOR,GL_ZERO);
    [super render:sender];

    _pressedFrame = normalRect;
    glBlendFunc(GL_ONE,GL_ONE);     
    [super render:sender];

助けてくれてありがとう!

4

1 に答える 1

2

NeHe チュートリアルのテクニックが正しく機能するためには、ソース イメージの背景 (つまり、マスク イメージが白い部分) が完全な黒である必要があります。最初の画像からはソースが正確にはわかりませんが、最終的な画像で明るくなっている場所は黒ではないと思います。

ただし、OpenGL ES 1.1 では、この方法でマスキングを行う必要はありません。マルチテクスチャリングを使用して、単一パスでアルファ マスクを使用してイメージをレンダリングできます。さらに、マスクと画像が常に一緒に描画される場合は、それらを 1 つの RGBA テクスチャに焼き付けた方がよいでしょう。マルチテクスチャリングは必要ありません。

于 2010-06-24T08:45:05.193 に答える