RotatingCube: Add RotatingCube[.html, .js]
This commit is contained in:
		
							
								
								
									
										7
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							@@ -22,6 +22,13 @@
 | 
			
		||||
         "request": "launch",
 | 
			
		||||
         "reAttach": true,
 | 
			
		||||
         "file": "${workspaceFolder}/Pendulum/Pendulum.html"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
         "name": "RotatingCube",
 | 
			
		||||
         "type": "firefox",
 | 
			
		||||
         "request": "launch",
 | 
			
		||||
         "reAttach": true,
 | 
			
		||||
         "file": "${workspaceFolder}/RotatingCube/RotatingCube.html"
 | 
			
		||||
      }
 | 
			
		||||
   ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										19
									
								
								RotatingCube/RotatingCube.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								RotatingCube/RotatingCube.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
  <head>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <title>Draw cube with specification of face color</title>
 | 
			
		||||
  </head>
 | 
			
		||||
 | 
			
		||||
  <body onload="main()">
 | 
			
		||||
    <canvas id="webgl" width="400" height="400">
 | 
			
		||||
    Please use a browser that supports "canvas"
 | 
			
		||||
    </canvas>
 | 
			
		||||
 | 
			
		||||
    <script src="../lib/webgl-utils.js"></script>
 | 
			
		||||
    <script src="../lib/webgl-debug.js"></script>
 | 
			
		||||
    <script src="../lib/cuon-utils.js"></script>
 | 
			
		||||
    <script src="../lib/cuon-matrix.js"></script>
 | 
			
		||||
    <script src="RotatingCube.js"></script>
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										166
									
								
								RotatingCube/RotatingCube.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								RotatingCube/RotatingCube.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,166 @@
 | 
			
		||||
// ColoredCube.js (c) 2012 matsuda
 | 
			
		||||
 | 
			
		||||
const vertex_shader = `
 | 
			
		||||
  attribute vec4 a_Position;
 | 
			
		||||
  attribute vec4 a_Color;
 | 
			
		||||
  uniform mat4 u_MvpMatrix;
 | 
			
		||||
  varying vec4 v_Color;
 | 
			
		||||
 | 
			
		||||
  void main()
 | 
			
		||||
  {
 | 
			
		||||
    gl_Position = u_MvpMatrix * a_Position;
 | 
			
		||||
    v_Color = a_Color;
 | 
			
		||||
  }	`;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const fragment_shader = `
 | 
			
		||||
  #ifdef GL_ES
 | 
			
		||||
  precision mediump float;
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  varying vec4 v_Color;
 | 
			
		||||
 | 
			
		||||
  void main()
 | 
			
		||||
  {
 | 
			
		||||
    gl_FragColor = v_Color;
 | 
			
		||||
  }	`;
 | 
			
		||||
 | 
			
		||||
