初心者ながら自分で.pmd(.pmx)の読み込み・描画のライブラリを作りたくて
MMDのモデルデータ(PMD)形式 めも2
MMDのモデルデータ(PMD)形式 めも3
PMDデータをExcel Sheetへ読出す(音量注意)
このページを主に参考にしたんですが、
今現在面情報の取り扱いに詰まっています。
.pmdの面頂点リスト DWORD face_vert_count;
は面の数が入るとばかり思ってたのですが、
「面を構成する頂点の数が入る」という認識で大丈夫でしょうか?
DXlibでは DxModelLoader3.cpp で face_vert_count/3 した値の数だけ WORD face_vert_index をnewしていました。
つまり面の数だけ用意したという事になります。
そうすると face_vert_index[0] に1面目のインデックスが入って face_vert_index[1] に2面目のインデックスが入ってるのでしょうか?
しかし1つのWORDに3つもの頂点インデックスを入れれるものなのでしょうか・・・
取り出し方がさっぱりわかりません・・・
どういう形でface_vert_indexに値が入っているのか教えてください。
.pmd形式の面頂点リスト(face_vert_count)について
Re: .pmd形式の面頂点リスト(face_vert_count)について
面を構成する頂点の数ですね。しゃも さんが書きました:.pmdの面頂点リスト DWORD face_vert_count;
は面の数が入るとばかり思ってたのですが、
「面を構成する頂点の数が入る」という認識で大丈夫でしょうか?
それは、違います。しゃも さんが書きました: DXlibでは DxModelLoader3.cpp で face_vert_count/3 した値の数だけ WORD face_vert_index をnewしていました。
つまり面の数だけ用意したという事になります。
DxModelLoader3.cpp の327行目でMV1RSetupMeshFaceBuffer の第三引数に面の数を渡していますが、
第四引数に面ごとの頂点の数 = 3 を渡しています。
// 面情報を格納するメモリ領域の確保
if( MV1RSetupMeshFaceBuffer( &RModel, Mesh, PmdFaceNum, 3 ) < 0 )
{
DXST_ERRORLOGFMT_ADD( ( _T( "PMD Load Error : 面情報を保存するメモリ領域の確保に失敗しました\n" ) ) ) ;
goto ENDLABEL ;
}
だから3つのインデックスをWORDに詰め込んでいるということはないです。