2

learningwebgl blog のレッスン 1を読み始めたところ、次の部分に気付きました。

var pMatrix = mat4.create();
mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);

行列(平行移動・回転・多重)の仕組みはだいたいわかったのですが、mat4.perspective(...)意味がわかりません。それは何のために使用されますか?ベクトルにこの行列を掛けると、結果はどうなりますか?

4

2 に答える 2

6

パースペクティブ マトリックスは、パースペクティブ分割の準備として座標系をスケーリングし、場合によっては変換または反転するために使用されます。透視投影演算は除算を伴うため、線形行列変換だけでは表現できません。

プログラマブル グラフィックス パイプライン (ピクセル シェーダーを参照) では、除算操作は表示されません。これは依然として固定機能部分の 1 つです。プログラマーは、操作に関係する変数を微調整することによってそれを制御します。パースペクティブ分割の場合、この制御を提供するのは投影マトリックスです。

于 2013-03-11T13:56:27.487 に答える
-1

射影行列は、世界座標を画面座標に変換するために使用されます。

3次元仮想世界の位置は、x、y、z座標のトリプレットです。何かを描画したい場合(またはOpenGLに何かを描画するように指示したい場合)、これらの座標がユーザー画面のどこにあるかを計算する必要があります。

この計算は、行列の乗算を使用して実装されます。

x、y、zで構成されるベクトル(および行列がスケーリングなどの操作を実行できるようにするために必要な4番目の値1)に行列を掛けて、x、y、z座標の新しいセット(4番目の値)を受け取ります。は破棄されます)これは、このポイントがユーザー画面のどこにあるかを表します(どのオブジェクトが他のオブジェクトの前にあるかを判別するには、z座標が必要です)。

関数mat4.perspectiveは、まさにそれを行う行列を生成する射影行列を生成します。引数は次のとおりです。

  • 度(45)の視野
  • 視野のアスペクト比(ビューポートのアスペクト比)
  • まだ描画されているビューアからの最小距離(0.1ワールドユニット)
  • まだ描画されているビューアからの最大距離(100.0ワールドユニット)
  • 生成された行列が格納されている配列(pMatrix)

ポイントにこのマトリックスを掛けると、結果はこのポイントを描画する必要のある画面座標になります。

于 2013-03-11T13:51:17.907 に答える