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