質問

重要な場合に備えて、openglの設定は次のとおりです。 ジェネラコディセタグプレ

しばらくの間、クリッピングプレーンはgl_Position.zが-1から1の外側にあるものすべてに適用されると思いました。 しかし、シェーダーでgl_Position.zを一定の数に強制した場合でも: ジェネラコディセタグプレ

gl_Position.wに基づく正しいzバッファリングとクリッピングがまだあります!では、ルールは何ですか?

役に立ちましたか?

解決

gl_Positionの値は、OpenGLが「クリップスペース」と呼ぶものにあります。これは、同次座標系です。特に、クリップスペースのXYZ範囲は[-W、+ W]です。したがって、各頂点は独自のクリップスペースにあります。

「ルールとは」とはどういう意味か正確にはわかりません。クリップスペースgl_Positionは、等質空間のビュー領域に対してクリップされます。したがって、それらは各頂点の[-W、+ W]領域にクリップされます。射影等質空間でそれを想像するのは難しいですが、数学はうまくいくので、それは問題ではありません。

その後、クリップされた頂点は正規化されたデバイス座標(NDC)空間に変換されます。これは、クリップスペースのXYZをWで除算することを意味します。これらの頂点はすべて[-1、1]の範囲にあります。

そこから、ビューポート変換が行われます。 glViewportパラメータは、頂点を[-1、1] NDC空間からビューポート領域にスケーリングします。これにより、ポイントがウィンドウスペースに変換されます。それらがラスタライズされるのはウィンドウスペースです。

ウィンドウスペースのXYは、glViewportによって制御されます。ウィンドウスペースのZ値は、glDepthRangeによって制御されます。デフォルトの深度範囲は、near値0とfar値1です(警告:遠近法マトリックスのnear / far平面には、深度範囲と共通するものはありません。2つを混同しないでください)。したがって、NDC空間のZの[-1、1]をウィンドウ空間の[近く、遠く]にマッピングします。

これらは「ルール」です。

他のヒント

使用する glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL);

深度バッファの値は0〜1(最大深度)です。chooseGL_LEQUALを使用します。これは、深度値が1以下になるため、すべてが画面に描画されることを意味します。

より明確にするために、以下をご覧ください。 http://www.zeuscmd.com/tutorials/opengl/11-Depth.php

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top