Created
December 27, 2014 20:42
-
-
Save LukeDavitt/9b0a607f54ada0411b8b to your computer and use it in GitHub Desktop.
Sample Gist
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var canvas; | |
var gl; | |
var NumVertices = 36; | |
var points = []; | |
var colors = []; | |
var xAxis = 0; | |
var yAxis = 1; | |
var zAxis = 2; | |
var axis = 0; | |
var theta = [ 0, 0, 0 ]; | |
var thetaLoc; | |
window.onload = function init() | |
{ | |
canvas = document.getElementById( "gl-canvas" ); | |
gl = WebGLUtils.setupWebGL( canvas ); | |
if ( !gl ) { alert( "WebGL isn't available" ); } | |
colorCube(); | |
gl.viewport( 0, 0, canvas.width, canvas.height ); | |
gl.clearColor( 1.0, 1.0, 1.0, 1.0 ); | |
gl.enable(gl.DEPTH_TEST); | |
// | |
// Load shaders and initialize attribute buffers | |
// | |
var program = initShaders( gl, "vertex-shader", "fragment-shader" ); | |
gl.useProgram( program ); | |
var cBuffer = gl.createBuffer(); | |
gl.bindBuffer( gl.ARRAY_BUFFER, cBuffer ); | |
gl.bufferData( gl.ARRAY_BUFFER, flatten(colors), gl.STATIC_DRAW ); | |
var vColor = gl.getAttribLocation( program, "vColor" ); | |
gl.vertexAttribPointer( vColor, 4, gl.FLOAT, false, 0, 0 ); | |
gl.enableVertexAttribArray( vColor ); | |
var vBuffer = gl.createBuffer(); | |
gl.bindBuffer( gl.ARRAY_BUFFER, vBuffer ); | |
gl.bufferData( gl.ARRAY_BUFFER, flatten(points), gl.STATIC_DRAW ); | |
var vPosition = gl.getAttribLocation( program, "vPosition" ); | |
gl.vertexAttribPointer( vPosition, 3, gl.FLOAT, false, 0, 0 ); | |
gl.enableVertexAttribArray( vPosition ); | |
thetaLoc = gl.getUniformLocation(program, "theta"); | |
//event listeners for buttons | |
/*document.getElementById( "xButton" ).onclick = function () { | |
axis = xAxis; | |
}; | |
document.getElementById( "yButton" ).onclick = function () { | |
axis = yAxis; | |
}; | |
document.getElementById( "zButton" ).onclick = function () { | |
axis = zAxis; | |
};*/ | |
render(); | |
} | |
function colorCube() | |
{ | |
quad( 1, 0, 3, 2 ); | |
quad( 2, 3, 7, 6 ); | |
quad( 3, 0, 4, 7 ); | |
quad( 6, 5, 1, 2 ); | |
quad( 4, 5, 6, 7 ); | |
quad( 5, 4, 0, 1 ); | |
} | |
function quad(a, b, c, d) | |
{ | |
var vertices = [ | |
vec3( -0.5, -0.5, 0.5 ), | |
vec3( -0.5, 0.5, 0.5 ), | |
vec3( 0.5, 0.5, 0.5 ), | |
vec3( 0.5, -0.5, 0.5 ), | |
vec3( -0.5, -0.5, -0.5 ), | |
vec3( -0.5, 0.5, -0.5 ), | |
vec3( 0.5, 0.5, -0.5 ), | |
vec3( 0.5, -0.5, -0.5 ) | |
]; | |
var vertexColors = [ | |
[ 0.0, 0.0, 0.0, 1.0 ], // black | |
[ 1.0, 0.0, 0.0, 1.0 ], // red | |
[ 1.0, 1.0, 0.0, 1.0 ], // yellow | |
[ 0.0, 1.0, 0.0, 1.0 ], // green | |
[ 0.0, 0.0, 1.0, 1.0 ], // blue | |
[ 1.0, 0.0, 1.0, 1.0 ], // magenta | |
[ 1.0, 1.0, 1.0, 1.0 ], // white | |
[ 0.0, 1.0, 1.0, 1.0 ] // cyan | |
]; | |
// We need to parition the quad into two triangles in order for | |
// WebGL to be able to render it. In this case, we create two | |
// triangles from the quad indices | |
//vertex color assigned by the index of the vertex | |
var indices = [ a, b, c, a, c, d ]; | |
for ( var i = 0; i < indices.length; ++i ) { | |
points.push( vertices[indices[i]] ); | |
colors.push( vertexColors[indices[i]] ); | |
// for solid colored faces use | |
//colors.push(vertexColors[a]); | |
} | |
} | |
function render() | |
{ | |
gl.clear( gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); | |
theta[yAxis] += 1.0; | |
theta[zAxis] += 1.0; | |
theta[xAxis] += 1.0; | |
gl.uniform3fv(thetaLoc, theta); | |
gl.drawArrays( gl.TRIANGLES, 0, NumVertices ); | |
requestAnimFrame( render ); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment