這很長,但我保證它很有趣。 :)在GLSL中混合多個紋理
我試圖模仿使用jMonkeyEngine的另一個應用程序的紋理的外觀。我有一個頂點列表和構成「景觀網格」的面(三角形),它應該具有7-15種不同紋理(取決於「景觀」的地形)。每個三角形都有一個與之關聯的紋理代碼,表示特定三角形應該主要由哪個紋理組成。當然,紋理應該在每張臉之間平滑融合。
所以我試圖制定一個策略,允許這(它不利用預先製作的alpha地圖png文件,紋理alphas需要在運行時完成)。現在我想象一下,如果我計算每個頂點(頂點着色器)中每個紋理的「強度」 - 通過考慮所有相鄰面的地形類型(不確定如何去做) - 我應該能夠根據像素距頂點的距離來設置alpha值。生成的'alpha map'將被frag着色器用於混合每個像素的每個紋理。
這是否可行?或者我應該看看完全不同的策略?我有我試圖模仿應用的着色器代碼(但他們是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爲您的第一句話。 –