0

最近、OpenGL でいくつかの例を完成させた結果、空間-1 >= x <= 1にいくつかの三角形を描画しました-1 >= y <= 1。正投影ビューに移動するにはどうすればよいですか? どの変換を実行する必要がありますか? 結果の変換が均一変数として頂点シェーダーに設定され、着信頂点に適用されると想定しています。

ビューのスケールとしてピクセル (つまり 1024x768) を使用するか、論理単位 (ピクセル x1000 など) を使用するのが賢明ですか?

4

1 に答える 1

3

正投影ビューに移動するにはどうすればよいですか? どの変換を実行する必要がありますか?

正投影を適用する必要があります。これまでに使用した恒等変換は、すでに正射投影であることに注意してください。

変換プロセスを投影変換とモデルビュー変換に分解することをお勧めします。それぞれが 4 × 4 の行列で記述されており、これは頂点シェーダーにユニフォームとして渡されます。

典型的な頂点シェーダーのレイアウトは次のようになります

#version 120 /* or something later */

attribute vec4 position;

uniform mat4 proj;
uniform mat4 mv;

varying vec4 vert_pos; // for later versions of GLSL replace 'varying' with 'out'

void main()
{
    // order matters, matrix multiplication is not 
    vert_pos = proj * mv * position; commutative */
}

射影行列自体は、ユーザーが提供する必要があります。古い固定関数の OpenGL 仕様を調べて、それらがどのように実装されているかを確認できます。または、 →GLMや (自己宣伝) →linmath.hのような、すぐに使用できるグラフィックス数学ライブラリを使用します。

コメントがあったので更新

モデルビュー変換は、シーンに描画されるジオメトリの視点と配置を設定するために使用されます。一般に、モデル ビューは通常、描画されるモデルごとに異なります。Modelview 自体は、モデルとビューに分解できます。ビューは、ある種の「lookAt」関数を使用して設定する人もいます。モデルはジオメトリ配置部分です。

プロジェクションは、OpenGL の「レンズ」のようなものであり、「オルソ」や「パースペクティブ」などの外観の原因となります。

上記のように、使用される特定の射影はユーザー定義ですが、通常は、古い OpenGL 仕様やグラフィックス数学ライブラリに見られるような典型的な変換行列に従います。オルソ行列と錐台行列の定義については、OpenGL の古い仕様 (OpenGL-1.5 など) を参照してください(固定関数 glOrtho と glFrustum で見つけることができます)。

于 2012-10-09T13:04:36.663 に答える