在 GLSL (WebGL) 中,如何在片段着色器中获取屏幕像素 X 位置?
In GLSL (WebGL), how can I get the screen pixel X position in the fragment shader?
最初我只使用 gl_FragCoord.x
,这在一定程度上效果很好。然而 gl_FragCoord.xy
的范围在 0.5 和 1023.5 之间,所以在 1023.5 x 之后只是 returns 相同的值。
我有一件 canvas 实际尺码的制服。
uniform vec2 resolution;
void main(void) {
float pixelXPos = ?
}
假设宽度为 1800,对于大于 1023.5 的像素,如何在片段着色器中获取实际像素屏幕 X 位置?
对于上下文,我有一个覆盖整个 canvas 的正方形。我想让着色器在那个正方形上打印一个图案,所以我需要知道 x 和 y 坐标(在屏幕 space 中)以便知道每个像素要绘制什么。
谢谢!
您必须对 pixelXPos
使用 highp
精度限定符:
highp float pixelXPos = gl_FragCoord.x;
mediump
的整数范围只保证至少为 [-2e10, 2e10] ([-1024, 1024])。参见 OpenGL ES Shading Language 1.00 - 4.5 Precision and Precision Qualifiers。
最初我只使用 gl_FragCoord.x
,这在一定程度上效果很好。然而 gl_FragCoord.xy
的范围在 0.5 和 1023.5 之间,所以在 1023.5 x 之后只是 returns 相同的值。
我有一件 canvas 实际尺码的制服。
uniform vec2 resolution;
void main(void) {
float pixelXPos = ?
}
假设宽度为 1800,对于大于 1023.5 的像素,如何在片段着色器中获取实际像素屏幕 X 位置?
对于上下文,我有一个覆盖整个 canvas 的正方形。我想让着色器在那个正方形上打印一个图案,所以我需要知道 x 和 y 坐标(在屏幕 space 中)以便知道每个像素要绘制什么。
谢谢!
您必须对 pixelXPos
使用 highp
精度限定符:
highp float pixelXPos = gl_FragCoord.x;
mediump
的整数范围只保证至少为 [-2e10, 2e10] ([-1024, 1024])。参见 OpenGL ES Shading Language 1.00 - 4.5 Precision and Precision Qualifiers。