あなたがすでに遭遇したgluLookAtはあなたの解決策です。最初の3つの引数はカメラの位置(x、y、z)、次の3つはカメラの中心(カメラが見ているポイント)、最後の3つは上向きのベクトル(通常は(0,1,0))であり、カメラのyz平面。*
非常に簡単です。glLoadIdentity();を呼び出し、gluLookAt(...)を呼び出してから、通常どおりにシーンを描画します。個人的には、私は常にCPUですべての計算を自分で行います。ポイントを周回することは非常に一般的な作業であることがわかりました。私のテンプレートC/C ++コードは球面座標を使用しており、次のようになります。
double camera_center[3] = {0.0,0.0,0.0};
double camera_radius = 4.0;
double camera_rot[2] = {0.0,0.0};
double camera_pos[3] = {
camera_center[0] + camera_radius*cos(radians(camera_rot[0]))*cos(radians(camera_rot[1])),
camera_center[1] + camera_radius* sin(radians(camera_rot[1])),
camera_center[2] + camera_radius*sin(radians(camera_rot[0]))*cos(radians(camera_rot[1]))
};
gluLookAt(
camera_pos[0], camera_pos[1], camera_pos[2],
camera_center[0],camera_center[1],camera_center[2],
0,1,0
);
明らかに、カメラの「ズーム」を変更するcamera_radius、軸を中心としたカメラの回転を変更するcamera_rot、またはカメラが周回するポイントを変更するcamera_centerを調整できます。
*他のトリッキーな点は、それが何を意味するのかを正確に学ぶことだけです。明確にするために、インターネットが不足しているため:
- 位置は、カメラの(x、y、z)位置です。かなり簡単です。
- 中心は、カメラが焦点を合わせている(x、y、z)ポイントです。基本的に、位置から中心までの架空の光線に沿って見ています。
- これで、カメラはこのベクトルの周りの任意の方向を向いている可能性があります(たとえば、逆さまになっている可能性がありますが、同じ方向を向いている可能性があります)。上向きのベクトルはベクトルであり、位置ではありません。それは、位置から中心までのその想像上のベクトルとともに、平面を形成します。これはカメラのyz平面です。