我刚刚在这里完成了本教程:http://learningwebgl.com/blog/?p=134
我现在正在尝试进行简单的修改。我不希望每个顶点都有一个独特的颜色,我希望所有的顶点都使用我可以动态改变的相同颜色。
以下是教程中的相关代码。
var squareVertexColorBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexColorBuffer);
colors = []
for (var i=0; i < 4; i++) {
colors = colors.concat([0.5, 0.5, 1.0, 1.0]);
}
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);
squareVertexColorBuffer.itemSize = 4;
squareVertexColorBuffer.numItems = 4;
我尝试了以下修改和许多其他变体。
squareVertexColorBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexColorBuffer);
colors = [0.5, 0.5, 1.0, 1.0];
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);
squareVertexColorBuffer.itemSize = 4;
squareVertexColorBuffer.numItems = 1;
我得到的错误是
.WebGLRenderingContext: GL ERROR :GL_INVALID_OPERATION : glDrawArrays: attempt to access out of range vertices in attribute 1
这个错误非常有意义。我想渲染认为每个顶点都有一个独特的颜色,因此对于第n个顶点,它会寻找第n个颜色。
问题是我最终希望画出100万个点,每个点总是会是相同的颜色。因此,当我只需要4个时,我真的不想创建400万个花车。
答案 0 :(得分:0)
好吧我明白了,就像它一样简单。
shaderProgram.vertexColorAttribute = gl.getUniformLocation(shaderProgram,“aVertexColor”); gl.uniform4fv(shaderProgram.vertexColorAttribute,[1.0,1.0,1.0,1.0]);