尝试设置aTextureCoord参数时,WebGL会返回错误

时间:2014-01-07 14:38:34

标签: webgl fragment shader

我有一个简单的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个小时就完成了这个,并且无法弄清楚为什么会这样。

1 个答案:

答案 0 :(得分:0)

“attribs not setup successfully”意味着

  1. 您没有设置程序。换句话说,您没有使用有效的程序调用{​​{1}}。

  2. 您使用gl.useProgram打开了一个属性,但是您没有通过调用gl.enableVertexAttribArray为其分配缓冲区,之后通过调用gl.bindBuffer(gl.ARRAY_BUFFER, someBuffer)调用当前绑定的gl.vertexAttribPointer { {1}}到指定的属性。