iResolution在着色器中的含义是什么?

Jac*_*kie 7 glsl fragment-shader

我是glsl的新手.我发现每个演示https://www.shadertoy.com/new都有一个变量iResolution ,这是什么意思?如果我想将此变量传递给着色器,我还需要做什么?

Ret*_*adi 9

如果展开代码上方的"着色器输入"部分,则可以看到该定义:

在此输入图像描述

描述几乎说明了一切.它是窗口/视口的大小(以像素为单位).在该示例中gl_FragCoord,即片段的像素位置,除以该大小以获得片段在视口内的相对位置.

你可以像任何其他统一变量一样设置它:

GLint loc = glGetUniformLocation(program, "iResolution");
glUniform2f(loc, width, height);
Run Code Online (Sandbox Code Playgroud)

其中,widthheight是你的窗口/视口的大小.奇怪的是,这被定义为a vec3,因为只有xy值是有用的.

  • 对于尝试通过Google找出原因的其他人,这是vec3:第三个成分是[像素长宽比](https://twitter.com/iquilezles/status/633113177568313344),如果您的显示器是1.0,具有正方形像素。 (7认同)