对每个顶点使用相同的颜色(运行时可更改)



我刚刚在这里完成了本教程: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万个点,每个点总是相同的颜色。所以我真的不想创建 400 万个浮点数,而我只需要 4 个浮点数。

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

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

最新更新