Re: 3Dモデル(pmd/vmd)の表示について ( No.1 ) |
- 名前:管理人 日時:2014/10/26 21:52
> 1)ファイルをメモリ上に読み込みんだ直後の初期化
PMDファイルの読み込み関係のソースは DxModelLoader3.cpp, DxModelLoader3.h
VMDファイルの読み込み関係のソースは DxModelLoaderVMD.cpp, DxModelLoaderVMD.h となります
あと、モデルファイル読み込み処理共通で
DxModelRead.cpp, DxModelRead.h や DxModel.cpp, DxModel.h 、
Direct3D9 関連では DxModelD3D9.cpp, DxModelD3D9.h 等も関わっています
> 2)モデルのモーションやアニメの処理
モデルのモーションやアニメの処理やデータ定義は DxModel.cpp, DxModel.h にあります
> 3)ポリゴンデータをDirectX9に渡す処理
モデルの描画関連の処理・データ定義は DxModel.cpp, DxModel.h, DxModelD3D9.cpp, DxModelD3D9.h,
DxGraphics.cpp, DxGraphics.h, DxGraphicsWin.cpp, DxGraphicsWin.h, DxGraphicsD3D9.cpp, DxGraphicsD3D9.h が関わっています
あまり綺麗に部品化されていないので、ここからモデル描画に関わる部分のみを抜き出すのは少し骨が折れるかもしれません
あと、モデルの描画に使用しているシェーダーコードバイナリは DxShaderCodeBin_Model_D3D9.cpp にあります
|
Re: 3Dモデル(pmd/vmd)の表示について ( No.2 ) |
- 名前:M 日時:2014/10/26 23:07
早速のご回答ありがとうございます。
参考にさせていただきます。
|
Re: 3Dモデル(pmd/vmd)の表示について ( No.3 ) |
- 名前:M 日時:2015/01/04 01:33
pmxを読み込んでDrawIndexedPrimitiveでモデルを示することができました。
使用しているpmxファイルのデータは下記のとおりです。
頂点データ 座標/法線/UV値/ボーンIndex/ボーンWeight
面データ 頂点Index
テクスチャ 通常テクスチャパス
マテリアル カラー/通常テクスチャIndex/頂点数
ボーン ボーン名/親ボーンIndex/ポジション/ローカルX軸/ローカルZ軸
このモデルに、vmdでモーションをつけたところ、何故か右腕の回転が反転しているようになってしまいます。
モーションをつけないAポーズでは正しく表示されております。
モーションをつける際に、ボーンの名前やフラグを見て、何か特別な処理が必要ありますでしょうか?
よろしくお願いいたします。
|
Re: 3Dモデル(pmd/vmd)の表示について ( No.4 ) |
- 名前:管理人 日時:2015/01/06 01:47
pmx + vmd や pmd + vmd でのモーションは IK が使用されていますので、
DxModel.cpp に記述されている FK によるモーション再生処理だけでは正常な結果を得ることができません
DxModel.cpp では今のところ IK を使ったモーションの再生には対応していないので、
pmx や pmd の読み込み処理を行う DxModelLoader3.cpp や DxModelLoader4.cpp の中で
IK の処理を施したモーションデータを構築しています
DxModelLoader3.cpp の中の _MV1LoadModelToVMD_PMD 関数が pmd 用の
DxModelLoader4.cpp の中の _MV1LoadModelToVMD_PMX 関数が pmx 用の
IK 適用後モーション構築処理となっていますので、
( かなり力技で酷いプログラムですが )よろしければご覧ください m(_ _;m
|
Re: 3Dモデル(pmd/vmd)の表示について ( No.5 ) |
- 名前:M 日時:2015/01/17 13:08
ご回答ありがとうございます。
Flag_IKに関連するボーンを調べてみましたが、足回りのボーンで腕には関係ありませんでした。
現状、足は揃ったまま動くので、ご指摘の通りIKを反映させれば、正しく動くと思います。
また、髪の毛や装飾品も動きませんが、これは物理計算をしていないためと思われます。
pmxのボーンデータ部にはFlag_IKを含む各種フラグがありますが、このうちボーンの計算に使用しているフラグを教えていただけませんでしょうか?
よろしくお願いいたします。
|
Re: 3Dモデル(pmd/vmd)の表示について ( No.6 ) |
- 名前:管理人 日時:2015/01/18 00:42
Flag_IK を含む各種フラグで、ボーンの計算に使用しているフラグは Flag_Disp と Flag_EnableControl と
Flag_AfterPhysicsTransform 以外のフラグ全部です
PMXを正しく処理されたいということでしたら、PMDEditor や PMXEditor のパッケージの中の
Libフォルダの中にある PMX仕様.txt を読まれることをお勧めします
DXライブラリではこちらに書かれていることの一部を再現しているに過ぎないので、
PMXファイルを正しく処理する場合はこちらに書かれている仕様の通りにデータを扱う必要があります
|
Re: 3Dモデル(pmd/vmd)の表示について ( No.7 ) |
- 名前:M 日時:2015/01/18 10:31
ご回答ありがとうございます。
モデルをとりあえず表示するのを優先して、フラグ類の実装はしておりませんでした。
教えていただいた情報をもとに実装をしていこうと思います。
実装でまたご質問させていただくかもしれません。
よろしくお願いいたします。
|
Re: 3Dモデル(pmd/vmd)の表示について ( No.8 ) |
- 名前:M 日時:2015/02/25 09:32
右腕が反転していた理由はボーンの初期行列をローカルZ/X軸の情報から作成していたためでした。
四元数(0,0,0,1)から生成した回転行列を基に行列を生成したら、正しく表示されました。
これから、物理演算でbullet、IKでCCDの適用を検討しています。
実装でまたご質問させていただくかもしれません。
よろしくお願いいたします。
|