メッシュコンポーネントの頂点位置(Vector3配列)を得る


メッシュコンポーネントの頂点位置(Vector3配列)を得る


  void Start () {
       MeshFilter mf = GetComponent<MeshFilter>();
       Vector3[] test = mf.mesh.vertices;
       
       foreach (Vector3 item in test) {
           print(item);
       }
       
   }

Cube等でテストしてみると24頂点得られた(つまり各面は独立していて頂点マージされた数ではなかった)
オーサリングツールから吐き出したFBXのメッシュはどうなるか未検証。今後調べる

メッシュの再加工


  void Start () {
       MeshFilter mf = GetComponent<MeshFilter>();
       Vector3[] test = mf.mesh.vertices;
       
       for (int i = 0; i < test.Length; i++) {
           test[i] += Vector3.up * 3;
       }
       
       mf.mesh.vertices = test;
       mf.mesh.RecalculateBounds();    //メッシュコンポーネントのプロパティboundsを再計算する
   }

変更した値を戻すことでメッシュに反映させられる

マトリクスを利用したメッシュの加工


  Matrix4x4 mat;
   Vector3[] vertex,afterVertex;
   
   void Start () {
       MeshFilter mf = GetComponent<MeshFilter>();
       vertex = mf.mesh.vertices;
       afterVertex = new Vector3[vertex.Length];
       
       Vector3 pos = new Vector3(1,2,3);
       Quaternion rot = Quaternion.LookRotation(new Vector3(1,0,1));
       Vector3 scale = new Vector3(1,2,3);
       
       mat.SetTRS(pos,rot,scale);
       print(mat);
       
       for (int i = 0; i < vertex.Length; i++) {
               afterVertex[i] = mat.MultiplyPoint3x4(vertex[i]);
       }
       
       mf.mesh.vertices = afterVertex;
   }

メニュー



  • 最終更新:2014-06-13 10:36:22

このWIKIを編集するにはパスワード入力が必要です

認証パスワード