2
我發現,在我的片段着色器,這兩個語句產生相同的輸出:計算紋理座標(的iOS /的OpenGL ES 2.0)
// #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;
...
}