0

最も簡単な方法で頂点が表示されているかどうかを確認するにはどうすればよいですか?

頂点シェーダーが次のようになっている場合:

void main(void) {
  vec4 glPosition = vec4(VTPosition.x * VTAspectRatio, VTPosition.y, VTPosition.z, 1.0);
  gl_Position = VTProjection * VTModelview * glPosition;
} 

同じ方法で CPU の可視性を確認できますか?

Vector4 vertex = {0.5, 0.5, -1.0, 1.0};

vertex = projectionMatrix * modelViewMatrix * vertex;

頂点の x と y の値が -1.0 .. 1.0 (ビューポート座標) の範囲内にある場合、表示されます

4

1 に答える 1

0

頂点シェーダーの出力位置 ( gl_Position) を透視分割して、NDC (Normalized Device Coordinates) を取得します。NDC 空間では、クリッピングはすべての座標 (1) の [-1.0, 1.0] 範囲に対して行われます。

したがって、特定の頂点がクリップされるかどうかをテストするにgl_Position.xyz / gl_Position.wは、すべての座標が [-1.0, 1.0] の範囲内にあるかどうかを判断する必要があります。この条件をテストする GLSL コードは次のようになります。

if (any(lessThan(gl_Position.xyz, vec3(-gl_Position.w))) ||
    any(greaterThan(gl_Position.xyz, vec3(gl_Position.w))))
{
    // vertex will be clipped
}

(1) 厳密に言えば、ビュー ボリュームの外側のジオメトリが最終的にクリップされる限り、レンダリング パイプラインのさまざまなポイントでクリッピングを実行できます。しかし、NDC で表現するのが最も簡単です。

于 2015-03-10T05:07:04.023 に答える