需要があるかどうかはわからないけれども、調べものしていて見つけたのでメモしておく。
Unityでは、スクリプトからメッシュの頂点やポリゴンのインデックスに直接アクセスできる。
スキンメッシュのモデルならSkinnedMeshRendererから、それ以外ならMeshFilterからメッシュの参照を取り出すことが出来る。
スキンメッシュなら、こんな感じ。
SkinnedMeshRenderer renderer = GetComponent<SkinnedMeshRenderer>(); Mesh mesh = renderer.sharedMesh;
メッシュフィルターなら、こんな感じ。
MeshFilter filter = GetComponent<MeshFilter>(); Mesh mesh = filter.mesh;
このメッシュの中にポリゴンのインデックス(三角形の頂点順序)があってそれも取り出せる。
//サブメッシュの数だけループ
for (int m=0; m < mesh.subMeshCount; m++) {
//ポリゴンのインデックスを取得する
int[] triangles = mesh.GetTriangles(m);
//ポリゴンなので3つずつインクリメントしてループ
for (int i = 0; i < triangles.Length; i += 3) {
//2番目と3番目の頂点インデックスを入れ替えて三角形を反転する
int index = triangles[i+1];
triangles[i+1] = triangles[i+2];
triangles[i+2] = index;
}
//ポリゴンのインデックスをメッシュに戻す
mesh.SetTriangles(triangles, m);
}
//法線を再計算する
mesh.RecalculateNormals();
[/csharp]
とこんな感じでメッシュを反転させることができる。
プリミティブのキューブを反転させれば部屋の中のような空間をつくれるし、球を反転させれば天球を作ることができる。
1件のコメント