다음과 같은 정점 버퍼가있는 경우 :
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
]
그리고 그대로 그대로 그립니다.
// 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);
각 선분에 대해 두 개의 전용 좌표가 필요합니다. (가)와 함께 vertices
위의 정의, 그것은 단지 가능한 것이 그리 두 줄을 :
다음 지수가 정의 된 경우 :
var indices = [
0, 2,
2, 4,
4, 3,
3, 2,
2, 1,
1, 0,
0, 3,
3, 1
]
동일한 꼭짓점을 반복해서 교차하는 선을 그릴 수 있습니다. 이것은 중복성을 줄입니다. 인덱스 버퍼를 바인딩하고 GPU가 indecies 배열에 지정된 순서로 정점을 연결하는 선분을 그리도록 지시하는 경우 :
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);
동일한 정점을 반복해서 재정의하지 않고도 복잡한 그림을 그릴 수 있습니다. 결과는 다음과 같습니다.
인덱스없이 동일한 결과를 얻으려면 정점 버퍼는 다음과 같아야합니다.
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);
동일한 이미지가 생성됩니다.
저장된 정점의 큰 중복성을 주목하십시오.