これは長いですが、面白いことを約束します。 :)GLSLでの複数テクスチャのブレンド
私は、jMonkeyEngineを使用して別のアプリケーションのテクスチャの外観を模倣しようとしています。私は頂点のリストを持っていて、 "風景メッシュ"を構成する面(三角形)は、(風景の地形に応じて)約7-15の異なるテクスチャでテクスチャ化する必要があります。各三角形には、それに関連するテクスチャコードがあり、そのテクスチャが主に構成すべきテクスチャを示します。もちろん、テクスチャは各面の間で滑らかに混ざり合っている必要があります。
私はこれを可能にする戦略を開発しようとしています(あらかじめ作成されたアルファマップPNGファイルを利用しないで、実行時にテクスチャアルファを実行する必要があります)。今は、頂点シェーダの各頂点で各テクスチャの「強さ」を計算すると、それは隣接するすべての面の地形タイプを考慮に入れることで(これを行う方法はわかりません)ピクセルが頂点からどのくらい離れているかに基づいてアルファ値を設定します。生成された「アルファマップ」は、ピクセルごとに各テクスチャをブレンドするために、フラグシェーダによって使用されます。
これは実現可能なのでしょうか、まったく別の戦略を検討する必要がありますか?私は私が模倣しようとしている(しかし、彼らはHLSLであり、私はGLSLを使用しています)アプリケーションのためのシェーダコードを持っているが、彼らが他の場所で、このブレンド工程やっているように思える:
sampler MeshTextureSampler = sampler_state { Texture = diffuse_texture; AddressU = WRAP; AddressV = WRAP; MinFilter = LINEAR; MagFilter = LINEAR; };
を私はこのHLSL「MeshTextureSampler」が何であるかは不明ですが、このアプリケーションでは必要に応じてすべてのテクスチャをあらかじめブレンドしておき、顔/地形のコードデータに基づいてメッシュ全体に対して単一のテクスチャを作成するようです。それはちょうど影、照明、などですその後
float4 tex_col = tex2D(MeshTextureSampler, In.Tex0);
- 私をリード私の知る限りでは、すべてのテクスチャブレンディングのない並べ替え、:ピクセル/フラグメントシェーダでは、彼らが本当にやるように見えるすべてが、このありませんこのテクスチャのブレンド作業がCPU上であらかじめ実行されていると私は考えています。どんな提案も大歓迎です。私が正しくあなたを理解していれば
+1最初の文に+1してください。 –