9

私が間違っている場合は訂正してください。頂点シェーダーとピクセルシェーダーを使用する場合、通常、頂点シェーダーの出力gl_positionを計算するコードを提供します。次に、ピクセルシェーダーに入力gl_FragCoordを持つouselvesを見つけます。gl_positionからgl_FragCoordを計算するためにOpenGLによって実行される操作の名前は何ですか?それらが「投影」と「クリップ座標変換」であるというのは正しいですか?それでは、これらの操作中に変換が実行するのは正確には何ですか?言い換えると、openGL関数を置き換えるために使用できるgl_FragCoordとgl_positionの間の数学的関係は何ですか?

貢献していただきありがとうございます。

4

1 に答える 1

11

gl_Positionは、投影後の同次座標にあります。

gl_Positionは頂点の(4d)位置であり、 gl_FragCoordはフラグメントの(2d)位置であることに注意してください。

その間に発生する操作は次のとおりです。

  1. プリミティブアセンブリ(たとえば、3つの頂点から三角形を生成するため)
  2. クリッピング(つまり、最初に収まらない場合は、ビューの内側にある複数の三角形に三角形を切り取ります)
  3. ビューポートアプリケーション
  4. ラスタライズ(これらの三角形を取得し、それらからカバーされたフラグメントを生成します)

したがって、ビューポートである2D空間の頂点位置から表される任意の点を変換する式を見つけることはできますが、生成されたフラグメントが頂点位置に直接整列しないため、それ自体はそれほど有用ではありません。 。頂点の2次元座標を取得する式は次のとおりです。

2d_coord_vertex = viewport.xy + viewport.wh * (1 + gl_Position.xy / gl_Position.w)/2

繰り返しますが、これはgl_FragCoordではありません。より詳細な知識が必要な場合は、GL仕様のラスタライズの詳細を確認してください。

「openGL関数を置き換える」とはどういう意味か正確にはわかりませんが、ラスター化は簡単ではなく、SOの答えの範囲をはるかに超えています。

于 2011-08-23T09:05:19.507 に答える