3

OpenGL と 3D の理解を深めるために、CPU のみで実行される単純なレンダリング パイプラインを実装しようとしています。理にかなっている場合は、OpenGL と同じ標準を使用しようとしています。たとえば、 OpenGL のような右手座標系を使用しています。何か新しいことを学ぶときによくあることですが、答えが見つからない質問に出くわしました。以下の内容が意味をなさない場合は、ご容赦ください。

クリップ スペース (gl_Position頂点シェーダーで指定する座標) では、負の Z はユーザーから離れています。しかし、深度バッファーでは、正の Z が離れています (既定の深度設定を使用している場合)。

この質問に対する 1 つの答えは、フリップが射影変換によるものであることを示唆しています。しかし、逆を示唆する小さな実験(WebGL/OpenGL ES に基づく) を行いました。クリップ空間では、射影変換を使用しなくても、Z はユーザーから離れた方向を向いています。

したがって、ある時点で、 を渡した後gl_Position、OpenGL は Z 座標を反転させます。それはいつ、どのように?

ビューポート変換にあると思いますが、これをサポートするドキュメントを見つけることができませんでした。

4

2 に答える 2

3

OpenGL の Clip-Space はすでに左利きです (常に左利きでした)。したがって、最新の GL では、右手系を明示的に使用するスペースはなく、「反転」はまったく行われません。ただし、古い GL の目の空間はしばしば右手で定義され、「反転」は射影行列の一部として行われ、near と far の正の値がそれぞれの負の z 値を参照することを明示的に期待していましたglFrustum()gluPerpective()ただし、任意の行列を使用できるため、目やオブジェクトの空間を右手で定義することを強制されることはありませんでした。これは、デフォルトの規則のようなものでした。そして今でも多くの人が、プログラマブル パイプラインでこの規則に従っています。

于 2013-07-15T14:52:24.637 に答える