質問: ### 実現したいこと 画像出力についての質問です。 下の図のように、ある1点とそこを中心とする円があり、その間に描画対象があります。カメラはこの円上にあり、常に点の方向を向いています。カメラが任意の角度だけ、スキャナのように円上を動いて描画したときの画像を出力したいと考えています。 OpenGLを使って実装したいと思っていますが、具体的な方法が分かりません。どのようにすれば良いのでしょうか。また、他に使用するライブラリなどがありましたら、併せて教えていただければ幸いです。 ![画像出力のイメージ](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/9b7480261634d5aa8b8b5648b939402a.jpeg) ### 補足情報 開発環境:Visual Visual Studio Community 2015 言語:C++ OpenGL ver. 4.3.0 使用
回答: 長らくOpenGLを触っていないので、詳しい手順を書くことは出来ませんが、特定の点を中心に回転するカメラ、ということでしたら、以下の手順でビュー行列を計算するとできるのではないでしょうか。 1. カメラの基準点Aへ移動する平行移動行列T1を求めます。 2. 回転角から回転行列Rを求めます。 3. カメラの距離の移動分の平行移動行列T2を求めます。 4. 行列T1、R、T2を掛けあわせ、行列Vとします。 5. 行列Vの逆行列IVを求めます。これがビュー行列となる...と思います。 ### 追記 もしかして、一定角から一定角まで動いた画像を、魚眼レンズで覗いたような1枚のパノラマとして描画したい、ということでしょうか?だとすれば開始角度をa、終了角度をbとしたとき、 1. glClearでまっさらにする 2. glViewportで画面の左端だけを描画するようにする 3. aの角度で描画する 4. glViewportで少しだけ右に描画範囲を動かす 5. aの角度に少し角度を足して描画する 6. この手順をbの角度まで繰り返す こんなかんじになる...かもしれません。ちょっと私もやったことがないのでこれで動くか自信はないですが...