- OBJファイル概要 -
OBJファイルとは、Wavefront社が作成した形式で、かなりメジャーなテキスト形式の3Dオブジェクトファイルです。
ほとんどの3Dを扱うツールで使える形式です。

利点は、テキストファイルなのでメモ帳で開いても中を確認できることです。
ファイルの読み込み、書き込みの際にもfprintf()などが使える、非常に扱いやすい形式です。
自分のようなファイル読み込み初心者にはもってこいですね。

通常、OBJファイルはMTL(マテリアル)ファイルというマテリアル属性を保存したファイルと一緒に使われます。
テクスチャがあればテクスチャの画像ファイルも使用されます。
OBJファイルとMTLファイルのセットで画像が描画されると考えてOKです。

ではさっそくOBJファイル形式を見ていきましょう。

[ ファイル形式の仕様 ]
# コメント

mtllib マテリアルファイル名
g グループ名

v 頂点のx成分 頂点のy成分 頂点のz成分
v 頂点のx成分 頂点のy成分 頂点のz成分
・
・
・

vt テクスチャ座標x成分 テクスチャ座標y成分
vt テクスチャ座標x成分 テクスチャ座標y成分
・
・
・

vn 頂点に対する法線のx成分 頂点に対する法線のy成分 頂点に対する法線のz成分
vn 頂点に対する法線のx成分 頂点に対する法線のy成分 頂点に対する法線のz成分
・
・
・

g グループ名
usemtl 使用するマテリアル名

f 頂点座標の番号/テクスチャ座標の番号/頂点の法線ベクトルの番号…(1つの面を構成する頂点の数だけ繰り返す)
f 頂点座標の番号/テクスチャ座標の番号/頂点の法線ベクトルの番号…(1つの面を構成する頂点の数だけ繰り返す)
・
・
・

[ 解説 ]
データや文字の区切りはすべて「1文字分の半角スペース」です。

「#」
コメント行です。コメントを入れたい場合「#[半角スペース]コメント文字列」という形式で記載します。

「mtllib」
OBJファイルのマテリアル属性が保存されているMTLファイル名です。
MTLファイルについては次項「MTLファイル概要」参照してください。

「g」
OBJファイルのグループ名です。g〜gまでを1つのグループとして扱うみたいです。
詳細は不明ですが、おそらく1つのOBJファイル内に2つ以上のオブジェクトを書き込んだ時に
どのオブジェクトのデータであるかを分ける為の名前だと思っています。
1体のキャラクターを保存したOBJファイルであれば、プログラムからOBJを読む際は無視してもOKです。

「usemtl」
MTLファイル内で付けられた、マテリアル情報に付けられた名前を指定します。
MTLファイル内の「newmtl 名前」の名前の部分が書かれます。
次項のMTLファイルの説明で詳しく紹介します。

「v」
頂点のデータです。3つのデータ(3次元)です。
「v x座標 y座標 z座標」と表現されます。

「vt」
テクスチャ座標データです。テクスチャ座標は基本的に2次元データです。
(OBJファイルで3次元テクスチャを扱えるかどうかは試していない為不明)
この座標はテクスチャ座標系で「vt x座標 y座標」と表現されます。

「vn」
1つの頂点に対する法線ベクトルデータです。
「vn x座標 y座標 z座標」の形式で表現されます。

「f」
1つの多角形の形状を表しています。
「頂点座標番号/テクスチャ座標番号/頂点の法線ベクトル番号」で1頂点を表し、面の頂点数の分だけ半角スペースをはさんで並びます。
各番号は上から1, 2, …と振られていると考えます。以下に例を示します。

例)
v 1.0, 1.0, 1.0	←1
v 1.5, 1.5, 1.5	←2

vt 1.7 1.7 1.7	←1
vt 1.8 1.8 1.8	←2

vn 2.0 2.0 2.0	←1
vn 2.3 2.3 2.3	←2

f 1/1/1 1/2/2

上記の場合、直線が表現されていて、頂点座標が1番、テクスチャ座標が1番、頂点の法線ベクトルが1番のデータで表される点と
頂点座標が1番、テクスチャ座標が2番、頂点の法線ベクトルが2番のデータで表される点の直線ということになります。

また、テクスチャ座標と法線ベクトル座標は省略可能です。
省略した時のパターンは以下のようになります。

f 頂点座標番号/テクスチャ座標番号
f 頂点座標番号//頂点の法線ベクトル番号
f 頂点座標番号

省略された形式は上の3パターンのどれかで表現されます。


inserted by FC2 system