Unity shader如何存储uv参数?

问题描述:

在我的着色器中,我通过将vertex.position与某个矩阵相乘来计算uv。 这看起来很好,如果我不移动我的对象,但一旦我移动我的对象或缩放对象,顶点位置将改变,紫外线将是错误的。Unity shader如何存储uv参数?

如果有一种着色器存储参数的方法,像这样,这样我只能在第一次计算uv,然后我只使用该uv值。

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

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