我刚刚在这里完成了本教程: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 万个浮点数。