2

たとえば、オルソ投影がある場合:

left = -aspect, right = aspect, top = 1.0, bottom = -1.0, far = 1.0, near = -1.0

-2.0 で三角形を描画し、ニア クリッピング プレーンで切り取ります。貴重なレンダリング時間を本当に節約できるでしょうか?

カリングは、何かを描画する必要があるかどうかを決定し、ビューの外にある場合は破棄します (頂点シェーダー/メイン プログラムでプログラマーによって記述されます)。クリッピング == 安価な自動カリング?

また、ちょうど安い間引きをテーマに - されます

if(dist(cam.pos, sprite.pos) < MAX_RENDER_DIST)
draw_sprite(sprite);

単純な 2D ゲームで十分ですか?

4

2 に答える 2

2

GPUでのクリッピングの問題は、ラスター化の直前のパイプラインの比較的遅い段階で発生するため、多くの計算をすでに無料で実行できることです。

CPUでそれを行うと、これらの計算が発生するのを防ぐことができ、また非常に重要なこととして、実際の描画コマンドの数を減らすことができます(これもボトルネックになる可能性があります)。

ただし、CPUでこれを高速に実行する必要があります。通常は、データを表すためにoctreeなどを使用して、サブツリー全体を一度に破棄できるようにします。各ポリゴンまたはオブジェクトを個別に調べる必要がある場合、これは高額になる可能性があります。

したがって、結論として、有用性はボトルネックがどこにあるかによって異なります(CPU、頂点シェーダー、伝送速度など)。

于 2012-08-13T21:21:49.897 に答える
2

デフォルトの OpenGL クリッピング スペースは、x、y、z に対して -1 ~ +1 です。

スプライト距離の条件付きテストが機能します。ファー クリッピング プレーンがほぼ同じことを行うため、これは必要ありません。通常はそれで十分です。検査が必要なケースがあります。クリッピング プレーンの内側のコーナーにあるオブジェクトは、カメラの回転によってファー クリッピング プレーンの外に出てくる場合があります。これは、カメラからコーナーまでの距離が、カメラからファー クリッピング プレーンまでの垂直距離よりも長いためです。2D ゲームを使用していて、カメラの視野角を変更できない場合、これは問題になりません。

単純な 2D ゲームの場合は、グラフィックの最適化について心配する必要がない可能性が高くなります。クリッピング プレーンの外側にスプライトを描画すると、時間を節約できます。ただし、節約できる時間は人によって異なります。大量のスプライトが外にある場合、かなりの時間を節約できます。ただし、使用するアルゴリズムを検討し、表示されないものを描画しないようにする必要があります。スプライトのごく一部が外にある場合、節約される時間はごくわずかです。

于 2012-08-13T21:18:17.997 に答える