我想在片段着色器中设置布尔值,因为我需要识别何时通过乘法为对象着色。但是我不知道如何从Java代码构造这个布尔变量。使用opengl es 3.0在Java中为Android创建项目。
precision mediump float;
uniform vec4 vColor;
uniform bool textured;
uniform sampler2D uTexture;
varying vec2 vTexCoordinate;
void main(){
if(textured){
gl_FragColor = texture2D(uTexture, vTexCoordinate);
gl_FragColor *= vColor;
} else {
gl_FragColor = vColor;
}
}
我建议使用int
而不是bool
:if (textured != 0)
或者,您可以传递一个对纹理进行加权的浮点值:
precision mediump float;
uniform vec4 vColor;
uniform float textured;
uniform sampler2D uTexture;
varying vec2 vTexCoordinate;
void main()
{
gl_FragColor =
vColor * mix(vec4(1.0), texture2D(uTexture, vTexCoordinate), textured);
}
mix
在两个值之间线性插值。看一下表达式:
gl_FragColor =
vColor * mix(vec4(1.0), texture2D(uTexture, vTexCoordinate), textured);
如果为textured == 0.0
,则将颜色乘以vec4(1.0)
:
gl_FragColor = vColor * vec4(1.0);
如果为textured == 1.0
,则将颜色乘以从纹理查找返回的颜色:
gl_FragColor = vColor * texture2D(uTexture, vTexCoordinate);
如果为0.0 < textured < 1.0
,则将vec4(1.0)
和纹理颜色线性插值。
此外,在条件语句中查找纹理时要格外小心。请参见OpenGL ES 1.1完整规范-6个纹理访问;第110页:
在非均匀条件块的主体内访问mip映射的纹理会给出不确定的值。非均匀条件块是无法在编译时确定执行的块。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句