http://qiita.com/gshirato/items/87a14ffd9844dd474b72
の続き
#固定ハフマンで展開していく。
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クラスを使う
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);
int[] makeIndices(int n)
{
int[] indices = new int[n];
for(int i = 0; i<n;i++)
{
indices[i] = i;
}
return indices;
}
normalsはまだ手を付けてないのできれいには見えないはずだが立方体が見えるはず…
#結果
##WTF !!!
改善に向けて努めて行きます。決して遠くはない。
#HoloLensアプリ開発記事一覧
http://qiita.com/gshirato/items/6c026f2c67dc332f829b から