以下の内容はhttps://redhologerbera.hatenablog.com/entry/2025/03/07/171458より取得しました。


obj形式のファイルフォーマットを理解する③ OBJ形式のデータを自作する

本日は3Dモデリング枠です。

先日まででOBJ形式のデータフォーマットの内部を読み解いていきました。

結論としてOBJ形式はバイナリではなくテキスト形式であり。人間の目でも十分理解できる形式となっていました。

今回はまとめとしてBlenderやMayaを使用せずにOBJモデルを作成していきます。

〇OBJの形式

OBJ形式は前述の通りバイナリではなくテキストデータでした。 その形式もv 0 0 0 のようにデータ形式とデータ内容が羅列されています。

〇OBJファイルを自作する

まずは1ポリゴンを作成していきます。

1ポリゴンのため頂点数は3つ、面は1つとなります。

データフォーマットは以下のようになります。

v
v
v
vn
vn
vn
vt
vt
vt
f  

ここで頂点は原点(0,0,0)と(1,1,0)、(0,1,0)とします。またUVはこの段階では仮データを入れていきます。

v 0 0 0
v 1 1 0
v 0 1 0
vn  
vn  
vn  
vt 0 1 
vt 0 1 
vt 0 1
f  

またこの時点で面に関しては以下のように定義できます。

f  1/1/1   2/2/2/   3/3/3

最後に法線に相当するvnに関してです。

ここで注意しなければならない点が座標軸です。

〇OBJの座標系

3DCGを扱う際は座標系が重要です。

具体的には3DCGを扱う際は正面から見て左右への軸をXとすることに関してはどのフォーマット、ソフトウェアでも共通していますが、 鉛直軸に関してのフォーマットは差異があります。

具体的にはUnity、MayaなどはY軸が鉛直軸を表しますが、Blender、UnrealEngineなどはZ軸が鉛直軸を表しています。

この座標系を正しく扱わない場合は90度回転した状態のモデルが扱われることになります。

 objの場合は右手系座標と呼ばれ鉛直軸が上向きをしていることが特徴です。

今回はすべてが上向きを向いているポリゴンを作りたいためZ軸に対してベクトルが向いているようにします。

頂点の法線ベクトルは正規化されている必要がありますが(長さが1である必要がある)、今回の場合は0 0 1で問題がありません。

 これらの情報を使用してデータを埋めると次のようになります。

v 0 0 0
v 1 1 0
v 0 1 0
vn 0 0 1
vn 0 0 1 
vn 0 0 1
vt 0 1 
vt 0 1 
vt 0 1
f  1/1/1 2/2/2 3/3/3

これをテキストファイルに記載して拡張子を.objに書き換えます。

完成したファイルを開くことで次のように1ポリゴンのモデルが完成しました。

本日は以上です。




以上の内容はhttps://redhologerbera.hatenablog.com/entry/2025/03/07/171458より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14