유니티 소스의 정점 데이터만 얻으면

8855 단어 UnityC#

먼저


점운 데이터를 처리하는 연구를 진행했기 때문에 3D 역할의 점운 데이터도 원한다.
유니티도 오랫동안 사용하지 않아서 잘 모르겠어요.
최종적으로 정점수 * 비트의 행렬을 얻는다.
참고 문서:http://backbone-studio.com/brog-unity01/

유니티 소스


Asset Store에서 Unity 소스, unitychan을 다운로드합니다.prefab를 Hierarchy 뷰로 드래그합니다.
unitychan.prefab의 구조를 관찰하면 다음과 같다.

mesh_루트라는 빈 대상의 하위 대상에는 각각의 부품이 있으며, 각각 Skinned Mesh Render라는 정점 정보의 격자를 추가합니다.
여기서 얻으면 돼.

코드


다음 코드를 쓰십시오.
PointCloud.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChildAccess : MonoBehaviour {

    public string filename = "test";
    void Start () {
        // 頂点数を数える
        int vtx_num = 0;
        foreach(Transform child in gameObject.transform){
            SkinnedMeshRenderer skin = child.GetComponent<SkinnedMeshRenderer>();
            vtx_num += skin.sharedMesh.vertices.Length;
        }
        Vector3[] vtx_posi_array = new Vector3[vtx_num];

        // 頂点座標を取得
        int count = 0;
        foreach(Transform child in gameObject.transform){
            SkinnedMeshRenderer skin = child.GetComponent<SkinnedMeshRenderer>();
            Mesh child_mesh = skin.sharedMesh;
            for(int i = 0; i < child_mesh.vertices.Length; i++){
                float x = child_mesh.vertices[i].x;
                float y = child_mesh.vertices[i].y;
                float z = child_mesh.vertices[i].z;
                vtx_posi_array[count] = new Vector3(x, y, z);
                count++;
            }
        }

        // csvファイルに書き込む
        try{
            filename = filename + ".csv";
            bool append = false;
            using(var sw = new System.IO.StreamWriter(@filename, append))
            {
                for(int i = 0; i < vtx_posi_array.Length; ++i){
                    sw.WriteLine("{0},{1},{2}", vtx_posi_array[i].x, vtx_posi_array[i].y, vtx_posi_array[i].z);
                }
            }
        }
        catch(System.Exception e)
        {
            Debug.Log(e.Message);
        }
    }
    void Update () {

    }
}

간단히 말해 mesh_루트의 하위 대상을 순서대로 스캔하고 정점 좌표를 얻습니다. 좌표의 배열에 저장하고 마지막으로 csv 파일로 출력합니다.
이 파일을 mesh_로 설정루트에만 추가하면 실행됩니다. 최종적으로 11407*3의 행렬을 얻을 수 있습니다.

끝내다


정점의 색 정보를 더해 정점수*(차원수+3색)의 행렬을 얻으려고 했지만 제대로 완성하지 못했다.
다른 방법을 시도해 볼 수 있을 것 같습니다.
또 다른 3D 모델이 이런 구조라면 이 파일을 사용할 수 있다면 어떨까요.
© UTJ/UCL

좋은 웹페이지 즐겨찾기