Nếu bạn có một bộ đệm đỉnh như thế này:
var vertices = [
0.0, 0.0, 0.0,
1.0, 0.0, 0.0,
0.0, 0.6, 0.0,
1.0, 0.6, 0.0,
0.5, 1.0, 0.0
]
Và chỉ cần vẽ nó như là:
// Create an empty buffer object
var vertex_buffer = gl.createBuffer();
// Bind appropriate array buffer to it
gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);
// Pass the vertex data to the buffer
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
/* [...] */
// Draw the lines
gl.drawArrays(gl.LINES, 0, 5);
Nó sẽ yêu cầu hai tọa độ dành riêng cho mỗi phân đoạn dòng. Với vertices
định nghĩa như trên, chỉ có thể vẽ hai dòng :
Nếu bạn có các chỉ số sau được xác định:
var indices = [
0, 2,
2, 4,
4, 3,
3, 2,
2, 1,
1, 0,
0, 3,
3, 1
]
Có thể vẽ các đường giao nhau cùng một đỉnh nhiều lần. Điều này làm giảm sự dư thừa. Nếu bạn liên kết bộ đệm chỉ mục và yêu cầu GPU vẽ các đoạn đường nối các đỉnh theo thứ tự được chỉ định trong mảng không đứng đắn:
var index_buffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index_buffer);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
// draw geometry lines by indices
gl.drawElements(gl.LINES, 16, gl.UNSIGNED_SHORT, index_buffer);
Người ta có thể vẽ các hình phức tạp hơn mà không cần xác định lại các đỉnh giống nhau nhiều lần. Đây là kết quả:
Để đạt được kết quả tương tự mà không có chỉ số, bộ đệm đỉnh sẽ trông như sau:
var vertices = [
0.0, 0.0, 0.0,
0.0, 0.6, 0.0,
0.0, 0.6, 0.0,
0.5, 1.0, 0.0,
0.5, 1.0, 0.0,
1.0, 0.6, 0.0,
1.0, 0.6, 0.0,
0.0, 0.6, 0.0,
0.0, 0.6, 0.0,
1.0, 0.0, 0.0,
1.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
1.0, 0.6, 0.0,
1.0, 0.6, 0.0,
1.0, 0.0, 0.0
]
/* [...] */
// Draw the lines
gl.drawArrays(gl.LINES, 0, 16);
Kết quả trong cùng một hình ảnh:
Lưu ý sự dư thừa lớn trong các đỉnh được lưu trữ.