2007年03月28日 16時44分15秒

スキンメッシュ用OBBの作成にて2

テーマ:ブログ

何とか解決しました。

ConvertToBlendedMeshメソッドを呼んだ後に、Remapメソッドを呼ぶ必要があったようです。


LPD3DXBUFFER bf;

if(FAILED(hr=pMeshContainer->pSkinInfo->ConvertToBlendedMesh(
pMesh, // 入力メッシュ
NULL,
pMeshContainer->pAdjacency, // 入力メッシュの隣接性情報
NULL, NULL, &bf,
&pMeshContainer->weight, // ボーンの重み
&pMeshContainer->cntBone, // ボーンの組み合わせテーブルに含まれるボーンの数へのポインタ
&pMeshContainer->pBoneBuffer, // ボーンの組み合わせテーブルへのポインタ
&pMeshContainer->MeshData.pMesh))) // 新しいメッシュへのポインタ
{
return hr;
}
DWORD *d=(DWORD *)bf->GetBufferPointer();
pMeshContainer->pSkinInfo->Remap(pMeshContainer->MeshData.pMesh->GetNumVertices(),d);
bf->Release();


こんな感じにして、OBBを作成してみると上手く行きました。

Remapのヘルプを見ると

「ターゲットの頂点バッファが外部的に順番変更された場合は、このメソッドを呼び出す必要があります。」

とあります。

ConvertToBlendedMeshメソッドはスキンインフォのメソッドなのに外部とは・・・。勝手にやってくれても良いと思いますけどね。

でもRemapメソッド使わなくても描写に何の影響もなかったのは謎です。

「Remap SkinInfo」でグーグルで検索しても日本語サイトでないですし、良く分からないメソッドです。


で。

やっとスキンメッシュOBBが完成しました。

DirectXサンプルの彼を使ってもちゃんとOBBできてます。(画像参照)

深さ3なのでちょっと荒いですけれども。

一応複数のメッシュコンテナが有る場合でもちゃんとOBB作れるようにしてあります。

これで大概のモデリングデータに対してはOBBが生成できるはずですが、余り自信なし(笑)

基本はサンプルの理論を参考にかなり無茶な方法で生成してるんで、生成に時間が掛かります。

やはりあらかじめ作成しておいて外部に保存しておき、公開するときはファイルから読み込むのがよさそうですね。
スキンOBB

SkinMeshOBBという独立のクラスにして、渡すデータは何の拡張もしていないLPD3DXFRAMEだけなんで、組み込みやすく作ったつもりです。
スキンメッシュ用OBBのサンプルのサイト少ないので、公開したいところですが相変わらず付属テキスト作るの面倒なのでどうするか決めていません。まあ、

http://www.nomuraz.com/denpa/

こちらのサイトのOBBTreeのサンプルをコピペしまくって作っているので流石に公開はマズイかも。


あとはHLSLでスキンメッシュできれば趣味の範囲としてはもう十分かな?

AD
いいね!した人  |  コメント(0)  |  リブログ(0)

amayumiさんの読者になろう

ブログの更新情報が受け取れて、アクセスが簡単になります

コメント

[コメントをする]

コメント投稿

AD

Ameba人気のブログ

Amebaトピックス

      ランキング

      • 総合
      • 新登場
      • 急上昇
      • トレンド

      ブログをはじめる

      たくさんの芸能人・有名人が
      書いているAmebaブログを
      無料で簡単にはじめることができます。

      公式トップブロガーへ応募

      多くの方にご紹介したいブログを
      執筆する方を「公式トップブロガー」
      として認定しております。

      芸能人・有名人ブログを開設

      Amebaブログでは、芸能人・有名人ブログを
      ご希望される著名人の方/事務所様を
      随時募集しております。