Opengl es WebGL着色器变量

Opengl es WebGL着色器变量,opengl-es,shader,webgl,Opengl Es,Shader,Webgl,我是WebGL新手,奇怪的是,尽管我没有初始化任何东西,但如何使用color或sampler2d等变量?是否有默认值?Webgl有一个称为纹理单位的术语,它是整数。在上面的代码中,您创建了一个采样器,默认单位为0。这意味着采样器将作用于与TEXTURE00关联的纹理 如果创建纹理对象并绑定它而不使其处于活动状态,并且不与任何纹理单元关联,则它将绑定为纹理_2D,并将gl.TEXTURE00作为活动纹理 假设您创建了一个trexture对象checkerTexture,它是TEXTURE0,在图像

我是WebGL新手,奇怪的是,尽管我没有初始化任何东西,但如何使用colorsampler2d等变量?是否有默认值?

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

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

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


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

因此,对于代码:

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); \
            } \
    ';

这将允许您通过该采样器获取第二个纹理对象。

可变
参数具有一个初始值,该初始值是通过从顶点着色器插值匹配的
可变
参数而预先确定的<代码>统一参数在用于渲染之前从着色器外部设置。因此,我们可以知道初始值是什么吗?初始值为零表示纹理00。我已经发布了答案,请阅读。
   gl.uniform1i(sampler2dLocation, 1);