2016-10-15 113 views
0

在我的着色器中,我通過將vertex.position與某個矩陣相乘來計算uv。 這看起來很好,如果我不移動我的對象,但一旦我移動我的對象或縮放對象,頂點位置將改變,紫外線將是錯誤的。Unity shader如何存儲uv參數?

如果有一種着色器存儲參數的方法,像這樣,這樣我只能在第一次計算uv,然後我只使用該uv值。

if(ifCalculated==false) 
{ 
    ifCalculated=true; 
    uv=CalculateUV(); 
    temp = uv; 
} 
else 
{ 
    uv = temp; 
} 

回答

0

UV座標存儲在每個頂點的網格中。您可以從代碼,而不是從着色器更新它們:

Vector2[] CalculateUV(Vector3[] vertices); 

... 

if(!ifCalculated) 
{ 
    var mesh = GetComponent<MeshFilter>().mesh; 
    mesh.uv = CalculateUV(mesh.vertices); 
    ifCalculated = true; 
} 
+0

但我用texture2dArray,在着色器,我迭代texture2dArray並找到合適的uv.z(數組索引),似乎網格類可是沒有texture2dArray中,我發現的壁櫥是uv,uv2,uv3,uv4參數,但我需要超過4個紋理 – ywj7931