FBX 해독 ④ Mesh 그리기 편

6263 단어 FBXHoloLensC#Unity
ぃ tp // 이 m/g 시라와/있어 ms/87 아 14 fd9844 d474 b72
계속

고정 허프만으로 전개해 간다.



Vertices를 순서대로 읽으면
0x00 0x00 (4,1) F0 3F (3,6) ... 와 같이 계속된다
여기서 괄호는 (일치 길이, 자신으로부터의 거리)를 나타내며,
9 8 4 (2,3)9 8 4 *9 8*또한 一致長>自分からの距離의 경우 일치 길이에 도달 할 때까지 동일한 위치를 반복
3 5 2 1 (6,3)3 5 2 1 *5 2 1 5 2 1*
즉 Vertices의 Data는
0x00 0x00 0x00 0x00  0x00 0x00 0xf0 0x3f
0x00 0x00 0x00 ...

로 번역할 수 있다.
종료 코드를 읽을 때 블록은 종료 될 수 있습니다.
여러 블록이있는 경우 마지막으로 그들을 연결합니다.

이와 같이 번역해 나가면 최종적으로 192byte=(8*24)의 배열을 발견할 수 있어 이것은 Double형의 크기가 8bytes인 것을 생각하면 납득이 가는 숫자.
그리고는 나온 숫자를 Double형과 같이 배정밀도 부동 소수점수형으로서 8byte씩 갈아 갈 뿐.

Unity로 표시



Mesh 클래스 사용



main
Mesh mesh = gameObject.AddComponent<MeshFilter>().mesh;
MeshRenderer renderer = gameObject.AddComponent<MeshRenderer>();

//配列から得た情報
Vector3[] vertices = new Vector3[]
    {
        new Vector3(1f, 1f, -1f),
        ... //上で得た頂点情報をそのまま使える
    }
Vector3[] normals = new Vector3[]{}
int[] verticesIndex = new int[]
    {
        0, 1, 2, 3,
       ....
    }

//meshのセットアップ
mesh.vertices = vertices;
mesh.triangles = verticesIndex;//四角ポリゴンなのでtriangleを使うべきなのかは謎。
mesh normals = normals;
GetComponent<MeshFilter>.mesh = mesh;
mesh.SetIndices(makeIndices(8), MeshTopology.Quads,0);


makeIndices()
int[] makeIndices(int n)
{
    int[] indices = new int[n];
    for(int i = 0; i<n;i++)
    {
        indices[i] = i;
    }
    return indices;

}


normals는 아직 손을 붙이지 않은 것에서 깨끗하게는 보이지 않을 것이지만 입방체가 보일 것입니다 ...

결과







WTF !!!



개선을 위해 노력하겠습니다. 결코 멀지 않다.

HoloLens 앱 개발 기사 목록



ぃ tp // 이 m/g 시라와/있어 ms/6c026f2c67dc332f829b 부터

좋은 웹페이지 즐겨찾기