WebGL 着色器变量

WebGL Shader Variables

var fragmentShaderSource = '\
            varying highp vec4 color; \
            varying mediump vec2 texCoord;\
            varying highp vec3 v; \
            varying highp vec3 n; \
            uniform sampler2D sampler2d;\
            void main(void) \
            { \
                gl_FragColor = color + 0.0 * texture2D(sampler2d, texCoord); \
                gl_FragColor.a = 1.0; \
                console.log(color); \
            } \
    ';

我是 WebGL 的新手,奇怪的是,怎么可能使用像 colorsampler2d[=15= 这样的变量] 虽然我没有初始化任何东西?有默认值吗?

Webgl 有一个术语叫做纹理单元,它是整数。在上面的代码中,您创建了一个采样器,默认单位为 0。这意味着采样器将作用于与 TEXTURE00 关联的纹理。

如果您创建一个纹理对象并绑定它而不使其处于活动状态并且不与任何纹理单元关联,它将被绑定为 TEXTURE_2D 将 gl.TEXTURE00 作为活动纹理。

假设您创建了一个纹理对象 checkerTexture,它是图像中 ACTIVE_TEXTURE 中的 TEXTURE0,纹理对象名称 checkerTexture 在列表的顶部。现在在你的代码中,如果你没有设置统一值,即整数,默认值为零。这意味着您的着色器将默认对 checkerTexture 进行采样。


因此,如果您有多个纹理并且您希望对第二个纹理进行采样并读取数据。如果您没有将统一采样器设置为纹理单元,它将采样 TEXTURE00,这可能不是每次都需要的情况。

所以用代码:

   gl.uniform1i(sampler2dLocation, 1);

这将使您可以通过该采样器获取第二个纹理对象。