/*THK Analytics用解析タグ*/

GLUTを使わないOpeGL超入門_06【視点移動(球面上をなぞる)】

前回作成した図形の回転/移動をおこないました。
図形そのものを回転させています、手で持ったサイコロを回転させているイメージになります。

今回は視点そのものを移動させて図形を上から眺めるサンプルになります。
机の上にサイコロを置いて自分が移動するイメージになります。
メリットは垂直方向の軸が動かないことです。
前回のサンプルでは垂直軸も動いていました。
建築物や人物を確認する際には垂直軸はそのままが良いですよね。

OpneGLによる視点移動

gluLookAt(GL_double x, GL_double y, GL_double z, GL_double px, GL_double py, GL_double pz, GL_double ux, GL_double uy, GL_double uz);

視点移動にはgluLookAt関数を利用します。
最初のx,y,zはカメラの座標、次のpx,py,pzは注視点の座標、最後のux,uy,uzはカメラ本体の向きになります。
カメラ本体の向きとは上下逆さまなどの事です、一般的には正立設置で良いでしょう。

視点移動について

視点移動はgluLookAt関数で簡単にできるのですが、与えるパラメータはどうでしょうか?
表示対象の上に半球状のドームをイメージし、その上をカメラが移動することでなめらかなカメラ移動を実現出来ます。

ドーム座標の計算

ドーム座標は以下の式で求める事が出来ます。
x座標 = 半径*cos(垂直角)*sin(水平角)
y座標 = 半径*sin(垂直角)
z座標 = 半径*cos(垂直角)*cos(水平角)

垂直角は0~90°までです。

サンプルコードの説明

カメラの位置を決めるためのパラメータ、水平角、垂直角、カメラまでの距離はそれぞれrot_h,rot_v,cam_distです。
これらの変数は矢印キーおよび、マウスホールの回転により変化させています。
ドーム上の座標を関数get_doom_xyzで求めた後、opengl_viewで表示を行っています。
opengl_viewでは、view_cube関数の直前でgluLookAtを行う事で視点を設定しています。

サンプルコード全文

視点移動を行った画面です。
前回とことなり垂直軸は動いていません。


いかがでしたか?
visual studioでOpenGLのインストールから視点移動までを解説しました。
OpenGLについてはこの記事で一旦終了とします。
お疲れ様でした。

 

 

OpenGL関連記事一覧

GLUTを使わないOpeGL超入門_01【Visual Studio設定】
GLUTを使わないOpeGL超入門_02【立方体の表示】
GLUTを使わないOpeGL超入門_03【立方体の塗りつぶし】
GLUTを使わないOpeGL超入門_04【ビューポート】
GLUTを使わないOpeGL超入門_05【移動・回転】
GLUTを使わないOpeGL超入門_06【視点移動(球面上をなぞる)】

 

 Visual studio関連書籍