FreeStyleWiki

PMDの読み込みとか

[プログラミング,OpenGL]

MMDのモデルデータ(PMD)形式

  PMD形式の詳細

  • PMDファイルはオープンな仕様ではなくバイナリフォーマットからの解析なので変数名は任意のものです
  • OpenGL ESで実際にMMDモデルを表示したときの資料は LWJGL
型情報早見表
C/C++の型 Win32 API での別名
unsigned char BYTE
unsigned short WORD
unsigned long DWORD

ヘッダ

変数(型) 役割
magic(char[3]) 固定値
version(float) 固定値
model_name(char[20]) モデル名称
comment(char[256]) コメント
  • Rubyによるデシリアライズ例

+ ソースコード

  • Clojureによるデシリアライズ例

+ ソースコード

頂点リスト

変数(型) 役割
vert_count(DWORD) 頂点数
vertex(t_vertex[]) 頂点データ
t_vertex
頂点データ
変数(型) 役割
pos(float[3]) 座標:x, y, z
normal_vec(float[3]) 法線ベクトル:nx, ny, nz
uv(float[2]) UV座標:u, v
bone_num(WORD[2]) ボーン番号1,2
bone_weight(BYTE) ボーン1に与える影響度
edge_flag(BYTE) 輪郭有効:0, 輪郭無効:1
  • Rubyによるデシリアライズ例

+ ソースコード

  • Clojureによるデシリアライズ例

+ ソースコード

面頂点リスト

変数(型) 役割
face_vert_count(DWORD) 頂点数 not 面数
face_vert_index(WORD[]) 頂点番号(3個/面)
  • Clojureによるデシリアライズ例

+ ソースコード

材質リスト

変数(型) 役割
material_count(DWORD) 材質数
material(t_material[]) 材質データ
t_material
変数(型) 役割
diffuse_color(float[3]) 減衰色
alpha(float) 減衰色の不透明度
specularity(float) 光沢度
specular_color(float[3]) 光沢色
mirror_color(float[3]) 環境色
toon_index(BYTE) toon番号
edge_flag(BYTE) 輪郭フラグ
face_vert_count(DWORD) この材質で使う面頂点リストのデータ数
texture_file_name(char[20]) テクスチャファイル名
  • テクスチャファイルについて
    • モデルと同じフォルダに置かれている想定みたい。モデル内部に持っているわけではないんだな…
    • 「(テクスチャファイル名)*(スフィアファイル名)」の形でスフィアマップが入ってくる仕様
  • toon番号について
    • 設定されている場合、MikuMikuDanceのDataディレクトリ以下にある {toon番号}.bmpファイルをテクスチャ(?)に設定しないといけない
    • 0.bmp:0xFF, 1(01).bmp:0x00 ・・・ 10.bmp:0x09
  • Clojureによるデシリアライズ例

+ ソースコード

ボーンリスト

  • Clojureによるデシリアライズ例

+ ソースコード

IKリスト

  • Clojureによるデシリアライズ例

+ ソースコード

表情リスト

  • Clojureによるデシリアライズ例

+ ソースコード

表情枠用表示リスト

  • Clojureによるデシリアライズ例

+ ソースコード

ボーン枠用枠名リスト

  • Clojureによるデシリアライズ例

+ ソースコード

ボーン枠用表示リスト

  • Clojureによるデシリアライズ例

+ ソースコード

拡張部分

  • Clojureによるデシリアライズ例

+ ソースコード

+ ソースコード

+ ソースコード

+ ソースコード

+ ソースコード

+ ソースコード

+ ソースコード