通りすがりの記憶

ただのメモかも知れない

MMDのモデルデータ(PMD)形式 物理演算 めも

2009-06-19 00:21:24 | MMD
PMD形式めも(拡張3:物理演算)
MMD test5b以降の、物理演算モデル対応部分です。
アドレス等は、初音ミク v1.3 物理演算モデルのデータです。
データ使用時は、モデルデータの使用条件等に注意して下さい

16.物理演算_剛体リスト
0x0007 2276~
DWORD rigidbody_count; // 剛体数 // 2D 00 00 00 == 45
t_rigidbody[rigidbody_count]; // 剛体データ(83Bytes/rigidbody)

・t_rigidbody
char rigidbody_name[20]; // 諸データ:名称 // 頭
WORD rigidbody_rel_bone_index; // 諸データ:関連ボーン番号 // 03 00 == 3 // 頭
BYTE rigidbody_group_index; // 諸データ:グループ // 00
WORD rigidbody_group_target; // 諸データ:グループ:対象 // 0xFFFFとの差 // 38 FE
BYTE shape_type; // 形状:タイプ(0:球、1:箱、2:カプセル) // 00 // 球
float shape_w; // 形状:半径(幅) // CD CC CC 3F // 1.6
float shape_h; // 形状:高さ // CD CC CC 3D // 0.1
float shape_d; // 形状:奥行 // CD CC CC 3D // 0.1
float pos_pos[3]; // 位置:位置(x, y, z)
float pos_rot[3]; // 位置:回転(rad(x), rad(y), rad(z))
float rigidbody_weight; // 諸データ:質量 // 00 00 80 3F // 1.0
float rigidbody_pos_dim; // 諸データ:移動減 // 00 00 00 00
float rigidbody_rot_dim; // 諸データ:回転減 // 00 00 00 00
float rigidbody_recoil; // 諸データ:反発力 // 00 00 00 00
float rigidbody_friction; // 諸データ:摩擦力 // 00 00 00 00
BYTE rigidbody_type; // 諸データ:タイプ(0:Bone追従、1:物理演算、2:物理演算(Bone位置合せ)) // 00 // Bone追従

補足1:
pos_rot[3]; // 位置:回転
記録される値は、設定ボックスの値(度)をラジアンに変換した値(若干の誤差あり)
※1 記録される値 = 設定ボックスの値 * PI / 180
※2 PI == 3.1415920
※3 有効桁数は8桁
※4 設定ボックスに表示されていない桁も計算対象とするようです。(値をペーストした場合など)
※5 記録される値は2*PI(360度)で制限されません

補足2:
rigidbody_group_target; // 諸データ:グループ:対象
・各値を(設定値-1)左シフトした後、ビットOR
・0xFFFFとの差を記録
例:
設定ボックス	記録される値
1		FE FF (0xFFFE == 0xFFFF - (1 << 0))
16 FF 7F (0x7FFF == 0xFFFF - (1 << 15))
1 2 FC FF (0xFFFC == 0xFFFF - (1 << 0) - (1 << 1))
補足3: 0x0007 227A~ // 頭 0x0007 22CD~ // 上半身右 ・・・ 補足4: float CD CC CC 3D == 0.1 CD CC 4C 3E == 0.2 CD CC CC 3E == 0.4 CD CC 4C 3F == 0.8 00 00 80 3F == 1.0 CD CC CC 3F == 1.6


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。