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的新手,这很奇怪,尽管我没有初始化任何东西,如何使用color或sampler2d这样的变量呢?有默认值吗?
Webgl有一个称为纹理单位的术语,它是整数。在上面的代码中,您创建了一个采样器,默认单位为0。这意味着采样器将作用于与TEXTURE00相关的纹理。
如果创建纹理对象并在不激活的情况下进行绑定,并且未与任何纹理单元关联,则它将被绑定为TEXTURE_2D,其中gl.TEXTURE00为活动纹理。
假设您创建了一个变形对象checkerTexture,它是TEXTURE0,它在图像的ACTIVE_TEXTURE中,并且纹理对象名称checkerTexture在列表顶部。现在在代码中,如果您尚未设置统一值(即整数),则默认值为零。这意味着您的着色器将默认采样checkerTexture。
因此,如果您有多个纹理,并且希望对第二个纹理进行采样并读取数据。如果您未将统一采样器设置为纹理单位,它将对TEXTURE00进行采样,这可能并非每次都需要。
所以用代码:
gl.uniform1i(sampler2dLocation, 1);
这将使您可以通过该采样器获取第二个纹理对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句