3

基本的に、三角形の各コーナーに 3 つのテクスチャを指定し、コーナーの glColor() で色が補間されるように、あるテクスチャから別のテクスチャに補間したいと考えています。

編集:これはテクスチャ コンバイナでは不可能と思われるため、シェーダで実行したいと考えています。

これは私が今持っているフラグメントシェーダーコードです:

vec4 c = gl_Color;
gl_FragColor = texture2D(Texture0, TexCoord0)*c.r+texture2D(Texture1, TexCoord1)*c.g+texture2D(Texture2, TexCoord2)*c.b;

glColor(); を使用しています。色 (1,0,0)、(0,1,0)、(0,0,1) を各三角形の角にプッシュし、色を読み取って、それに応じてどのテクスチャをどれだけブレンドする必要があるかを確認します.

問題は、頂点に色を使用できなくなったことです。そのため、フラグメントシェーダーにテクスチャをブレンドする方法を伝えるための最良のアプローチは何か、三角形の各コーナーで glColor() を使用していくつかを適用できることを尋ねています。着色?

Edit2:ブレンド比率を伝える 3D texcoord を送信することでなんとか機能させることができましたが、これが最善のアプローチですか? これについてもっとアイデアを聞きたいです。

4

1 に答える 1

1

これはシェーダーを使わないと無理だと思います。あなたの OpenGl コードでは、とにかく OpenGl が各コーナーに影響を与えるテクスチャを知ることができません。これには頂点プロパティ (色またはテクスチャ座標以外) が必要ですが、これはシェーダーなしでは不可能です。

ただし、2 番目のテクスチャでアルファ ブレンディング (頂点カラーからアルファ値を選択) を使用することで、2 つのテクスチャで可能になる可能性があります。確信はないけど。

于 2011-08-08T17:39:22.333 に答える