gl_FragCoord的范围是多少

tay*_*rak 6 c++ opengl shader glsl

的范围是gl_FragCoord.xy多少?我知道gl_FragCoords是屏幕坐标,但是实际范围是多少?( 0, width - 1 )还是( 1, width )?而glsl编译器会产生什么样的错误(如果有的话),则说明我做了gl_FragCoord.x - 5一些类似基于fragcoord的计算时的操作?

ps:我不需要规范化。

0xA*_*A55 5

gl_FragCoord.xy通过使用以下着色器代码并glReadPixels(0, 0, 1024, 1024, GL_RED, GL_FLOAT, xxx)从我的帧缓冲区对象获取着色器的输出,我对实际范围进行了测试,FBO附加了内部格式为的纹理GL_R32F

out highp vec4 Output;

void main()
{
    Output = vec4(gl_FragCoord.xy, 0.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

实际结果是:gl_FragCoord.xy在[0.5,1023.5]范围内,而不是[0.0,1023.0]。

  • 来自 [spec](https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.60.pdf):“*默认情况下,gl_FragCoord 假定窗口坐标的左下角原点并假定像素中心位于半像素坐标处。例如,为窗口中最左下角的像素返回 (x, y) 位置 (0.5, 0.5)*" 注意**像素中心**概念。 (4认同)

dat*_*olf 3

gl_FragCoord 坐标从 0 开始索引。

该表达式gl_FragCoord.x - 5将产生 [-5, (width - 5) - 1] 范围内的值

  • 不完全的。默认情况下GL使用像素中心采样,因此添加0.5。参见其他答案。 (7认同)