我有一个简单的webGL程序,我几乎从Mozilla developer network复制粘贴。由于某种原因,我设法创建一个单一颜色的立方体侧面,顶部和底部的纹理和纹理是可见的,但我不确定闪电是否正确设置。有一个错误,我试图修复下面的一个,我注意到当我尝试使用aTextureCoord参数启动着色器时发生错误。以下是我的着色器和我正在尝试使用的javascript代码。有人可以弄清楚为什么会这样。 属性highp vec3 aVertexNormal; 属性highp vec3 aVertexPosition; 属性highp vec2 aTextureCoord;
uniform highp mat4 uNormalMatrix;
uniform highp mat4 uMVMatrix;
uniform highp mat4 uPMatrix;
varying highp vec3 vLighting;
varying highp vec2 vTextureCoord;
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
vTextureCoord = aTextureCoord;
highp vec3 ambientLight = vec3(0.6, 0.6, 0.6);
highp vec3 directionalLightColor = vec3(0.5, 0.5, 0.75);
highp vec3 directionalVector = vec3(0.85, 0.8, 0.75);
highp vec4 transformedNormal = uNormalMatrix * vec4(aVertexNormal, 1.0);
highp float directional = max(dot(transformedNormal.xyz, directionalVector), 0.0);
vLighting = ambientLight + (directionalLightColor * directional);
}
</script>
以下是javascript代码。
shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);
shaderProgram.vertexColorAttribute = gl.getAttribLocation(shaderProgram, "aVertexColor");
gl.enableVertexAttribArray(shaderProgram.vertexColorAttribute);
shaderProgram.pMatrixUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");
shaderProgram.mvMatrixUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix");
shaderProgram4Tex.vertexPositionAttribute = gl.getAttribLocation(shaderProgram4Tex, "aVertexPosition");
gl.enableVertexAttribArray(shaderProgram4Tex.vertexPositionAttribute);
shaderProgram4Tex.vertexTextureAttribute = gl.getAttribLocation(shaderProgram4Tex, "aTextureCoord");
gl.enableVertexAttribArray(shaderProgram4Tex.vertexTextureAttribute);
shaderProgram4Tex.pMatrixUniform = gl.getUniformLocation(shaderProgram4Tex, "uPMatrix");
shaderProgram4Tex.mvMatrixUniform = gl.getUniformLocation(shaderProgram4Tex, "uMVMatrix");
shaderProgram4Tex.vertexNormalAttribute = gl.getAttribLocation(shaderProgram4Tex, "aVertexNormal");
gl.enableVertexAttribArray(shaderProgram4Tex.vertexNormalAttribute);
shaderProgram4Tex.samplerUniform = gl.getUniformLocation(shaderProgram4Tex, "uSampler");
shaderProgram4Tex.normalMatrix = gl.getUniformLocation(shaderProgram4Tex, "uNormalMatrix");
运行程序时出现以下错误。
WebGL: INVALID_OPERATION: drawElements: attribs not setup correctly
希望有人可以回答这个问题,因为我花了10个小时就完成了这个,并且无法弄清楚为什么会这样。
答案 0 :(得分:0)
“attribs not setup successfully”意味着
您没有设置程序。换句话说,您没有使用有效的程序调用{{1}}。
您使用gl.useProgram
打开了一个属性,但是您没有通过调用gl.enableVertexAttribArray
为其分配缓冲区,之后通过调用gl.bindBuffer(gl.ARRAY_BUFFER, someBuffer)
调用当前绑定的gl.vertexAttribPointer
{ {1}}到指定的属性。