function geometriaPiramide(gl) {
let A = [ 0.0, 0.5, 0.0 ];
let B = [ -0.5, -0.5, 0.5 ];
let C = [ 0.5, -0.5, 0.5 ];
let D = [ 0.0, -0.5, -0.5 ];
let posicao = new Float32Array([
...A, ...B, ...C,
...A, ...C, ...D,
...A, ...D, ...B,
...B, ...C, ...D
]);
let textura = new Float32Array([
0.5, 1, 0, 0, 1, 0,
0.5, 1, 0, 0, 1, 0,
0.5, 1, 0, 0, 1, 0,
0, 1, 1, 1, 1, 0,
0, 0
]);
let index = new Int16Array([
0, 1, 2,
3, 4, 5,
6, 7, 8,
9, 10, 11
]);
let prog = createProgram(gl, vertexShader, fragmentShader, [["a_posicao",0], ["a_textura",1]]);
let vao = gl.createVertexArray();
gl.bindVertexArray(vao);
gl.enableVertexAttribArray(0);
gl.enableVertexAttribArray(1);
let posicao_vbo = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, posicao_vbo);
gl.bufferData(gl.ARRAY_BUFFER, posicao, gl.STATIC_DRAW);
gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
let textura_vbo = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, textura_vbo);
gl.bufferData(gl.ARRAY_BUFFER, textura, gl.STATIC_DRAW);
gl.vertexAttribPointer(1, 2, gl.FLOAT, false, 0, 0);
let ind_vbo = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ind_vbo);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, index, gl.STATIC_DRAW);
function draw(uniforms) {
gl.bindVertexArray(vao);
gl.useProgram(prog);
gl.uniformMatrix4fv(gl.getUniformLocation(prog, "model"), false, uniforms.model);
gl.uniformMatrix4fv(gl.getUniformLocation(prog, "view"), false, uniforms.view);
gl.uniformMatrix4fv(gl.getUniformLocation(prog, "projection"), false, uniforms.projection);
gl.uniform1i(gl.getUniformLocation(prog, "u_texture"), 0);
gl.drawElements(gl.TRIANGLES, index.length, gl.UNSIGNED_SHORT, 0);
}
return { draw };
}