Bunun gibi bir tepe tamponu varsa:
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
]
Ve sadece olduğu gibi çizin:
// 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);
Her bir çizgi segmenti için iki tahsis edilmiş koordinat gerektirir. İle vertices
yukarıda tanımlandığı gibi, sadece mümkün olacağını iki çizmek iki satır :
Aşağıdaki dizinleri tanımladıysanız:
var indices = [
0, 2,
2, 4,
4, 3,
3, 2,
2, 1,
1, 0,
0, 3,
3, 1
]
Aynı köşeleri tekrar tekrar kesişen çizgiler çizmek mümkündür. Bu fazlalığı azaltır. Dizin arabelleğini bağlar ve GPU'ya, köşeleri dizin dizisinde belirtilen sıraya göre bağlayan çizgi parçaları çizmesini söylerseniz:
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);
Aynı köşeleri tekrar tekrar tanımlamadan karmaşık şekiller çizilebilir. Sonuç budur:
Endeks olmadan aynı sonucu elde etmek için köşe arabelleği aşağıdaki gibi görünmelidir:
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);
Aynı görüntüde sonuçlanan:
Saklanan köşe noktalarındaki büyük yedekliliğe dikkat edin.