我是 GLSL 新手,完全不知道自己在做什么。我一直在寻找学习资源,但是,大多数资源要么非常笼统,如着色器书,要么非常令人难以抗拒,如此参考资料。
不管怎样,我正在寻找“碎片”到底是什么。我认为它只是指需要渲染的像素。如果是这种情况,
gl_FragCoord
返回什么?我已经搞乱了它,我不认为它返回当前片段的 x,y,但着色器书说
“vec4 gl_FragCoord,它保存活动线程正在处理的像素或屏幕片段的屏幕坐标。”
我还看到它返回从 0 到 1 的值,最初是 (0.5,0.5)。我不知道 (0.5,0.5) 指的是什么。是屏幕的百分比吗?就像在 800px x 800px 的屏幕上 0.5,0.5 会对应 400,400 吗?如果是这样,为什么这种事情不起作用:
void main() {
vec4 screencol = texture2D(displayimg, gl_FragCoord.xy*vec2(width,height));
gl_FragColor = screencol;
}
宽度和高度存储屏幕尺寸并显示为sampler2D。
我只是想渲染一个sampler2D,我一定错过了一些东西,因为这看起来应该是非常标准和可实现的。使用上面的代码我得到一个错误:
OpenGL error 1282 at top endDraw(): invalid operation
gl_FragCoord.xy
包含窗口相对坐标。左下片段的坐标为 (0.5, 0.5)。右上角片段的坐标为 (width-0.5, height-0.5)。请参阅gl_FragCoord
。texture2D
的参数需要是纹理坐标:
vec4 screencol = texture2D(displayimg, gl_FragCoord.xy*vec2(width,height));
vec4 screencol = texture2D(displayimg, gl_FragCoord.xy / vec2(width, height));