Unity着色器如何存储uv参数?

时间:2016-10-15 08:03:14

标签: unity3d shader fragment-shader shaderlab

在我的着色器中,我通过将vertex.position乘以某个矩阵来计算uv。 如果我不移动我的物体,这看起来很好,但是一旦我移动物体或缩放物体,顶点位置就会改变,紫外线也会出错。

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

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

1 个答案:

答案 0 :(得分:0)

UV坐标存储在每个顶点的网格中。您可以从代码更新它们,而不是从着色器:

Vector2[] CalculateUV(Vector3[] vertices);

...

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