1
//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我如何在webgl中使用stride?
现在我得到这个错误: -
**[.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);
请说明故障在哪里? 谢谢。
由于它的工作。 –