10

私は OpenGL を学んでいますが、私を困惑させ続けているトピックの 1 つはファー クリッピング プレーンです。ニア クリッピング プレーンとサイド クリッピング プレーンの背後にある理由は理解できますが (それらの外側のオブジェクトは決してレンダリングされないため、実際の効果はありません)、ファー クリッピング プレーンは煩わしいだけのようです。

OpenGL の背後にいる人々は明らかにこれを考え抜いてきたので、私が見逃しているものがあるに違いないことはわかっています。OpenGL にファー クリッピング プレーンがあるのはなぜですか? さらに重要なことは、オフにすることはできないため、非常に離れた場所にあるものを描くときに推奨されるイディオムとプラクティスは何ですか? クリッピング プレーンを非常に遠くに配置するだけでよいのでしょうか、それとももっと洗練された解決策がありますか? これは製品ソフトウェアでどのように行われますか?

4

3 に答える 3

19

唯一の理由は深度精度です。深度バッファーには限られた数のビットしかないため、限られた量の深度を表すこともできます。

ただし、ファー プレーンを無限に遠くに設定することもできます。これを参照してください。深度バッファーではうまく機能しません。遠くにオクルージョンがあると、多くのアーティファクトが表示されます。

したがって、これは深度バッファーを中心に展開するため、使用しない限り、遠くのものを処理するのに問題はありません。たとえば、一般的な手法は、シーンを「スラブ」でレンダリングすることです。各スラブは、内部では (1 つのスラブ内のすべてのものに対して) 深度バッファーのみを使用しますが、外部では何らかの形式の画家のアルゴリズムを使用します (スラブに対しては、最も遠いものを描画するため、最も遠いものを描画します)。最初)

于 2012-08-14T09:19:50.600 に答える
8

OpenGL にファー クリッピング プレーンがあるのはなぜですか?

コンピュータは有限だからです。

これに対処するには、一般に 2 つの方法があります。1 つの方法は、z-far が無限に近づくにつれて極限を取ることによって投影を作成することです。これは有限値に収束しますが、遠くのオブジェクトの深度精度に大きな影響を与える可能性があります。

別の方法 (特定の距離を超えるオブジェクトの深度テストがまったく失敗することを希望する場合) は、 で深度クランプをオンにすることglEnable(GL_DEPTH_CLAMP)です。これにより、ニア プレーンとファー プレーンに対するクリッピングが防止されます。[-1, 1] の範囲外の正規化された z 座標を持つフラグメントは、その範囲にクランプされるだけです。前に示したように、クランプされているフラグメント間の深度テストを台無しにしますが、通常、それらのオブジェクトは遠くにあります。

于 2012-08-14T09:45:35.393 に答える
0

OpenGL深度テストが Window Space Coordinates ([-1,1]^3 で正規化されたデバイス座標。追加のスケーリング glViewport と glDepthRange を使用) で実行されたのは、まさに「事実」です。

私の観点からすると、これは OpenGL ライブラリの設計上の観点の 1 つです。


この OpenGL 拡張機能/OpenGL コア機能を排除するアプローチの 1 つhttps://www.opengl.org/registry/specs/ARB/depth_clamp.txtが OpenGL バージョンで利用可能な場合。


透視投影では、「ファークリッピングプレーン」について何もないことを説明したいと思います。

3.1 透視投影では、ポイント \vec{c} を投影の中心として設定し、投影が実行される平面にする必要があります。これをイメージ プレーン T としましょう: (\vec{r}-\vec{r_0},\vec{n})

3.2 投影された平面 T が投影の任意の点 \vec{r} と \vec{c} を分割するとします。それ以外の場合、\vec{r} と \vec{c} は 1 つのハーフ空間にあり、ポイント \vec{r} は破棄されます。

3.4 射影の考え方は、平面 T との交点 \vec{i} を見つけることです \vec{i}=(1-t)\vec{c}+t\vec{r}

3.5 そのまま (\vec{i}-\vec{r_0},\vec{n})=0

=>

( (1-t)\vec{c}+t\vec{r}-\vec{r_0},\vec{n})=0

=>

( \vec{c}+t(\vec{r}-\vec{c})-\vec{r_0},\vec{n})=0

3.6. 「3.5」から導出された t は「3.4」に代入でき、平面 T への射影を受け取ります。

3.7. 投影後、ポイントは平面上にあります。しかし、イメージ プレーンが OXY プレーンに平行であると仮定すると、投影後のポイントに元の「深度」を使用することを提案できます。

したがって、ジオメトリの観点からは、ファー プレーンをまったく使用しないことも可能です。[-1,1]^3 モデルを明示的に使用しないことも同様です。

psラテックス数式を正しい方法で入力する方法がわかりません.stはレンダリングされます。

于 2016-02-07T21:14:01.610 に答える