WebGL:如何获取片段着色器中每个像素的位置?

MrR*_*ROY 5 html5 opengl-es webgl

I know I could use gl_Position to get every vertex's position, but if it's possible to get every pixel's position in fragment shader ?

I want to change the alpha value of some pixel area.

Abs*_*thm 11

vec2 gl_FragCoord
Run Code Online (Sandbox Code Playgroud)

它将以像素为单位返回屏幕上片段的位置.如果你传递制服vec2 screenResolution然后你可以使用这两个值来确定屏幕上的确切位置是像素,在哪个部分等.

这是一个内置变量,因此您可以在片段着色器中随时使用它.

以下是一个用于演示的示例:http://goo.gl/AG7UO

如果你想要片段的woorld坐标,那么你应该使用varying变量.

顶点着色器:

varying vec3 vPos;
attribute vec3 aVertexCoord;
uniform mat4 uMVMat;
uniform mat4 uProjMat;

void main() {
    vPos = uMVMat * aVertexPos;
    gl_Position = uProjMat * vPos;
}
Run Code Online (Sandbox Code Playgroud)

片段着色器:

varying vec3 vPos;
void main() {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.