rotating cube
This commit is contained in:
parent
e8af0755bc
commit
7edddc0e57
|
@ -140,10 +140,36 @@ function initBuffers(gl: any) {
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
|
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
|
||||||
// Now create an array of positions for the square.
|
// Now create an array of positions for the square.
|
||||||
const positions = [
|
const positions = [
|
||||||
-1.0, 1.0,
|
// Front face
|
||||||
1.0, 1.0,
|
-1.0, -1.0, 1.0,
|
||||||
-1.0, -1.0,
|
1.0, -1.0, 1.0,
|
||||||
1.0, -1.0,
|
1.0, 1.0, 1.0,
|
||||||
|
-1.0, 1.0, 1.0,
|
||||||
|
// Back face
|
||||||
|
-1.0, -1.0, -1.0,
|
||||||
|
-1.0, 1.0, -1.0,
|
||||||
|
1.0, 1.0, -1.0,
|
||||||
|
1.0, -1.0, -1.0,
|
||||||
|
// Top face
|
||||||
|
-1.0, 1.0, -1.0,
|
||||||
|
-1.0, 1.0, 1.0,
|
||||||
|
1.0, 1.0, 1.0,
|
||||||
|
1.0, 1.0, -1.0,
|
||||||
|
// Bottom face
|
||||||
|
-1.0, -1.0, -1.0,
|
||||||
|
1.0, -1.0, -1.0,
|
||||||
|
1.0, -1.0, 1.0,
|
||||||
|
-1.0, -1.0, 1.0,
|
||||||
|
// Right face
|
||||||
|
1.0, -1.0, -1.0,
|
||||||
|
1.0, 1.0, -1.0,
|
||||||
|
1.0, 1.0, 1.0,
|
||||||
|
1.0, -1.0, 1.0,
|
||||||
|
// Left face
|
||||||
|
-1.0, -1.0, -1.0,
|
||||||
|
-1.0, -1.0, 1.0,
|
||||||
|
-1.0, 1.0, 1.0,
|
||||||
|
-1.0, 1.0, -1.0,
|
||||||
];
|
];
|
||||||
// Now pass the list of positions into WebGL to build the
|
// Now pass the list of positions into WebGL to build the
|
||||||
// shape. We do this by creating a Float32Array from the
|
// shape. We do this by creating a Float32Array from the
|
||||||
|
@ -153,20 +179,54 @@ function initBuffers(gl: any) {
|
||||||
new Float32Array(positions),
|
new Float32Array(positions),
|
||||||
gl.STATIC_DRAW);
|
gl.STATIC_DRAW);
|
||||||
|
|
||||||
const colors = [
|
const faceColors = [
|
||||||
1.0, 1.0, 1.0, 1.0,
|
[1.0, 1.0, 1.0, 1.0],
|
||||||
1.0, 0.0, 0.0, 1.0,
|
[1.0, 0.0, 0.0, 1.0],
|
||||||
0.0, 1.0, 0.0, 1.0,
|
[0.0, 1.0, 0.0, 1.0],
|
||||||
0.0, 0.0, 1.0, 1.0,
|
[0.0, 0.0, 1.0, 1.0],
|
||||||
|
[1.0, 1.0, 0.0, 1.0],
|
||||||
|
[1.0, 0.0, 1.0, 1.0],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// Convert the array of colors into a table for all the vertices.
|
||||||
|
|
||||||
|
let colors: any = [];
|
||||||
|
|
||||||
|
for (let j = 0; j < faceColors.length; ++j) {
|
||||||
|
const c = faceColors[j];
|
||||||
|
// Repeat each color four times for the four vertices of the face
|
||||||
|
colors = colors.concat(c, c, c, c);
|
||||||
|
}
|
||||||
|
|
||||||
const colorBuffer = gl.createBuffer();
|
const colorBuffer = gl.createBuffer();
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);
|
gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);
|
||||||
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);
|
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);
|
||||||
|
|
||||||
|
const indexBuffer = gl.createBuffer();
|
||||||
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
|
||||||
|
|
||||||
|
// This array defines each face as two triangles, using the
|
||||||
|
// indices into the vertex array to specify each triangle's
|
||||||
|
// position.
|
||||||
|
|
||||||
|
const indices = [
|
||||||
|
0, 1, 2, 0, 2, 3,
|
||||||
|
4, 5, 6, 4, 6, 7,
|
||||||
|
8, 9, 10, 8, 10, 11,
|
||||||
|
12, 13, 14, 12, 14, 15,
|
||||||
|
16, 17, 18, 16, 18, 19,
|
||||||
|
20, 21, 22, 20, 22, 23,
|
||||||
|
];
|
||||||
|
|
||||||
|
// Now send the element array to GL
|
||||||
|
|
||||||
|
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,
|
||||||
|
new Uint16Array(indices), gl.STATIC_DRAW);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
position: positionBuffer,
|
position: positionBuffer,
|
||||||
color: colorBuffer,
|
color: colorBuffer,
|
||||||
|
indices: indexBuffer,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,7 +285,7 @@ function drawScene(gl: any, programInfo: any, buffers: any, deltaTime: number) {
|
||||||
// Tell WebGL how to pull out the positions from the position
|
// Tell WebGL how to pull out the positions from the position
|
||||||
// buffer into the vertexPosition attribute.
|
// buffer into the vertexPosition attribute.
|
||||||
{
|
{
|
||||||
const numComponents = 2;
|
const numComponents = 3;
|
||||||
const type = gl.FLOAT;
|
const type = gl.FLOAT;
|
||||||
const normalize = false;
|
const normalize = false;
|
||||||
const stride = 0;
|
const stride = 0;
|
||||||
|
@ -262,6 +322,9 @@ function drawScene(gl: any, programInfo: any, buffers: any, deltaTime: number) {
|
||||||
programInfo.attribLocations.vertexColor);
|
programInfo.attribLocations.vertexColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tell WebGL which indices to use to index the vertices
|
||||||
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffers.indices);
|
||||||
|
|
||||||
// Tell WebGL to use our program when drawing
|
// Tell WebGL to use our program when drawing
|
||||||
gl.useProgram(programInfo.program);
|
gl.useProgram(programInfo.program);
|
||||||
// Set the shader uniforms
|
// Set the shader uniforms
|
||||||
|
@ -280,5 +343,12 @@ function drawScene(gl: any, programInfo: any, buffers: any, deltaTime: number) {
|
||||||
gl.drawArrays(gl.TRIANGLE_STRIP, offset, vertexCount);
|
gl.drawArrays(gl.TRIANGLE_STRIP, offset, vertexCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const vertexCount = 36;
|
||||||
|
const type = gl.UNSIGNED_SHORT;
|
||||||
|
const offset = 0;
|
||||||
|
gl.drawElements(gl.TRIANGLES, vertexCount, type, offset);
|
||||||
|
}
|
||||||
|
|
||||||
squareRotation += deltaTime;
|
squareRotation += deltaTime;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue