你好,我是一个GLSL新手,遇到了一些问题。
我正在尝试创建一对GLSL着色器,以使用颜色或纹理,但肯定做错了什么。 问题在于,如果将uUseTexture设置为0(应该表示颜色),它不起作用(对象没有上色)。我知道上色代码是单独工作的,有什么提示可以解决if语句不起作用的问题吗?
以下是代码:
// 片段着色器
precision mediump float;
uniform int uUseTexture;
uniform sampler2D uSampler;
varying vec4 vColor;
varying vec2 vTextureCoord;
void main(void) {
if(uUseTexture == 1) {
gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
} else {
gl_FragColor = vColor;
}
}
// 顶点
attribute vec3 aVertexPosition;
attribute vec4 aVertexColor;
attribute vec2 aTextureCoord;
uniform int uUseTexture;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
varying vec4 vColor;
varying vec2 vTextureCoord;
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
if(uUseTexture == 1) {
vTextureCoord = aTextureCoord;
} else {
vColor = aVertexColor;
}
vec2(vTextureCoord.s, vTextureCoord.t)
应该改为vTextureCoord.st
。你应该查一下 GLSL 中 swizzle masks 的工作原理。 - Nicol Bolasif(uUseTexture == 1)
替换为if (true)
,相同的着色器代码就能够工作了吗? - rotoglup