我必须使用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();
}
(Pastebin.com) Here's the complete code I'm working on... sorry if it's a mess.