【发布时间】:2012-02-27 05:46:20
【问题描述】:
您好,我是 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。您应该查看swizzle masks 在 GLSL 中的工作方式。 -
你的意思是如果你把
if(uUseTexture == 1)替换成if (true),同样的着色器代码可以工作吗?