如何在WebGL中用纹理替换颜色着色器?

时间:2017-10-22 00:00:31

标签: html5 webgl

我必须使用WebGL实现这些选项。我目前收到以下错误:" WebGL:INVALID_OPERATION:drawArrays:尝试访问越界数组"。但是,我的问题并非如此。我不知道我是否能以正确的方式做到这一点。

我认为以下代码是我做得不对的关键部分。 我们要做的是使用颜色着色器加载,只有在加载纹理时,纹理才会替换颜色着色器。

我是这个话题的新手,请帮忙!我将根据您可能需要的任何进一步细节进行更新。

function renderScene() {

  gl.viewport(pgl.viewport.x, pgl.viewport.y, pgl.viewport.width, pgl.viewport.height);
  gl.clear(gl.COLOR_BUFFER_BIT);

  var modelViewMatrix = mat4.create();
  mat4.multiply(modelViewMatrix, viewMatrix, modelMatrix);

  gl.useProgram(pgl.shaderProgram);

  gl.uniformMatrix4fv(pgl.shaderProgram.uModelViewMatrix, false, modelViewMatrix);
  gl.uniformMatrix4fv(pgl.shaderProgram.uProjMatrix, false, projMatrix);

  gl.enableVertexAttribArray(pgl.shaderProgram.aPosition);
  gl.bindBuffer(gl.ARRAY_BUFFER, pgl.vbo);
  gl.vertexAttribPointer(pgl.shaderProgram.aPosition, 3, gl.FLOAT, false, 0, 0);


  if (isColor) {
    gl.enableVertexAttribArray(pgl.shaderProgram.aColor);
    gl.bindBuffer(gl.ARRAY_BUFFER, pgl.vboColor);
    gl.vertexAttribPointer(pgl.shaderProgram.aColor, 4, gl.FLOAT, false, 0, 0);

  } else {
    gl.disableVertexAttribArray(pgl.shaderProgram.aColor);
    gl.clear(gl.COLOR_BUFFER_BIT);
    gl.enableVertexAttribArray(pgl.shaderProgram.aTexture);
    gl.bindBuffer(gl.ARRAY_BUFFER, pgl.vboTexture);
    gl.vertexAttribPointer(pgl.shaderProgram.aTexture, 2, gl.FLOAT, false, 0, 0);
    gl.uniform1i(pgl.shaderProgram.uSampler, 0);
  }
  gl.drawArrays(gl.TRIANGLE_STRIP, 0, 3);

  requestAnimationFrame(renderScene);
  updateScene();
}

这是用户界面(IMAGE) This is the UI

(Pastebin.com) Here's the complete code I'm working on... sorry if it's a mess.

0 个答案:

没有答案