WebGL着色器变量

爱德华兹·尼克
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这样的变量呢?有默认值吗?

Pravin Poudel

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

如果创建纹理对象并在不激活的情况下进行绑定,并且未与任何纹理单元关联,则它将被绑定为TEXTURE_2D,其中gl.TEXTURE00为活动纹理。

假设您创建了一个变形对象checkerTexture,它是TEXTURE0,它在图像的ACTIVE_TEXTURE中,并且纹理对象名称checkerTexture在列表顶部。现在在代码中,如果您尚未设置统一值(即整数),则默认值为零。这意味着您的着色器将默认采样checkerTexture。


在此处输入图片说明

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

所以用代码:

   gl.uniform1i(sampler2dLocation, 1);

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章