Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(385)

Unified Diff: samples/o3d-webgl-samples/vertex-shader-animation.html

Issue 2821003: o3d-webgl: vertex shader and vertex animation demo (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: '' Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « samples/o3d-webgl-samples/vertex-shader.html ('k') | samples/shaders/phong-vertex-anim-glsl.shader » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: samples/o3d-webgl-samples/vertex-shader-animation.html
===================================================================
--- samples/o3d-webgl-samples/vertex-shader-animation.html (revision 0)
+++ samples/o3d-webgl-samples/vertex-shader-animation.html (revision 0)
@@ -0,0 +1,203 @@
+<!--
+Copyright 2009, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<!--
+O3D Vertex Shader Animation Example.
+
+Demonstrates using a vertex shader for simple animation. The shader moves the
+vertices in a sin wave based on the parameter "time" and the world position
+of the vertices.
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<title>
+Vertex Shader Animation
+</title>
+<style type="text/css">
+ html, body {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ border: none;
+ }
+</style>
+<script type="text/javascript" src="../o3d-webgl/base.js"></script>
+<script type="text/javascript" src="../o3djs/base.js"></script>
+<script type="text/javascript" id="o3dscript">
+o3djs.base.o3d = o3d;
+o3djs.require('o3djs.webgl');
+o3djs.require('o3djs.util');
+o3djs.require('o3djs.math');
+o3djs.require('o3djs.rendergraph');
+o3djs.require('o3djs.primitives');
+o3djs.require('o3djs.material');
+
+// global variables
+var g_o3d;
+var g_o3dElement;
+var g_math;
+var g_client;
+var g_pack;
+var g_viewInfo;
+var g_timeParam;
+
+/**
+ * Creates the client area.
+ */
+function init() {
+ // These are here so that they are visible to both the browser (so
+ // selenium sees them) and the embedded V8 engine.
+ window.g_clock = 0;
+ window.g_timeMult = 1;
+ window.g_finished = false; // for selenium testing.
+
+ // Comment out the line below to run the sample in the browser
+ // JavaScript engine. This may be helpful for debugging.
+ o3djs.util.setMainEngine(o3djs.util.Engine.V8);
+ o3djs.webgl.makeClients(initStep2);
+}
+
+/**
+ * Initializes O3D, loads the effect, and creates the quads.
+ * @param {Array} clientElements Array of o3d object elements.
+ */
+function initStep2(clientElements) {
+ // Initialize global variables and libraries.
+ g_o3dElement = clientElements[0];
+ g_o3d = g_o3dElement.o3d;
+ g_math = o3djs.math;
+
+ // Set window.g_client as well. Otherwise when the sample runs in
+ // V8, selenium won't be able to find this variable (it can only see
+ // the browser environment).
+ window.g_client = g_client = g_o3dElement.client;
+
+ // Create a pack to manage our resources/assets
+ g_pack = g_client.createPack();
+
+ // Create the render graph for a view.
+ g_viewInfo = o3djs.rendergraph.createBasicView(
+ g_pack,
+ g_client.root,
+ g_client.renderGraphRoot);
+
+ // Create a material.
+ var material = o3djs.material.createMaterialFromFile(
+ g_pack,
+ '../shaders/phong-vertex-anim-glsl.shader',
+ g_viewInfo.performanceDrawList);
+
+ // Set the material parameters.
+ material.getParam('lightWorldPos').value = [-40, 100, 0];
+ material.getParam('lightIntensity').value = [1, 1, 1, 1];
+ material.getParam('ambientIntensity').value = [0.1, 0.1, 0.1, 1];
+ material.getParam('ambient').value = [1, 1, 1, 1];
+ material.getParam('diffuse').value = [1, 1, 1, 1];
+ material.getParam('specular').value = [1, 1, 1, 1];
+ material.getParam('shininess').value = 50;
+
+ g_timeParam = material.getParam('time');
+
+ // Create the view matrix which tells the camera which way to point to.
+ var eye = [10, 50, 20];
+ var target = [2, 0, -2];
+ var up = [0, 0, -1];
+ var view_matrix = g_math.matrix4.lookAt(eye, target, up);
+
+ g_viewInfo.drawContext.view = view_matrix;
+
+ var shape = o3djs.primitives.createPlane(g_pack, material,
+ 10, 10, 100, 100);
+ for (var xx = 0; xx < 5; xx++) {
+ for (var yy = 0; yy < 4; yy++) {
+ var index = yy * 3 + xx;
+
+ // Make a transform for each quad.
+ var transform = g_pack.createObject('Transform');
+ transform.translate((xx - 2) * 12, 0, (2 - yy) * -12);
+ transform.addShape(shape);
+ transform.parent = g_client.root;
+ transform.createParam('diffuse', 'ParamFloat4').value = [xx * 0.2,
+ yy * 0.25,
+ 0.5,
+ 1];
+ }
+ }
+
+ // Setup an onrender callback for animation.
+ g_client.setRenderCallback(onrender);
+
+ window.g_finished = true; // for selenium testing.
+}
+
+function updateProjectionMatrix() {
+ // Create our projection matrix, with a vertical field of view of 45 degrees
+ // a near clipping plane of 0.1 and far clipping plane of 100.
+ g_viewInfo.drawContext.projection = g_math.matrix4.perspective(
+ g_math.degToRad(45),
+ g_client.width / g_client.height,
+ 0.1,
+ 100);
+}
+
+// spin the camera.
+function onrender(render_event) {
+ // Get the number of seconds since the last render.
+ var elapsedTime = render_event.elapsedTime;
+ // Update g_clock in the browser and cache a V8 copy that can be
+ // accessed efficiently. g_clock must be in the browser for selenium.
+ var clock = window.g_clock + elapsedTime * window.g_timeMult;
+ window.g_clock = clock;
+
+ updateProjectionMatrix();
+
+ g_timeParam.value = clock * 4;
+}
+
+function unload() {
+ if (g_client) {
+ g_client.cleanup();
+ }
+}
+
+</script>
+</head>
+<body onload="init()" onunload="unload()">
+<h1>Vertex Shader Animation Example</h1>
+<!-- Start of O3D plugin -->
+<div id="o3d" style="width: 100%; height: 80%"></div>
+<!-- End of O3D plugin -->
+</body>
+</html>
« no previous file with comments | « samples/o3d-webgl-samples/vertex-shader.html ('k') | samples/shaders/phong-vertex-anim-glsl.shader » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698