2012-04-28 73 views
0

我對操縱網格本身沒有任何問題,但是每個圖塊(基本上是4個頂點的正方形,整個地形網格都是由網格的網格構成的)必須能夠給出我選擇的不同紋理。到目前爲止,我只能給出網格1紋理,並通過改變頂點緩衝區中CUSTOMVERTEX-es的UV值來重複它自己。然而,我不能在這裏創建不同的貼圖紋理:http://classic.battle.net/war3/images/neutral/heroes/ss02.jpg - 你可以看到那裏是草地磚和側面的一些污垢磚,左側是一些礫石。如何在DirectX9 C++中紋理平鋪的3D地形?

我有愚蠢的想法,使每個瓷磚單獨的網格,但那只是..更熱和紋理沒有鉗好。我相信必須有一些功能,讓我紋理terrainmesh分開的正方形:(

回答

1

這樣做的一種方式是使用alpha貼圖來定義哪個貼圖到達地形上的哪個位置。通常,您將4個或更多貼圖綁定到着色器,並使用另一個貼圖,它是rgba組件來定義紋理的位置應該會出現

假設你有草,泥土,沙子和雪以及alpha地圖紋理,紅色組件控制草地的可見性,綠色組件控制污垢,藍色組件控制沙子和alph一個組件控制着雪。

在像素着色器中,您從alphamap中讀取數據,然後使用rgba組件中的值從草地,沙地,污垢雪紋理混合。

一些僞代碼:

float4 mix = sampler.read(alphaTexture,alphaTexCoord); 
float4 finalColor = sampler.read(grassTexture,texCoord) * mix.r + 
        sampler.read(dirtTexture,texCoord) * mix.g + 
        sampler.read(sandTexture,texCoord) * mix.b + 
        sampler.read(snowTexture,texCoord) * mix.a; 

正如你可以看到,如果在阿爾法地圖,你有0,0,1,0顏色值的片段將沙子等。

在這個視頻地勢通過這種技術紋理: http://www.youtube.com/watch?v=-mBpMYYtJCo

您可以使用8個紋理和2阿爾法映射了。

希望有所幫助。