« しばらく待っていれば出来る? | メイン | 頂点インデックス数 »

2005年04月18日

Teaspire 開発日誌:: 頂点情報数

    

FBX SDKを使ってツールを作り、なんとなくわかったので、少し前にやっていたXファイルの読み込みの続きをやることにした。
FBX ファイルの読み込みは内部的にFBX>Xファイル>LAMPと言った変換方法をとることを検討している。(一部データは直接LAMPへ変換する必要があるかも)
FBXからXファイルへの変換があれば、他でも使えて汎用性が高まりそうな気がするし。

久しぶりなので、ブログを読み返し、ソースコードを漁ってやっていたことを思い出す。
ボーンとボーンリンクの変換まで出来ているようなので、各頂点に対応するボーンインデックスを探すのとウェイトを設定する部分を作りつつソースを追っていたら、そこはもう作っていた。
ありゃ?
各頂点ごとのボーンインデックスとウェイトが収められたリストが出来てる。
いつの間に作ったんだ俺?
と思ったら思い出してきた。
なぜか正確な頂点数が得られないと悩んでいた記憶が・・・
ソースを見るとID3DXMesh::GetNumVertices で頂点数を得ているようだけど、なんで正確な頂点数が得られないと悩んでいたんだっけ?
中間データを吐き出したテキストを見ると、ボーンに関連付けられていない頂点があるので、それで正確な頂点数じゃないと思った・・・
あーっ、頂点数じゃなくて、頂点インデックス数を得ないといけないと思っていたんだ。
いや、違う、頂点数と頂点インデックス数は同じになる。頂点情報数を得たいと思っていたんだった。
ID3DXSkinInfo::GetBoneInfluence で得られるボーンの影響を受ける頂点の配列は、頂点インデックスの配列のハズ。
頂点情報数よりも、頂点数は常に大きくなるはずなので、問題ないといえば問題ないけど、やっぱりすっきりしない。ってことで悩んでいた。
そのことはすっかり忘れていたので、各頂点ごとのボーンインデックスとウェイトをLAMPのメッシュデータへ設定する部分を先に作った。
悩んでいたことはブログを書いていて思い出した。

頂点情報数は、ID3DXMesh::GetAttributeTableでD3DXATTRIBUTERANGE 構造体 を得て、その中のVertexCount を参照すればいいみたい。
DXヘルプでは、頂点情報数と頂点数は両方、頂点の数と書かれているが、たぶんD3DXATTRIBUTERANGE のVertexCount は頂点情報数をさしているはず。
まあ、とにかくやってみることにする。
やってみたら、勘違いしていたようだ。
詳細は、ここに書いた。

頂点数関連の言葉の定義
ここで言っている頂点情報数とは、各頂点の座標などを収めた情報の数。
頂点数は実際に存在する頂点の数。
隣接するポリゴンは頂点を共有するので、頂点数は頂点情報数よりも多くなる。
そこで、各頂点は頂点情報へのインデックスを持ち、情報の重複をなくす。
このインデックスが頂点インデックスで、当然頂点数と同じになる。
で、その数を頂点インデックス数とした。



投稿者 Takenori : 2005年04月18日 03:42




comments powered by Disqus
Total : Today : Yesterday : なかのひと