私のフラグメントシェーダーでは、これら2つのステートメントが同じ出力を提供することがわかりました。
// #1
// pos is set from gl_Position in vertex shader
highp vec2 texc = ((pos.xy / pos.w) + 1.0) / 2.0;
// #2 - equivalent?
highp vec2 texc2 = gl_FragCoord.xy/uWinDims.xy;
これが正しければ、数学を説明していただけますか?私が思いついたのは#2ですが、論文で#1を見ました。これはNDC(正規化されたデバイス座標)の計算ですか?
コンテキストは、ビューポートと同じサイズのFBOでテクスチャ座標を使用しているということです。それはすべて機能していますが、数学を理解したいと思います。
頂点シェーダーの関連部分:
attribute vec4 position;
uniform mat4 modelViewProjectionMatrix;
varying lowp vec4 vColor;
// transformed position
varying highp vec4 pos;
void main()
{
gl_Position = modelViewProjectionMatrix * position;
// for fragment shader
pos = gl_Position;
vColor = aColor;
}
フラグメントシェーダーの関連部分:
// transformed position - from vsh
varying highp vec4 pos;
// viewport dimensions
uniform highp vec2 uWinDims;
void main()
{
highp vec2 texc = ((pos.xy / pos.w) + 1.0) / 2.0;
// equivalent?
highp vec2 texc2 = gl_FragCoord.xy/uWinDims.xy;
...
}