OpenGLサンプル3 – メッシュ読み込み

OpenGL

obj ファイルからメッシュデータを読み込むように修正します。

プログラムはこちらで公開しています。
https://github.com/matsushima-terunao/opengl_sample

obj ファイルのフォーマット

# 頂点座標
# v x座標 y座標 z座標
v 1.000000 -1.000000 -1.000000

# 頂点のテクスチャー座標
# vt x座標 y座標
vt 0.748573 0.750412

# 頂点の法線ベクトル
# vn x座標 y座標 z座標
vn 0.000000 0.000000 -1.000000


# ポリゴンの頂点インデックス
# 三角形のみサポート
# f 頂点1/テクスチャー1/法線1 頂点2/テクスチャー2/法線2 ...
f 5/1/1 1/2/1 4/3/1

# 以降未サポート

# 外部 mtl ファイル
mtllib cube.mtl

# テクスチャーファイル
usemtl Material_ray.png

# スムーズシェーディング
s off

obj ファイル読み込み関数

mesh.hpp, mesh.cpp
obj ファイルのパスを渡すと、Vertex 構造体の vector に読み込んだ頂点情報を返します。
面1頂点1 面1頂点2 面1頂点3 面2頂点1 面2頂点2 面1頂点3 …
ポリゴンは三角形限定で、rgb には法線ベクトルから計算したダミー値が入ります。

/** 頂点情報 */
struct Vertex {
    float x, y, z;
    float r, g, b;
    float u, v;
    float nx, ny, nz;
};

/**
 * メッシュ読み込み。
 */
void read_mesh(const char* path, std::vector<Vertex>& vertex_list);

sample03.cpp

    static std::vector<Vertex> vertex_list;
    read_mesh("assets/cube.obj", vertex_list);

cube.obj

# Blender3D v249 OBJ File: untitled.blend
# www.blender3d.org
mtllib cube.mtl
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v 1.000000 1.000000 -1.000000
v 0.999999 1.000000 1.000001
v -1.000000 1.000000 1.000000
v -1.000000 1.000000 -1.000000
vt 0.748573 0.750412
vt 0.749279 0.501284
vt 0.999110 0.501077
vt 0.999455 0.750380
vt 0.250471 0.500702
vt 0.249682 0.749677
vt 0.001085 0.750380
vt 0.001517 0.499994
vt 0.499422 0.500239
vt 0.500149 0.750166
vt 0.748355 0.998230
vt 0.500193 0.998728
vt 0.498993 0.250415
vt 0.748953 0.250920
vn 0.000000 0.000000 -1.000000
vn -1.000000 -0.000000 -0.000000
vn -0.000000 -0.000000 1.000000
vn -0.000001 0.000000 1.000000
vn 1.000000 -0.000000 0.000000
vn 1.000000 0.000000 0.000001
vn 0.000000 1.000000 -0.000000
vn -0.000000 -1.000000 0.000000
usemtl Material_ray.png
s off
f 5/1/1 1/2/1 4/3/1
f 5/1/1 4/3/1 8/4/1
f 3/5/2 7/6/2 8/7/2
f 3/5/2 8/7/2 4/8/2
f 2/9/3 6/10/3 3/5/3
f 6/10/4 7/6/4 3/5/4
f 1/2/5 5/1/5 2/9/5
f 5/1/6 6/10/6 2/9/6
f 5/1/7 8/11/7 6/10/7
f 8/11/7 7/12/7 6/10/7
f 1/2/8 2/9/8 3/13/8
f 1/2/8 3/13/8 4/14/8

出力結果

プロジェクト設定

xcode では以下のように実行時のカレントディレクトリをプロジェクト配下に変更してください。

Product -> Scheme -> Edit scheme -> Options -> Working Directory -> [v] Use custom working directory: $PROJECT_DIR/opengl_sample

実行結果

コメント

タイトルとURLをコピーしました