プログラムはグローバルに1つの行列スタックしか持っていませんが、描画する図形は複数あり、つまり複数の変換があります。
行列スタックはGLMatrixStackクラスによって作成され、その特性は、先入れ先出しであり、行列クラスのソースコードを見ることができるによると、行列スタックは、APIに対応する最大64の状態に置くことができます次の表を参照してください。
行列スタックへの入力,乗算,スタックからの出力の流れ
- 元の行列スタックで、スタックトップの行列のコピーを作り、スタックトップに押し込みます。
- 変換操作がある場合は、変換操作の行列と行列スタックの先頭の行列を乗算し、その結果でスタックの先頭の行列を上書きします。
- スタックに他の行列が追加されている場合,乗算は続行されます.
- プッシュする行列がない場合,つまりグラフが描画された後は,スタック先頭の行列をポップする必要があります.
文字フレーム
主にオブジェクトと観察者がいる位置を表現するために使用され、3つの主要なパラメータを持ちます。
- vOrigin:現在の位置、デフォルトは原点。
- vForward: 次の位置、デフォルトは-z軸方向。
- vUp: どこに向かうか、デフォルトは+y軸方向です。
class GLFrame
{
protected:
M3DVector3f vOrigin; // Where am I?
M3DVector3f vForward; // Where am I going?
M3DVector3f vUp; // Which way is up?
行列に加えて、GLFrameオブジェクトを行列スタックに直接押し込むこともできます。
- スタックの先頭にロード
void GLMatrixStack::LoadMatrix(GLFrame &frame);
- スタックの一番上の行列と乗算し、その結果でスタックの一番上の行列を上書きします。
void GLMatrixStack::MultMatrix(GLFrame &frame);
- スタックトップアウト
void GLMatrixStack::PushMatrix(GLFrame &frame);