function main()
 | 
			
		||||
{
 | 
			
		||||
  // Retrieve <canvas> element
 | 
			
		||||
  var canvas = document.getElementById('webgl');
 | 
			
		||||
 | 
			
		||||
  // Get the rendering context for WebGL
 | 
			
		||||
  var gl = getWebGLContext(canvas);
 | 
			
		||||
  if (!gl)
 | 
			
		||||
  {
 | 
			
		||||
    console.log('Failed to get the rendering context for WebGL');
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Initialize shaders
 | 
			
		||||
  if (!initShaders(gl, vertex_shader, fragment_shader))
 | 
			
		||||
  {
 | 
			
		||||
    console.log('Failed to intialize shaders.');
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Set the vertex information
 | 
			
		||||
  var n = initVertexBuffers(gl);
 | 
			
		||||
  if (n < 0)
 | 
			
		||||
  {
 | 
			
		||||
    console.log('Failed to set the vertex information');
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Set the clear color and enable the depth test
 | 
			
		||||
  gl.clearColor(0.0, 0.0, 0.0, 1.0);
 | 
			
		||||
  gl.enable(gl.DEPTH_TEST);
 | 
			
		||||
 | 
			
		||||
  // Get the storage location of u_MvpMatrix
 | 
			
		||||
  var u_MvpMatrix = gl.getUniformLocation(gl.program, 'u_MvpMatrix');
 | 
			
		||||
  if (!u_MvpMatrix)
 | 
			
		||||
  {
 | 
			
		||||
    console.log('Failed to get the storage location of u_MvpMatrix');
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Set the eye point and the viewing volume
 | 
			
		||||
  var mvpMatrix = new Matrix4();
 | 
			
		||||
  mvpMatrix.setOrtho(-2, 2, -2, 2, -2, 2);
 | 
			
		||||
 | 
			
		||||
  // Pass the model view projection matrix to u_MvpMatrix
 | 
			
		||||
  gl.uniformMatrix4fv(u_MvpMatrix, false, mvpMatrix.elements);
 | 
			
		||||
 | 
			
		||||
  // Clear color and depth buffer
 | 
			
		||||
  gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
 | 
			
		||||
 | 
			
		||||
  // Draw the cube
 | 
			
		||||
  gl.drawElements(gl.TRIANGLES, n, gl.UNSIGNED_BYTE, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function initVertexBuffers(gl)
 | 
			
		||||
{
 | 
			
		||||
  // Create a cube
 | 
			
		||||
  //    v6----- v5
 | 
			
		||||
  //   /|      /|
 | 
			
		||||
  //  v1------v0|
 | 
			
		||||
  //  | |     | |
 | 
			
		||||
  //  | |v7---|-|v4
 | 
			
		||||
  //  |/      |/
 | 
			
		||||
  //  v2------v3
 | 
			
		||||
 | 
			
		||||
  var vertices = new Float32Array([   // Vertex coordinates
 | 
			
		||||
     1.0, 1.0, 1.0,  -1.0, 1.0, 1.0,  -1.0,-1.0, 1.0,   1.0,-1.0, 1.0,  // v0-v1-v2-v3 front
 | 
			
		||||
     1.0, 1.0, 1.0,   1.0,-1.0, 1.0,   1.0,-1.0,-1.0,   1.0, 1.0,-1.0,  // v0-v3-v4-v5 right
 | 
			
		||||
     1.0, 1.0, 1.0,   1.0, 1.0,-1.0,  -1.0, 1.0,-1.0,  -1.0, 1.0, 1.0,  // v0-v5-v6-v1 up
 | 
			
		||||
    -1.0, 1.0, 1.0,  -1.0, 1.0,-1.0,  -1.0,-1.0,-1.0,  -1.0,-1.0, 1.0,  // v1-v6-v7-v2 left
 | 
			
		||||
    -1.0,-1.0,-1.0,   1.0,-1.0,-1.0,   1.0,-1.0, 1.0,  -1.0,-1.0, 1.0,  // v7-v4-v3-v2 down
 | 
			
		||||
     1.0,-1.0,-1.0,  -1.0,-1.0,-1.0,  -1.0, 1.0,-1.0,   1.0, 1.0,-1.0   // v4-v7-v6-v5 back
 | 
			
		||||
  ]);
 | 
			
		||||
 | 
			
		||||
  var colors = new Float32Array([     // Colors
 | 
			
		||||
    0.4, 0.4, 1.0,  0.4, 0.4, 1.0,  0.4, 0.4, 1.0,  0.4, 0.4, 1.0,  // v0-v1-v2-v3 front(blue)
 | 
			
		||||
    0.4, 1.0, 0.4,  0.4, 1.0, 0.4,  0.4, 1.0, 0.4,  0.4, 1.0, 0.4,  // v0-v3-v4-v5 right(green)
 | 
			
		||||
    1.0, 0.4, 0.4,  1.0, 0.4, 0.4,  1.0, 0.4, 0.4,  1.0, 0.4, 0.4,  // v0-v5-v6-v1 up(red)
 | 
			
		||||
    1.0, 1.0, 0.4,  1.0, 1.0, 0.4,  1.0, 1.0, 0.4,  1.0, 1.0, 0.4,  // v1-v6-v7-v2 left
 | 
			
		||||
    1.0, 1.0, 1.0,  1.0, 1.0, 1.0,  1.0, 1.0, 1.0,  1.0, 1.0, 1.0,  // v7-v4-v3-v2 down
 | 
			
		||||
    0.4, 1.0, 1.0,  0.4, 1.0, 1.0,  0.4, 1.0, 1.0,  0.4, 1.0, 1.0   // v4-v7-v6-v5 back
 | 
			
		||||
  ]);
 | 
			
		||||
 | 
			
		||||
  var indices = new Uint8Array([       // Indices of the vertices
 | 
			
		||||
     0, 1, 2,   0, 2, 3,    // front
 | 
			
		||||
     4, 5, 6,   4, 6, 7,    // right
 | 
			
		||||
     8, 9,10,   8,10,11,    // up
 | 
			
		||||
    12,13,14,  12,14,15,    // left
 | 
			
		||||
    16,17,18,  16,18,19,    // down
 | 
			
		||||
    20,21,22,  20,22,23     // back
 | 
			
		||||
  ]);
 | 
			
		||||
 | 
			
		||||
  // Create a buffer object
 | 
			
		||||
  var indexBuffer = gl.createBuffer();
 | 
			
		||||
  if (!indexBuffer)
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
  // Write the vertex coordinates and color to the buffer object
 | 
			
		||||
  if (!initArrayBuffer(gl, vertices, 3, gl.FLOAT, 'a_Position'))
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
  if (!initArrayBuffer(gl, colors, 3, gl.FLOAT, 'a_Color'))
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
  // Write the indices to the buffer object
 | 
			
		||||
  gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
 | 
			
		||||
  gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);
 | 
			
		||||
 | 
			
		||||
  return indices.length;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function initArrayBuffer(gl, data, num, type, attribute)
 | 
			
		||||
{
 | 
			
		||||
  var buffer = gl.createBuffer();   // Create a buffer object
 | 
			
		||||
  if (!buffer)
 | 
			
		||||
  {
 | 
			
		||||
    console.log('Failed to create the buffer object');
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Write date into the buffer object
 | 
			
		||||
  gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
 | 
			
		||||
  gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
 | 
			
		||||
 | 
			
		||||
  // Assign the buffer object to the attribute variable
 | 
			
		||||
  var a_attribute = gl.getAttribLocation(gl.program, attribute);
 | 
			
		||||
  if (a_attribute < 0)
 | 
			
		||||
  {
 | 
			
		||||
    console.log('Failed to get the storage location of ' + attribute);
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  gl.vertexAttribPointer(a_attribute, num, type, false, 0, 0);
 | 
			
		||||
 | 
			
		||||
  // Enable the assignment of the buffer object to the attribute variable
 | 
			
		||||
  gl.enableVertexAttribArray(a_attribute);
 | 
			
		||||
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user