Jika Anda memiliki vertex buffer seperti ini:
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
]
Dan cukup gambarkan seperti apa adanya:
// 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);
Dibutuhkan dua koordinat khusus untuk setiap segmen garis. Dengan vertices
seperti yang didefinisikan di atas, hanya mungkin dua garis dua garis :
Jika Anda memiliki indeks berikut yang ditentukan:
var indices = [
0, 2,
2, 4,
4, 3,
3, 2,
2, 1,
1, 0,
0, 3,
3, 1
]
Dimungkinkan untuk menggambar garis yang memotong simpul yang sama berulang kali. Ini mengurangi redundansi. Jika Anda mengikat buffer indeks dan memberi tahu GPU untuk menggambar segmen garis yang menghubungkan simpul dengan urutan yang ditentukan dalam array tidak valid:
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);
Seseorang dapat menggambar angka yang lebih kompleks tanpa mendefinisikan ulang simpul yang sama berulang-ulang. Ini hasilnya:
Untuk mencapai hasil yang sama tanpa indeks, buffer vertex akan terlihat seperti berikut:
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);
Yang menghasilkan gambar yang sama:
Perhatikan redundansi besar dalam simpul yang disimpan.