對於不規則的幾何體的紋理座標, 差不多都是通過投影來算的吧
冒似有個"球狀紋理"投影到一個物體上, 就像CubeMap
還有一種"圓柱形紋理", 對物體一圈進行投影
GPU Gems3裡有個不規則地形(X,Y,Z三個方向上都有面), 這時就沒法簡單地用X,Z座標來計算UV了
對於基於高度圖的地形來說, 如果Y方向很高的話, 紋理會有明顯的展開現象
這時就可以換個方向進行投影, 用於製作懸崖之類的複雜地形
float4x4 matViewProjection;<br />float scaler;</p><p>struct VS_INPUT<br />{<br /> float4 Position : POSITION0;<br /> float3 Normal : NORMAL0;<br />};</p><p>struct VS_OUTPUT<br />{<br /> float4 Position : POSITION0;<br /> float2 Texcoord : TEXCOORD0;<br />};</p><p>float2 GetCliffUV(float3 pos, float3 normal)<br />{<br /> if (abs(normal.x) < abs(normal.z))<br /> {<br /> return float2(pos.x, pos.y);<br /> }<br /> else<br /> {<br /> return float2(pos.z, pos.y);<br /> }<br />}</p><p>VS_OUTPUT vs_main( VS_INPUT Input )<br />{<br /> VS_OUTPUT Output;</p><p> Output.Position = mul( Input.Position, matViewProjection );<br /> Output.Texcoord = GetCliffUV(Input.Position, Input.Normal) * scaler;</p><p> return( Output );<br />}<br />
不過有個接縫問題該怎麼處理呢?
用兩層進行過渡嗎?