glBlendFunc の仕組みを知りたいです。たとえば、アルファが tex1 にある 2 つの gl テクスチャがあり、最終イメージにアルファを持たせたいと考えています。色がtex1にある場合、tex2の色が欲しいです。
4 に答える
glBlendFunc は、最終的なカラー フラグメントがフレーム バッファとどのようにブレンドされるかにのみ適用されます。glTexEnv を使用してテクスチャ ステージをブレンドするか、フラグメント シェーダを使用して 2 つのテクスチャを結合することにより、2 つのテクスチャを結合するマルチテクスチャリングが必要だと思います。
シェーダーのセコンド。シェーダーを使用できる場合は、難解なブレンド関数をいじるよりも、データを使ってやりたいことをする方がはるかに簡単です。
申し訳ありませんが、単純なブレンドではこれを行うことができません. たとえば、frament シェーダーを使用して同じことを行っていました。
悲しいことに、これは iPhone の openGL ES 用であるため、シェーダーはありませんが、要点は指摘されています。私の問題は、質問の非常に単純化されたバージョンでした。定義されたテクスチャの一部に単純な色 (アルファを含む) を適用する必要がありました。Lee が指摘したように、テクスチャ ブレンディングは、フレーム バッファにアルファを表示できるようにするためのものです。解決策は、アーティストがテクスチャの「アクション ビット」を白くしてから、レンダリングする頂点に色を割り当てるように主張することでした。このようなもの。
glTexCoordPointer( 2, GL_FLOAT, 0, sprite->GetTexBuffer() );
glVertexPointer( 3, GL_FLOAT, 0, sprite->GetVertexBuffer() );
glColorPointer( 4, GL_FLOAT, 0, sprite->GetColorBuffer() );
glDrawArrays( GL_TRIANGLES, 0, 6 ); // Draw 2 triangles
テクスチャがある場合でも、色があるということはテクスチャの色に追加されることを意味するため、アルファである場合はアルファのままであり、白である場合(私が作成しなければならなかったように)、それは色の色になりますポイントにポインタを置きます。