Pythonを使ったOBJファイルの入出力
Pythonを使ったOBJファイルの入出力に関するTipsです.
CG技術の実装と数理の実装で使ったOBJファイルの入出力のPythonコードをまとめます.このプロジェクトでは,OBJファイルデータを読み取り,メッシュに変更を加えて別のOBJファイルデータとして出力するということをやっていました.出力ファイルは,MeshLab等のソフトウェアで確認することができます.
OBJモデルデータの読み込み
以下,Pythonを使ってOBJモデルを読み込むサンプルコードです.
|
|
取得できるデータ
- 頂点座標データ: vertices (numVertices x 3)
- テクスチャ座標データ:uv (numUVs x 3)
- 法線データ: normals (numNormals x 3)
- 面を構成する頂点のID: faceVertIDs (numFaces x 3 or 4)
- 面頂点と対応したテクスチャ座標ID: uvIDs (numFaces x 3 or 4)
- 面を構成する法線のID: normalIDs (numFaces x 3 or 4)
- 頂点カラーデータ: vertexColors (numVertices x 3)
OBJモデルデータの書き込み
以下,Pythonを使ってOBJモデルを出力するサンプルコードです.
|
|
出力できるデータ
読み込みで取得できるデータと揃えてあります.
- 頂点座標データ: vertices (numVertices x 3)
- テクスチャ座標データ:uv (numUVs x 3)
- 法線データ: normals (numNormals x 3)
- 面を構成する頂点のID: faceVertIDs (numFaces x 3 or 4)
- 面頂点と対応したテクスチャ座標ID: uvIDs (numFaces x 3 or 4)
- 面を構成する法線のID: normalIDs (numFaces x 3 or 4)
- 頂点カラーデータ: vertexColors (numVertices x 3)
OBJモデルデータの変更
実際に処理を行う時は,数値計算ライブラリnumpyを利用し,頂点座標データをnumpy.array型に変更して各種処理を行っています.例えば,以下の例では,頂点座標にノイズを加えて保存しています.
|
|
先ほどのsaveOBJ関数は,np.arrayのサイズが対応していれば,特に変換しなくてもそのまま使えます.