Opengl es WebGL着色器变量
我是WebGL新手,奇怪的是,尽管我没有初始化任何东西,但如何使用color或sampler2d等变量?是否有默认值?Webgl有一个称为纹理单位的术语,它是整数。在上面的代码中,您创建了一个采样器,默认单位为0。这意味着采样器将作用于与TEXTURE00关联的纹理 如果创建纹理对象并绑定它而不使其处于活动状态,并且不与任何纹理单元关联,则它将绑定为纹理_2D,并将gl.TEXTURE00作为活动纹理 假设您创建了一个trexture对象checkerTexture,它是TEXTURE0,在图像中处于活动纹理中,并且纹理对象名称checkerTexture位于列表顶部。现在在您的代码中,如果您没有设置统一的值,即整数,默认值为零。这意味着您的着色器将对checkerTexture进行采样作为默认值Opengl es WebGL着色器变量,opengl-es,shader,webgl,Opengl Es,Shader,Webgl,我是WebGL新手,奇怪的是,尽管我没有初始化任何东西,但如何使用color或sampler2d等变量?是否有默认值?Webgl有一个称为纹理单位的术语,它是整数。在上面的代码中,您创建了一个采样器,默认单位为0。这意味着采样器将作用于与TEXTURE00关联的纹理 如果创建纹理对象并绑定它而不使其处于活动状态,并且不与任何纹理单元关联,则它将绑定为纹理_2D,并将gl.TEXTURE00作为活动纹理 假设您创建了一个trexture对象checkerTexture,它是TEXTURE0,在图像
因此,如果您有多个纹理,并且希望对第二个纹理进行采样并读取数据。如果您没有将“统一采样器”设置为纹理单位,它将对纹理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);