3Dプログラミングのよりトリッキーな側面の1つは、複雑な変換を正しく行うことです。
OpenGLでは、すべてのポイントがモデル/ビューマトリックスで変換され、次にプロジェクションマトリックスで変換されます。
モデルビューマトリックスは各ポイントを取得し、それをカメラの視点からのあるべき場所に変換します。投影行列は、X座標とY座標をウィンドウに簡単にマッピングできるように、ポイントの座標を変換します。
モード/ビューマトリックスを正しく取得するには、単位行列(頂点を変更しないもの)から始めて、カメラの位置と方向に変換を適用し、次にオブジェクトの位置と方向に逆の順序で変換を適用する必要があります。
もう1つ覚えておく必要があるのは、回転は常に原点(0,0,0)を中心とする軸を中心に行われるということです。したがって、カメラに回転変換を適用する場合、カメラを回転させるか(頭を回転させるように)、原点を中心に周回するか(地球が太陽を周回するように)は、以前に平行移動変換を適用したかどうかによって異なります。
したがって、カメラの回転と周回の両方を行う場合は、次のことを行う必要があります。
- 回転を適用してカメラの向きを調整します
- 翻訳を適用して配置します
- 回転を適用して、カメラを原点の周りに周回させます
- (オプションで)平行移動を適用して、カメラを設定された方向に移動し、(0,0,0)以外のポイントの周りの軌道にカメラを移動します。
たとえば、カメラを(0,0,0)以外のポイントに向け、そのポイントを設定された距離で周回させ、同時にカメラをピッチングまたはヨーイングしたい場合は、状況がさらに複雑になる可能性があります。WebGLの例については、ここを参照してください。を探しGLViewerBase.prototype.display
ます。
レッドブック では、変換についてさらに詳しく説明しています。
また、回転を使用せずにカメラを何かに向けるために使用できるgluLookAtにも注意してください。