課題 6: モデリング (1) OBJView の動作確認 ( レポートには含めなくてよい ) 次ページ以降の 課題用メモ を参考にして OBJ ファイルを 3D 表示する OBJView を実行し 画面に立体が表示されることを確認するとともに 以下の機能を確認しなさい 左ドラッグによる立体の回転 右ドラッグによる拡大/ 縮小 [v] キーによる頂点の表示 非表示 サンプルに含まれる bunny_3k.obj を OBJView で表示したところ (2) 立方体モデルデータの作成 1 辺の長さが 100 である立方体を 12 個の三角形 (1 つの正方形は 2 つの三角形で表されるので 6 面 2=12 三角形 ) の集合で表現する obj 形式のファイルを テキストエディタ (emacs サクラエディタ メモ帳など) で作成しなさい 作成した obj ファイルを 拡張子を.obj として保存し OBJView で下図のように正しく表示されることを確認しなさい
(3) パラメトリック曲面の作成実験 ( レポートには含めなくてよい ) 一定間隔に頂点を配置するサンプルプログラム kadai06.cpp をコンパイル 実行して parametric_surface.obj ファイルが生成されることを確認し それを OBJView で表示しなさい ( 実行する前にソースコードの中身を読んで理解すること ) うまくいくと下図のように点が並んでいる様子が表示される コンパイル時の注意点 文字コードによっては改行コードが適切に出力されない場合がある 必要に応じて改行 用のエスケープ記号 をバックスラッシュ記号に置き換える Visual Studio から実行した場合の OBJ ファイルの出力先初期設定ではプロジェクトフォルダ (.vcproj ファイルのあるフォルダ ) が ファイルの出力先になる 出力された OBJ ファイルが見当たらない場合は まずプロジェクトフォルダを探すこと 見当たらなければ コンパイルしてできた実行ファイル (.exe) を直接ダブルクリックで実行すれば その場所に OBJ ファイルが生成される (4) 三角形の集合によるパラメトリック曲面の表現上記の実行結果では 点しか表示されないので 点を結んで三角形を出力するように kadai06.cpp を変更し OBJView で表示確認しなさい うまくいくと下図のように平面が表示される
(5) 曲面モデルの作成 次式で表される曲面モデルを出力するように kadai06.cpp を変更しなさい ( うまく出力できたら 数値を変更して オリジナリティを出してみよう ) メモ : 算術計算についてルート,sin,cos, exp の計算には それぞれ sqrt 関数 sin 関数 cos 関数, exp 関数が使用できる (a) 波紋 xx = uu yy = vv zz = 1 (0 uu 1, 0 vv 1) 10 sin (8 (uu 1/2)2 + (vv 1/2) 2 π) (b) ガウス関数 xx = uu yy = vv zz = 1 2 exp (uu 1/2)2 + (vv 1/2) 2 (0 uu 1, 0 vv 1) 0.1 (c) 球 (u, v の値の範囲に注意 ) xx = cos(uu) cos(vv) yy = sin(uu) cos(vv) (0 uu 2ππ, ππ 2 vv ππ 2 ) zz = sin(vv)
発展課題 (1) トーラスのモデルの出力下図のようなトーラスモデルが出力されるようにしなさい どのような式で表現されるかは自分で考えるか または調べなさい (2) 自由形状前回の課題で作成したベジェ曲線作図プログラムと組み合わせることで マウスカーソルで描いた曲線を回転させてできる立体を作成するプログラムを作成しなさい また それ以外に どのような方法でも構わないので 自由な形状を OBJ 形式で出力してみなさい 一般的な回転体の例
[ 課題用メモ ] 課題で使用するファイルは 06_files.zip にあるので解凍 ( 展開 ) すること OBJView は OBJ 形式のファイルを読み込んで画面に表示する ( プログラムコードが含まれるので 今後の参考に見てみると良い ) Windows 版の obj_view.exe は 次のように起動する [ マウスドラッグで使用する場合 ] 表示する OBJ ファイルをマウスでドラッグして obj_view.exe にドロップする [ コマンドプロンプトを使用する場合 ] コマンドプロンプトを起動する obj_view.exe のあるフォルダまで移動する例 : cd c: xxx yyy obj_view 表示する OBJ ファイルを指定して起動する例 : obj_view.exe sample.obj Coins の Mac 版は コンパイル済みのものが obj_view という名称になっているので 第一引数にファイル名を指定して起動する 例 :./obj_view sample.obj 操作方法は次の通り マウスの左ドラッグで回転 マウスの右ドラッグでズームイン ズームアウト キーボードの[v] ボタンで 頂点の [ 表示 / 非表示 ] の切り替え (Mac 版は非対応 ) OBJ ファイルフォーマットについて OBJ フォーマットは Wavefront 社の策定したファイルフォーマット シンプルな構造で扱いが容易なため 広く使用されている OBJ ファイルは拡張子が obj のテキストファイルで ファイル内部に 1 行に 1 つ 頂点と面の情報を次のように記述する ( ここで紹介するのは必要最低限の項目 ) 頂点情報 書式 v %f %f %f 面情報 書式 f %d %d %d 内容頂点情報開始のためのキーワード v の後に x, y, z 座標値を記す内容面を構成する頂点 ID の列挙 頂点の ID は 1 から開始する
obj ファイルの記述例 v -1.0 0.0 0.0 v 0.0 1.0 0.0 v 0.0 0.0-1.0 ( 中略 ) f 2 5 3 f 2 1 5 f 2 3 1 ( 後略 ) 頂点座標情報の記述 面を構成する頂点番号の記述 パラメトリック曲面の三角形メッシュ表現について CG では 滑らかな曲面を小さな三角形の集合で表現することが多い u,v という 2 つのパラメータの値を変化させて得られる曲面は 次のように配置された頂点列と それらを結ぶ三角形によって表現される サンプルプログラムでは パラメトリック空間の分割数を それぞれ NUM_U, NUM_V で表し U 方向を添え字の i, V 方向を添え字の j を使って x[i][j], y[i][j], z[i][j] によって j 行 i 列目の頂点の座標値を格納している ( 上の図の例では NUM_U=8, NUM_V=6 であるが サンプルプログラムではどちらも 50 に設定してある ) 頂点の数は (NUM_V + 1) * (NUM_U + 1) 個であり 上の図には 00~62 の頂点番号を示している 曲面を三角形の集合で表すために 下図のように 四角形領域を 2 つの三角形に分割し {lb, rb,rt} および {lb,rt,lt} に位置する頂点の番号を指定する ( 上図の頂点番号は 0 から始まっているが OBJ 形式では 1 から始まることに注意 )
参考 フリーで使用できる 3D モデリングソフトウェアに 以下のようなものがある いずれも OBJ フ ァイルの読み込みや作成が行える メタセコイア http://metaseq.net/jp/ MeshLAB http://meshlab.sourceforge.net/ Blender http://blender.jp/