1

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

4

1 回答 1

0

好的,我想通了,就这么简单。

shaderProgram.vertexColorAttribute = gl.getUniformLocation(shaderProgram, "aVertexColor"); gl.uniform4fv(shaderProgram.vertexColorAttribute, [1.0, 1.0, 1.0, 1.0]);

于 2013-01-23T11:12:16.750 回答