blog

キャラクタ・フレームを持つOpenGL行列スタック

このプログラムでは、行列スタックはグローバルに1つしかありませんが、描画が必要な図形が複数ある、つまり複数の変換があります。それぞれの図形には異なる変換行列が必要で、2つの図形を互いに影響を与えずに動...

Jan 13, 2021 · 2 min. read

プログラムはグローバルに1つの行列スタックしか持っていませんが、描画する図形は複数あり、つまり複数の変換があります。

行列スタックはGLMatrixStackクラスによって作成され、その特性は、先入れ先出しであり、行列クラスのソースコードを見ることができるによると、行列スタックは、APIに対応する最大64の状態に置くことができます次の表を参照してください。

M3DMatrix44f行列に加えて、また、行列のペアにGLFRameを置くことができる、実際には、それは行列よりも1つのステップです、あなたはGLFRameのgetメソッドメソッドを介して行列を取得し、スタックにそれを置く必要があります。

行列スタックへの入力,乗算,スタックからの出力の流れ

  • 元の行列スタックで、スタックトップの行列のコピーを作り、スタックトップに押し込みます。
  • 変換操作がある場合は、変換操作の行列と行列スタックの先頭の行列を乗算し、その結果でスタックの先頭の行列を上書きします。
  • スタックに他の行列が追加されている場合,乗算は続行されます.
  • プッシュする行列がない場合,つまりグラフが描画された後は,スタック先頭の行列をポップする必要があります.

文字フレーム

主にオブジェクトと観察者がいる位置を表現するために使用され、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);
Read next

バントリストコンポーネント

1 の場合、List はブラウザのスクロール イベントをリッスンして、リストの位置を計算します。スクロールするリストに css スタイルでパディングとマージンが追加されている場合は、オフセットを計算するときに追加する必要があります。

Jan 12, 2021 · 3 min read