OpenGL 学習メモ その2「複数のカメラ視点」

  最終更新日: 05/10/30

はじめに



前回は、必要最低限の自由度が保証される、カメラのひな形をつくることにしました。
カメラは1つで、カメラが映した内容がウインドウにぴったりの大きさで表示されていました。

今度は、カメラを2つに増やしてみましょう。
正面と、上空からほぼ同時に モデルを撮影した場合、
ウインドウには、2つのカメラが映した内容を、それぞれ配置することができます。
カメラが映した内容を、どのようにウインドウ上に配置(レイアウト)するのか決めるのがビューポートです。
glViewport( x, y , w, h);
ウインドウの x,y ピクセルの位置に、幅 w,高さ h の内容を張り付けます。

次のviewport が設定されるまでの間に描画されたものが viewport 内に描画されます。
viewport(その1); → カメラ(GL_PROJECTION) , モデル行列(GL_MODELVIEW) →
→ viewport(その2); → カメラ(GL_PROJECTION) , モデル行列(GL_MODELVIEW) → .... 


ビューポートの特徴
  • 複数のビューポートの配置(分割, 重ね )
  • w, h の値を変更すれば縦横の比率を変えて配置することもできます。
  • ビューポートは、重ねることができます(重ねると後に設定したビューポートに書いたものが上に来ます )
  • ビューポート内で、何も描画されない部分は透過されます。
  • 同じ内容を複数のビューポートに表示するには、そのつどモデルビュー投影を行う必要があります。
  • 複数のビューポートを使えば、マップ表示や、バックミラー、レーダー表示などに応用することができます。
  • ビューポートの増減をリアルタイムに操作することもできると思う。
  • マウスカーソル専用のビューポート。

    同じモデルを何個も使用する場合は ディスプレイリストを利用すると楽になります。
    なお、このプログラムの使用については自己責任でお願いします。

    使い方

    ユーザーが視点を自由に操作できるカメラ(set_view)と、 三人称視点固定の静止カメラ(set_view2)の2つが追加されています。
    カメラとモデルの組み合わせて色々な実験が可能です。
    他のカメラの位置をセットするには、テキスト表示されている、視点操作カメラの角度の 値 を参考にして下さい。

    キーボードの操作:
  • A, S ..... ビルボード(茶色の四角形)のズーム
  • F, R ..... カメラ Z 軸 にズーム
  • →↑↓←......矢印キーでカメラ X,Y軸を中心に回転
  • ESC .........終了
    カメラ角度は 0〜360度 で 補正
  • 3Dモデルを映すカメラの初期位置は、Z軸に垂直になっています。
    テキストとビルボードは カメラの行列を共用しているので、ともにZ軸に垂直に位置しています。

  • サンプル ソース 2

  • 必要アプリケーション:Xcode , 必要なフォント:デフォルトで ヒラギノを読み込む , ファイルパスがない場合は、TrueTypeフォントを読むディテクトリは build ディレクトリが起点となる。
  • 必要ライブラリ: Allegro , GlyphKeeper, AllegroGL , (OpenGL , FreeType)
  • Xcode の リンカ設定(※各ライブラリをインストール済みであること/ -lglyph-allegrogl の名前は場合に応じて )
    -L/usr/local/lib -lagl -lglyph-allegrogl -lfreetype -lalleg-main -framework OpenGL -framework Carbon -framework Carbon -framework Cocoa

    ソース2 (UTF8で保存)

  • Tsukubado