2010-10-22 79 views
0

我正在嘗試使用3D紋理紋理我的隨機生成的地形。我希望能夠擁有許多不同區域混合的不同地形紋理。我似乎無法弄清楚R座標拾取的紋理部分。如果我將它設置爲0.0,那麼它會給出1.0之前和0.0之後的紋理混合。它似乎有幾點沒有混合。 R座標(浮點)如何與3D紋理的深度一起工作? (IE。深度除以東西乘以東西等)R座標(浮點)如何選擇使用3D紋理的哪一部分? (OpenGL)

一個我需要弄清楚這個的例子: 我有一個3D紋理是一個128x512圖像。第一個128x256是草地紋理。下半場是泥土質地。我把這個紋理當作4個128x128的方塊來處理,所以深度是4.我怎樣才能找到一個穩定的草紋理的float R座標?我該怎麼做才能找到開始/結束浮點R座標以便從污垢混合到草地?

任何幫助表示讚賞!

回答

1

您發現要從第0層進行採樣,必須使用r = 1/(depth * 2)。一般來說,要獲得圖層N,請使用r = (N + 1/2)/depth

順便說一下,此結果對於前2個座標是相同的。如果你想要一個三角形的值恰好是2/d紋理的第一個紋理值,那麼你需要將座標(0.5/width, 0.5/height)傳遞給每個頂點。

但是,你要做的是什麼紋理陣列已被髮明(DX10時代功能)。 3D紋理由於多種原因而不太合適,最大的問題是mip-mapping不能像你想要的那樣工作(獨立於第三維的2D級別之間的mipmap)。

Mip-mapping對於減少混疊僞像(特別是在覆蓋所有深度範圍的地形上)至關重要。當你開始在你的圖層上開啓mip-mapping時,當地形更遠時,你會看到不同的材質圖層會開始混合,無論你的紋理座標如何。這就是mipmapping的原因......您的128x128x4紋理變成64x64x2,32x32x1,16x16x1,因爲您將它們用於更遠的幾何圖形。當你達到32x32x1的水平時,你只剩下1層,這很可能是你的泥土和草地的混合物。再次,不是你想要的。

相比之下,紋理數組將提供128x128 [4],64x64 [4],32x32 [4],16x16 [4],您可以在4層中選擇不同的材質,而不考慮mipmapping。

+0

我不確定紋理陣列是否也能讓我輕鬆做到這一點,但我使用3D紋理的主要原因是我可以輕鬆地在不同紋理之間進行混合。要在拼貼1和拼貼2之間進行混合,我所要做的就是在1 /(深度* 2) - 2 /(深度* 2)之間進行插值。到目前爲止,我還沒有注意到任何文物,但是如果我看到任何我無法解決的問題,我一定會牢記您的建議。謝謝! – Barakat 2010-10-24 02:43:23

0

我意識到我做了一些錯誤的代碼,這讓我覺得它並不是簡單地獲得圍繞R的紋理,而是實際上。所以第一個紋理是1.0 /(深度* 2)。