2016-10-15 13 views
0

私のシェーダでは、vertex.positionに行列を掛けてuvを計算します。 オブジェクトを移動しないとうまくいくようですが、オブジェクトを移動したりオブジェクトを拡大したりすると、頂点の位置が変わり、uvが間違っていきます。ユニティシェーダのuvパラメータの保存方法は?

shaderにパラメータを格納する方法がある場合は、このようにして、初めて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(配列インデックス)を見つけ、メッシュクラスdoesntのはtexture2dArrayを持っているようです、私が見つけたクローゼットは、uv、uv2、uv3、uv4パラメータですが、4つ以上のテクスチャが必要です – ywj7931

関連する問題