1

画面と OpenGL がプリミティブをレンダリングする必要があるかどうか、つまり画面上にあるかどうかを決定するために使用するロジックとの関係を理解し​​ようとしています。

たとえば、ビューポートを画面よりも大きく設定したとします (これを行う理由はありませんが、例として)。OpenGLは画面サイズを「認識」していないため、正射投影がビューポート内に配置されている限り、画面からポイントを「描画」します。正しいですか?

また、プロジェクションによって決定されるビューポートの外側に頂点位置を定義した場合、OpenGL はそれをレンダリングに含めますか?

  glViewport(0,0,100,100);
  ApplyOrtho(50,50); // custom ES 2.0 utility to apply 2D orthographic projection

現在、位置の頂点は(75,75)OpenGL によってレンダリングされませんよね?

4

1 に答える 1

2

プリミティブをレンダリングする必要があるかどうかを決定するために OpenGL が使用するロジック

プリミティブをレンダリングする必要があるかどうかを決定するために OpenGL が使用するロジックは 1 つだけです。プリミティブがクリップ/カリングされていない場合、ラスタライズを停止する唯一の方法は、ユーザーglEnable(GL_RASTERIZER_DISCARD). それ以外の場合、OpenGL 仕様では、クリッピングの一部としてカリングされなかったすべてのプリミティブがラスタライズされると定義されています。

さて、それらが目に見える効果を生み出すかどうかは別の問題です. また、画面外のプリミティブは目に見える効果を生成できないため (画像の読み込み/保存を使用しない限り)、準拠する OpenGL 実装では、必要に応じてそのような三角形を自由にカリングできます。しかし、より可能性が高いのは、それらをラスタライズし、フラグメントがウィンドウの外にあるかどうかを確認するだけです。その場合、それらのフラグメントは破棄されます。

一般に、これは気にする必要はありません。適切なビューポートを設定するだけで問題ありません。

于 2013-01-10T04:59:20.580 に答える