//Defining geometry
var vertices = [
+0.0,+0.0,+0.0,
+0.0,+0.0,+1.0,
-0.5,+0.0,+0.0,
+1.0,+0.0,+0.0,
-0.5,-0.5,+0.0,
+0.0,+1.0,+0.0,
+0.5,+0.5,+0.0,
+1.0,+0.0,+1.0,
+0.5,+0.0,+0.0,
+1.0,+1.0,+0.0,
-0.5,+0.5,+0.0
+1.0,+0.0,+1.0
];
indices = [3,4,0,0,2,1,5,0,1];
var VextexBuffer = webgl.createBuffer();
webgl.bindBuffer(webgl.ARRAY_BUFFER, VextexBuffer);
webgl.bufferData(webgl.ARRAY_BUFFER, new Float32Array(vertices), webgl.STATIC_DRAW);
var coord = webgl.getAttribLocation(shaderProgram,"coordinates");
webgl.vertexAttribPointer(coord, 3, webgl.FLOAT, false ,6 * 4,0);
webgl.enableVertexAttribArray(coord);
var color = webgl.getAttribLocation(shaderProgram, "color");
webgl.vertexAttribPointer(color, 3, webgl.FLOAT, false ,6 * 4,3 * 4);
webgl.enableVertexAttribArray(color);
var IndexBuffer = webgl.createBuffer();
webgl.bindBuffer(webgl.ELEMENT_ARRAY_BUFFER, IndexBuffer);
webgl.bufferData(webgl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), webgl.STATIC_DRAW);
我希望使用VertexAttribPointer方法中的stride来使用单个VBO来存储顶点和颜色数据,而不是使用2个VBO,但问题在于我不知道javascript中float的大小。所以我假设它是4。
现在我遇到了这个错误:
**[.CommandBufferContext]GL ERROR :GL_INVALID_OPERATION : glDrawElements:
attempt to access out of range vertices in attribute 1**
我认为问题出在:
webgl.vertexAttribPointer(coord, 3, webgl.FLOAT, false ,6 * 4,0);
并且:-
webgl.vertexAttribPointer(color, 3, webgl.FLOAT, false ,6 * 4,3 * 4);
请告诉我故障出在哪里? 谢谢。