WEBGL - Demo
by Ben Clayton
HTML
<script>
/* This could have been an external js file but the file was hosted with wrong protocol
http://www.learnopengles.com/wordpress/wp-content/uploads/2011/06/webgl-utils.js
*/
/*
* glMatrix.js - High performance matrix and vector operations for WebGL
* version 0.9.6
*/
/*
* Copyright (c) 2011 Brandon Jones
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
// Fallback for systems that don't support WebGL
if(typeof Float32Array != 'undefined') {
glMatrixArrayType = Float32Array;
} else if(typeof WebGLFloatArray != 'undefined') {
glMatrixArrayType = WebGLFloatArray; // This is officially deprecated and should dissapear in future revisions.
} else {
glMatrixArrayType = Array;
}
/*
* vec3 - 3 Dimensional Vector
*/
var vec3 = {};
/*
* vec3.create
* Creates a new instance of a vec3 using the default array type
* Any javascript array containing at least 3 numeric elements can serve as a vec3
*
* Params:
* vec - Optional, vec3 containing values to initialize with
*
* Returns:
* New vec3
*/
vec3.create = function(vec) {
var dest = new glMatrixArrayType(3);
if(vec) {
dest[0] = vec[0];
dest[1] =...
JavaScript
/**
* Lesson_one.js
*/
// We make use of the WebGL utility library, which was downloaded from here:
// https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/demos/common/webgl-utils.js
//
// It defines two functions which we use here:
//
// // Creates a WebGL context.
// WebGLUtils.setupWebGL(canvas);
//
// Requests an animation callback. See: https://developer.mozilla.org/en/DOM/window.requestAnimationFrame
// window.requestAnimFrame(callback, node);
//
// We also make use of the glMatrix file which can be downloaded from here:
// http://code.google.com/p/glmatrix/source/browse/glMatrix.js
//
/** Hold a reference to the WebGLContext */
var gl = null;
/** Hold a reference to the canvas DOM object. */
var canvas = null;
/**
* Store the model matrix. This matrix is used to move models from object space (where each model can be thought
* of being located at the center of the universe) to world space.
*/
var modelMatrix = mat4.create();
/**
* Store the view matrix. This can be thought of as our camera. This matrix transforms world space to eye space;
* it positions things relative to our eye.
*/
var viewMatrix = mat4.create();
/** Store the projection matrix. This is used to project the scene onto a 2D viewport. */
var projectionMatrix = mat4.create();
/** Allocate storage for the final combined matrix. This will be passed into the shader program. */
var mvpMatrix = mat4.create();
/** Store our model data in a Float32Array buffer. */
var trianglePositions;
var triangle1Colors;
var triangle2Colors;
var triangle3Colors;
/** Store references to the vertex buffer objects (VBOs) that will be created. */
var trianglePositionBufferObject;
var triangleColorBufferObject1;
var triangleColorBufferObject2;
var triangleColorBufferObject3;
/** This will be used to pass in the transformation matrix. */
var mvpMatrixHandle;
/** This will be used to pass in model position information. */
var positionHandle;
/** This will be used to pass in model...