gl_FragCoord変数記憶四つの成分:(X、Y、Z、1/ワット)gl_FragCoordの1/w座標は何を表しますか?
どうワット座標れ、なぜそれがワット1 /として格納されていますか? に突出(X、Y、Z、W)、:(X/W、Y/Z/W、W)
gl_FragCoord変数記憶四つの成分:(X、Y、Z、1/ワット)gl_FragCoordの1/w座標は何を表しますか?
どうワット座標れ、なぜそれがワット1 /として格納されていますか? に突出(X、Y、Z、W)、:(X/W、Y/Z/W、W)
GLSLとOpenGLの仕様は、この点で不必要に混乱します。 OpenGL仕様は理解しやすくなります。gl_FragCoord
は、ウィンドウスペースの頂点位置のX、Y、Z成分を格納します。 X、Y、およびZの値は、ウィンドウスペースの位置を計算するために説明したように計算されます(ただし、ピクセル中心と左上の原点はXとYの値を変更できます)。これは、仕様のCoordinate Transforms
セクションに記載されています。
gl_FragCoord
のW成分がW Cがクリップ空間頂点位置である場合、(1/C W)です。頂点シェーダのgl_Position.w
です。
Wを維持するための唯一の有用な目的は、クリップスペースの位置を戻すことです。reverse-transform gl_FragCoord
を返すのは、reverse-transform gl_FragCoord
です。そのページに示されているように、Wで乗算する必要があります c。しかし、gl_FragCoord
はこの値の逆数しか格納していないので、今度はgl_FragCoord.w
で割る必要があります。
したがって、OpenGLはそれほど意味を持たないため、このようにOpenGLを格納していると見なすことができます;)OpenGL仕様のすべての部分には無意味なものがなければならないというルールがあります。 XYZコンポーネントはあまりにも意味をなさないので、実際に必要とする値の逆数を格納することに決めました。
技術的には、これは3D LabsがGLSLを作成した時代の歴史的なアーティファクトです。私は彼らが純粋に利己的なハードウェアの理由のためにそれをしたと確信していますが、私はその本当の証拠はありません。
座標均質で与えられます。 gl_FragCoord
はこの投影を保存しますが、最後のコンポーネントには(無駄な)(w/w)=(1)を保存するのではなく、(1/w)を保存しておくと便利です。
"' gl_FragCoord'はこの投影を保存します。 "いいえ、それはポストプロジェクション変換をウィンドウ空間に保存します。 –