mqo読み込みからのボーン構築

mkmを読み込んでクォータニオン回転とか書いてみようと思ったら、
mkmにはボーンの構成に関する情報が一切含まれていなかった。
親子関係くらい書いてあれば便利な気もするが、
フォーマットが複雑になる(ネストするか参照番号を振る必要があるか)し
mqoに書いてあるじゃんというということなのであろう。
然り。


そういうわけで、まずはmqoからのボーン情報の読み込みから。
前提として、mqoをがパースできてこんな感じになった。

struct Material
{
std::string name; // ボーンの名前になる
};

std::vector<Material> materials;

struct Triangle
{
int materialIndex; // 名前参照用
int index1; // 頂点インデックス1
int index2; // 頂点インデックス2
int index3; // 頂点インデックス3
};

struct Bone
{
std::vector<Vertex> vertices; // 頂点情報
std::vector<Line> lines; // 2頂点face情報
std::vector<Triangle> triangles; // 3頂点face情報
};

Bone bone; // bone:[名前]のオブジェクトの情報


次に、
各三角形について始点と終点とH点(なんのことだろう?)を
判別する。

辺の長い順に「H点〜始点」「始点〜終点」「始点〜H点」と設定されます。

http://homepage3.nifty.com/ghpk/e3d/rb2007.htm


とのことなのでこれは簡単。
各三角形についてindex1, index2, index3を始点、終点、H点を参照するように
調整してやる。


ここまでで材料がそろうので三角形と浮動ボーン用の線を木構造
になるように連結してやる。

struct Node
{
Node *sibling; // 弟
Node *child; // 長子
Triangle *bone;
};

これでルートから親子関係をもったスケルトンができるはず。

ToDo

実装するw