.pmd形式の面頂点リスト(face_vert_count)について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
しゃも

.pmd形式の面頂点リスト(face_vert_count)について

#1

投稿記事 by しゃも » 12年前

初心者ながら自分で.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に値が入っているのか教えてください。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: .pmd形式の面頂点リスト(face_vert_count)について

#2

投稿記事 by h2so5 » 12年前

しゃも さんが書きました:.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 ;
		}
MV1RSetupMeshFaceBuffer の内部実装は DxModelRead.cpp を見てもらえば分かりますが、面の数×3の頂点分の領域が確保されています。
だから3つのインデックスをWORDに詰め込んでいるということはないです。

閉鎖

“C言語何でも質問掲示板” へ戻る