今日も研究室でござる

 よし、今日もCg頑張るよ。全然目標とか達成できてないけど、とりあえず前に進もう。うん。

  • Projection Matrix。空間内の座標をスクリーン上の座標に変換する。遠近感とかも含めて。
  • View Matrix。これから調査。

 カメラの移動ができるようになったww今更だがw OpenGLのmotion()とmouse()というコールバック関数と、gluLookAt()と変数で関連付けてやれば簡単にできるな。次の目標は…3Dファイルを読み込んでモデルを表示させる!



 次に3Dモデルの読み込みのところで詰まる。まず、難しいのがどの形式を読み込むのが一番いいのかだ。Cgのサンプルでは何故かBlenderで3D出力したヘッダファイルを読み込んでいる。これはやめといた方がいいかもしれない。なぜなら、今後活用法がないから…もっとポピュラーな形式を読み込んだ方がいいよね。



 というわけで、手元にあった.obj形式のStanford Barneyを読み込むことに決定。やっぱりこれですよね…以下にobjファイルの読み込み方について


  1. objファイルの内容は、手元にあるものではVertex(頂点)とFace(表面?)になっている。これからNormal(各頂点の法線)とかを生成できる。
  2. ファイルの中身を覗いてみると、次の様になっている。

v x座標 y座標 z座標
f 一つ目の頂点//謎の数値 二つ目の頂点//謎の数値 三つ目の頂点//謎の数値

  1. このFaceの値から、どのVertexが三角形を構成しているのかがわかり、そこから三角形を構成する二つのベクトルを求め、二つの外積を求めることによって面の法線を求める。
  2. つぎに、面の法線ベクトルから各頂点の頂点法線を求める。頂点法線はその頂点が使われている三角形の面法線をすべて足しあわせて正規化したもの。
  3. 最終的に何をVBOに格納すればいいかというと、三角形の基準点とそこから伸びる二つのベクトル、そのセクションのあとに、各頂点における法線を格納すればよい。


次に、VBOの使い方をおさらい

  1. glBindBufferでバインド
  2. glBufferDataでデータの確保
  3. glMapBufferでマッピング
  4. データの用意
  5. glUnmapBufferでアンマップ
  6. glBindBufferでアンバインド

引数はググれ。