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

时间:2013-01-23 10:29:10

标签: opengl webgl

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

1 个答案:

答案 0 :(得分:0)

好吧我明白了,就像它一样简单。

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