WebGL1 drawArray与drawElemnt

104 阅读1分钟

drawElemnt

var verticesColors = new Float32Array([
  // Vertex coordinates and color
  1.0,1.0,1.0,1.0,1.0,1.0, // v0 White
  -1.0,1.0,1.0,1.0,0.0,1.0, // v1 Magenta
  -1.0,-1.0,1.0,1.0,0.0,0.0, // v2 Red
  1.0,-1.0,1.0,1.0,1.0,0.0, // v3 Yellow
  1.0,-1.0,-1.0,0.0,1.0,0.0, // v4 Green
  1.0,1.0,-1.0,0.0,1.0,1.0, // v5 Cyan
  -1.0,1.0,-1.0,0.0,0.0,1.0, // v6 Blue
  -1.0,-1.0,-1.0,0.0,0.0,0.0 // v7 Black
]);

var vertexColorBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexColorBuffer);
gl.bufferData(gl.ARRAY_BUFFER, verticesColors, gl.STATIC_DRAW);
var FSIZE = verticesColors.BYTES_PER_ELEMENT;

var a_Position = gl.getAttribLocation(gl.program, "a_Position");
gl.vertexAttribPointer(a_Position, 3, gl.FLOAT, false, FSIZE * 6, 0);
gl.enableVertexAttribArray(a_Position);

var a_Color = gl.getAttribLocation(gl.program, "a_Color");
gl.vertexAttribPointer(a_Color,    3, gl.FLOAT, false, FSIZE * 6, FSIZE * 3);
gl.enableVertexAttribArray(a_Color);
  • drawArray
// Indices of the vertices
var indices = new Uint8Array([0,1,2,0,2,3, // front
  0,3,4,0,4,5, // right
  0,5,6,0,6,1, // up
  1,6,7,1,7,2, // left
  7,4,3,7,3,2, // down
  4,7,6,4,6,5 // back
]);
//index的话 必须经过这个api
var indexBuffer = gl.createBuffer(); //index 
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer); //bind buffer
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW); // bufferdata
  • drawElements
gl.drawElements(gl.TRIANGLES, n, gl.UNSIGNED_BYTE, 0); //这里的n是index.count 

drawArray

var verticesColors = new Float32Array([
 0.0,  0.5,  1.0,  0.0,  0.0, 
-0.5, -0.5,  0.0,  1.0,  0.0, 
 0.5, -0.5,  0.0,  0.0,  1.0, 
]);
var n = 3;
var vertexColorBuffer = gl.createBuffer();  
gl.bindBuffer(gl.ARRAY_BUFFER, vertexColorBuffer); //bind的是createbuffer
gl.bufferData(gl.ARRAY_BUFFER, verticesColors, gl.STATIC_DRAW); //data是数组 data是float32array

var FSIZE = verticesColors.BYTES_PER_ELEMENT;
var a_Position = gl.getAttribLocation(gl.program, 'a_Position');//用字符来获取缓冲区
gl.enableVertexAttribArray(a_Position);   //启动吗?
gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, FSIZE * 5, 0);//数据指向缓冲区 2是读取数 FSIZE * 5是总数 FSIZE * 2是偏移数

var a_Color = gl.getAttribLocation(gl.program, 'a_Color');
gl.enableVertexAttribArray(a_Color);  // Enable the assignment of the buffer object
gl.vertexAttribPointer(a_Color, 3, gl.FLOAT, false, FSIZE * 5, FSIZE * 2); //3 是读取数 FSIZE * 5是总数 FSIZE * 2是偏移数
  • drawArray
gl.drawArray(gl.TRIANGLES, 0, verticesColors.length/3);