【发布时间】:2016-10-23 11:23:56
【问题描述】:
我正在尝试编写一个同时支持颜色和纹理的着色器。
出于某种原因,我可以让它工作。
没有抛出任何错误,并且每个都可以完美地单独工作,
获取位置:
shaderProgram.useTextureUniform = gl.getUniformLocation(shaderProgram, "uUseTexture");
在绘制时,我会像这样更改值:
var uUseTexture=false;
gl.uniform1f(shaderProgram.useTextureUniform, uUseTexture);
还有 GLSL 本身:
片段:
precision mediump float;
uniform sampler2D uSampler;
varying vec2 vTextureCoord;
varying vec4 vColor;
uniform bool uUseTexture;
void main(void) {
vec4 textureColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
vec4 texColor = vec4(textureColor.rgb, textureColor.a);
vec4 vertexColor = vColor;
if (!uUseTexture){
gl_FragColor = vertexColor;
}
else{
gl_FragColor = texColor;
}
}
顶点:
attribute vec3 aVertexPosition;
attribute vec3 aVertexNormal;
attribute vec2 aTextureCoord;
attribute vec4 aVertexColor;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
uniform mat3 uNMatrix;
varying vec2 vTextureCoord;
varying vec4 vColor;
void main(void){
vec4 mvPosition = uMVMatrix * vec4(aVertexPosition, 1.0);
gl_Position = uPMatrix * mvPosition;
vTextureCoord = aTextureCoord;
vColor = aVertexColor;}
【问题讨论】:
-
思想出错时的样子? gl_FragColor = mix(texColor, vertexColor, 0.5);?
-
@PauliNieminen - 纹理不起作用,只有颜色
-
对。我不完全理解你原来的问题。着色器对我来说看起来不错。纹理采样无法读取值听起来像纹理未绑定到单元或 uSampler 或 vTextureCoord 未正确设置以从 javascript/vbo 传播到片段着色器。
标签: javascript glsl webgl