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

Side by Side Diff: samples/GoogleIO-2009/step05.html

Issue 149438: Add Google IO sample. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: '' Created 11 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « samples/GoogleIO-2009/step04.html ('k') | samples/GoogleIO-2009/step06.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 <!--
2 Copyright 2009, Google Inc.
3 All rights reserved.
4
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions are
7 met:
8
9 * Redistributions of source code must retain the above copyright
10 notice, this list of conditions and the following disclaimer.
11 * Redistributions in binary form must reproduce the above
12 copyright notice, this list of conditions and the following disclaimer
13 in the documentation and/or other materials provided with the
14 distribution.
15 * Neither the name of Google Inc. nor the names of its
16 contributors may be used to endorse or promote products derived from
17 this software without specific prior written permission.
18
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 -->
31 <!--
32 Google I/O O3D Sample.
33
34 This sample shows the steps to make a simple frame rate independent game.
35 -->
36 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
37 "http://www.w3.org/TR/html4/loose.dtd">
38 <html>
39 <head>
40 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
41 <title>
42 Google I/O O3D Sample
43 </title>
44 <style type="text/css">
45 html, body {
46 height: 100%;
47 margin: 0;
48 padding: 0;
49 border: none;
50 font-family: Arial, sans-serif;
51 }
52 </style>
53 <!-- Include sample javascript library functions-->
54 <script type="text/javascript" src="../o3djs/base.js"></script>
55
56 <!-- Our javascript code -->
57 <script type="text/javascript">
58 o3djs.require('o3djs.util');
59 o3djs.require('o3djs.math');
60 o3djs.require('o3djs.rendergraph');
61 o3djs.require('o3djs.primitives');
62 o3djs.require('o3djs.material');
63
64 // Events
65 // init() once the page has finished loading.
66 // unload() when the page is unloaded.
67 window.onload = init;
68 window.onunload= unload;
69
70 // constants
71 var MOVE_VELOCITY = 25; // in units per second.
72
73 // global variables
74 var g_o3dElement;
75 var g_o3d;
76 var g_math;
77 var g_client;
78 var g_viewInfo;
79 var g_pack;
80 var g_root;
81 var g_globalParams;
82 var g_o3dWidth;
83 var g_o3dHeight;
84 var g_o3dElement;
85 var g_keyDown = []; // which keys are down by key code.
86 var g_playerTransform;
87 var g_playerXPosition = 0;
88 var g_playerZPosition = 0;
89 var g_eye = [15, 25, 50];
90 var g_target = [0, 10, 0];
91 var g_up = [0, 1, 0];
92 var g_viewMatrix;
93 var g_moveMatrix;
94
95 /**
96 * Updates the projection matrix.
97 */
98 function updateProjection() {
99 g_viewInfo.drawContext.projection = g_math.matrix4.perspective(
100 g_math.degToRad(45), // field of view.
101 g_o3dWidth / g_o3dHeight, // aspect ratio
102 0.1, // Near plane.
103 5000); // Far plane.
104 }
105
106 /**
107 * Given a view matrix computes an movement matrix to make it easy
108 * to move something relative to the camera view in the XZ plane.
109 * @param {!o3djs.math.Matrix4} viewMatrix A view matrix.
110 * @return {!o3djs.math.Matrix4} A movement matrix.
111 */
112 function computeMoveMatrixFromViewMatrix(viewMatrix) {
113 var cameraMatrix = g_math.matrix4.inverse(viewMatrix);
114 var xAxis = g_math.cross([0, 1, 0], cameraMatrix[2].slice(0, 3));
115 var zAxis = g_math.cross(xAxis, [0, 1, 0]);
116 return [
117 xAxis.concat(0),
118 [0, 1, 0, 0],
119 zAxis.concat(0),
120 [0, 0, 0, 1]];
121 }
122
123 /*
124 * Updates the camera.
125 */
126 function updateCamera() {
127 g_viewMatrix = g_math.matrix4.lookAt(g_eye, g_target, g_up);
128 g_viewInfo.drawContext.view = g_viewMatrix;
129 g_moveMatrix = computeMoveMatrixFromViewMatrix(g_viewMatrix);
130 };
131
132 /**
133 * Updates global variables of the client's size if they have changed.
134 */
135 function updateClientSize() {
136 var newWidth = g_client.width;
137 var newHeight = g_client.height;
138 if (g_o3dWidth != newWidth || g_o3dHeight != newHeight) {
139 g_o3dWidth = newWidth;
140 g_o3dHeight = newHeight;
141 updateProjection();
142 }
143 }
144
145 /**
146 * Creates the client area.
147 */
148 function init() {
149 o3djs.util.makeClients(initStep2);
150 }
151
152 /**
153 * Initializes O3D and creates one shape.
154 * @param {Array} clientElements Array of o3d object elements.
155 */
156 function initStep2(clientElements) {
157 // Initializes global variables and libraries.
158 g_o3dElement = clientElements[0];
159 g_o3d = g_o3dElement.o3d;
160 g_math = o3djs.math;
161 g_client = g_o3dElement.client;
162
163 // Creates a pack to manage our resources/assets
164 g_pack = g_client.createPack();
165
166 g_root = g_pack.createObject('Transform');
167
168 g_viewInfo = o3djs.rendergraph.createBasicView(
169 g_pack,
170 g_root,
171 g_client.renderGraphRoot);
172
173 updateCamera();
174
175 var redMaterial = o3djs.material.createBasicMaterial(
176 g_pack,
177 g_viewInfo,
178 [0.2, 1, 0.2, 1]); // green
179
180 var checkerMaterial = o3djs.material.createMaterialFromFile(
181 g_pack, 'shaders/checker.shader', g_viewInfo.performanceDrawList);
182
183 g_globalParams = o3djs.material.createAndBindStandardParams(g_pack);
184 g_globalParams.lightWorldPos.value = [30, 60, 40];
185 g_globalParams.lightColor.value = [1, 1, 1, 1];
186
187 // Create a ground plane.
188 var shape = o3djs.primitives.createPlane(
189 g_pack, checkerMaterial, 100, 100, 10, 10);
190 var transform = g_pack.createObject('Transform');
191 transform.parent = g_root;
192 transform.addShape(shape);
193
194 // Create a cylinder.
195 var shape = o3djs.primitives.createCylinder(
196 g_pack, redMaterial, 2.5, 5, 20, 1,
197 g_math.matrix4.translation([0, 2.5, 0]));
198 var transform = g_pack.createObject('Transform');
199 transform.parent = g_root;
200 transform.addShape(shape);
201
202 g_playerTransform = transform;
203
204 // Setup a render callback for per frame processing.
205 g_client.setRenderCallback(onRender);
206
207 o3djs.event.addEventListener(g_o3dElement, 'keydown', onKeyDown);
208 o3djs.event.addEventListener(g_o3dElement, 'keyup', onKeyUp);
209
210 window.g_finished = true; // for selenium testing.
211 }
212
213 /**
214 * Tracks key down events.
215 * @param {Event} e keyboard event.
216 */
217 function onKeyDown(e) {
218 g_keyDown[e.keyCode] = true;
219 }
220
221 /**
222 * Tracks key up events.
223 * @param {Event} e keyboard event.
224 */
225 function onKeyUp(e) {
226 g_keyDown[e.keyCode] = false;
227 }
228
229 /**
230 * Look at keys.
231 */
232 function handleMoveKeys(elapsedTime) {
233 var directionX = 0;
234 var directionZ = 0;
235
236 if (g_keyDown[37] || g_keyDown[65]) { directionX = -1; }
237 if (g_keyDown[39] || g_keyDown[68]) { directionX = 1; }
238 if (g_keyDown[38] || g_keyDown[87]) { directionZ = -1; }
239 if (g_keyDown[40] || g_keyDown[83]) { directionZ = 1; }
240
241 if (directionX != 0 || directionZ != 0) {
242 var moveTranslation = g_math.matrix4.transformPoint(
243 g_moveMatrix,
244 [MOVE_VELOCITY * directionX * elapsedTime,
245 0,
246 MOVE_VELOCITY * directionZ * elapsedTime]);
247
248 g_playerXPosition += moveTranslation[0];
249 g_playerZPosition += moveTranslation[2];
250
251 g_playerTransform.identity();
252 g_playerTransform.translate(g_playerXPosition, 0, g_playerZPosition);
253 }
254 }
255
256 /**
257 * Called every frame.
258 * @param {!o3d.RenderEvent} renderEvent Rendering Information.
259 */
260 function onRender(renderEvent) {
261 var elapsedTime = renderEvent.elapsedTime;
262
263 updateClientSize();
264 handleMoveKeys(elapsedTime);
265 };
266
267 /**
268 * Remove any callbacks so they don't get called after the page has unloaded.
269 */
270 function unload() {
271 if (g_client) {
272 g_client.cleanup();
273 }
274 }
275 </script>
276 </head>
277 <body>
278 <table style="width: 100%; height:100%;">
279 <tr style="height: 50px;"><td>
280 <div style="width: 100%; height: 50px; font-size: large;">
281 <img src="assets/colorbar.png" width="100%" height="10px"/><br/>
282 Google I/O 2009 O3D Sample
283 </div>
284 </td></tr>
285 <tr style="height: 100%;"><td>
286 <div style="width: 100%; height: 100%;">
287 <div id="o3d" style="width: 100%; height: 100%;"></div>
288 </div>
289 </td></tr>
290 </table>
291 </body>
292 </html>
OLDNEW
« no previous file with comments | « samples/GoogleIO-2009/step04.html ('k') | samples/GoogleIO-2009/step06.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698