// // コンピュータグラフィックス特論U // 幾何形状データ(Obj形式)の読み込み&描画のサンプルプログラム // #ifndef _OBJ_H_ #define _OBJ_H_ // ベクトルデータ struct Vector { float x, y, z; }; // カラーデータ struct Color { float r, g, b; }; // 幾何形状データの例(本プログラムでは使用しない) struct SampleGeometry { int num_vertices; // 頂点数 Vector * vertices; // 頂点座標配列 [num_vertices] Vector * normals; // 法線ベクトル配列 [num_vertices] Color * colors; // カラー配列 [num_vertices] int num_triangles; // 三角面数 int * triangles; // 三角面の頂点番号配列 [num_triangles*3] }; // マテリアルデータ(Mtl形式用) struct Mtl { char * name; // マテリアル名 Color kd; // 拡散反射光(とりあえず拡散反射光を glColor3f() で使用する) char * texture_name; // テクスチャ画像のファイル名 }; // 幾何形状データ(Obj形式用) struct Obj { int num_vertices; // 頂点数 Vector * vertices; // 頂点座標配列 [num_vertices] int num_normals; Vector * normals; // 法線ベクトル配列 [num_normals] int num_tex_coords; Vector * tex_coords; // テクスチャ座標配列 [num_tex_coords] int num_triangles; // 三角面数 int * tri_v_no; // 三角面の各頂点の頂点座標番号配列 [num_triangles*3] int * tri_vn_no; // 三角面の各頂点の法線ベクトル番号配列 [num_triangles*3] int * tri_vt_no; // 三角面の各頂点のテクスチャ座標番号配列 [num_triangles*3] Mtl ** tri_material; // 三角面の素材 [num_triangles] int num_materials; // マテリアル数 Mtl ** materials; // マテリアルの配列 [num_materials] }; // Objファイルの読み込み Obj * LoadObj( const char * filename ); // Mtlファイルの読み込み void LoadMtl( const char * filename, Obj * obj ); // オブジェクトのスケーリング(スケーリング後の中心の高さを返す) float ScaleObj( Obj * obj, float max_size ); // Obj形状データの描画 void RenderObj( Obj * obj ); #endif // _OBJ_H_