summaryrefslogtreecommitdiffstats
path: root/o3d/samples/customcamera.html
diff options
context:
space:
mode:
Diffstat (limited to 'o3d/samples/customcamera.html')
-rw-r--r--o3d/samples/customcamera.html405
1 files changed, 0 insertions, 405 deletions
diff --git a/o3d/samples/customcamera.html b/o3d/samples/customcamera.html
deleted file mode 100644
index e3c7538..0000000
--- a/o3d/samples/customcamera.html
+++ /dev/null
@@ -1,405 +0,0 @@
-<!--
-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 Tutorial B4
-
-This tutorial shows how we generate a simple cube mesh
-and view it using a dynamically generated camera which can be animated.
-
-We also show how to dynamically change the perspective matrix
-to adjust to the correct aspect ratio as the o3d window is resized.
-
-The cube can be animated along the target's y-axis and the animation is
-done every time a frame is rendered.
--->
-<!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>
-Tutorial B4: Cameras and events
-</title>
-<style type="text/css">
- html, body {
- height: 100%;
- margin: 0;
- padding: 0;
- border: none;
- }
-</style>
-<!-- Our javascript code -->
-<script type="text/javascript" src="o3djs/base.js"></script>
-<script type="text/javascript" id="o3dscript">
-o3djs.require('o3djs.util');
-o3djs.require('o3djs.math');
-o3djs.require('o3djs.rendergraph');
-o3djs.require('o3djs.primitives');
-o3djs.require('o3djs.material');
-
-// Events
-// Run the init() function once the page has finished loading.
-// unload() when the page is unloaded.
-window.onload = init;
-window.onunload = unload;
-
-// global variables
-var g_o3d;
-var g_math;
-var g_client;
-var g_pack;
-var g_viewInfo;
-var g_o3dElement;
-var g_o3dWidth = -1;
-var g_o3dHeight = -1;
-
-// Our view and projection matrices
-// The view matrix transforms objects from world space to view space.
-var g_viewMatrix;
-// The projection matrix projects objects from view space to the screen.
-var g_projMatrix;
-
-// Animation varibles
-
-// Boolean flag that signals whether animation is on.
-var g_animate;
-// Current angle
-var g_animateAngle;
-
-/**
- * Creates our client area by looking for <div>s with an id that starts with
- * "o3d".
- */
-function init() {
- o3djs.util.makeClients(initStep2);
-}
-
-/**
- * Initializes O3D, loads the effect, and draws the cube.
- * @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;
- 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);
-
- // Reset animation variables.
- g_animate = false;
- g_animateAngle = 0;
-
- // Create a material.
- var myMaterial = o3djs.material.createMaterialFromFile(
- g_pack,
- 'shaders/vertex-color.shader',
- g_viewInfo.performanceDrawList);
-
- // Create a cube.
- var cube = o3djs.primitives.createRainbowCube(g_pack, myMaterial, 1);
-
- setDefaultCameraValues();
- setCamera();
-
- // Generate the projection and viewProjection matrices based
- // on the plugin size by calling Resize().
- resize();
-
- // Attach the cube to the root of the transform graph.
- var root = g_client.root;
- root.addShape(cube);
-
-
- // Set our render callback for animation.
- // This sets a function to be executed every time a frame is rendered.
- g_client.setRenderCallback(onrender);
-}
-
-// Generates the projection matrix based on the size of the g_o3d plugin
-// and calculates the view-projection matrix.
-function resize() {
- var newWidth = g_client.width;
- var newHeight = g_client.height;
-
- if (newWidth != g_o3dWidth || newHeight != g_o3dHeight) {
- g_o3dWidth = newWidth;
- g_o3dHeight = newHeight;
-
- // 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_projMatrix = g_math.matrix4.perspective(
- g_math.degToRad(45),
- g_o3dWidth / g_o3dHeight,
- 0.1,
- 100);
-
- // update our view projection matrix
- setViewProjection();
- }
-}
-
-// Sets the view and projection matrices.
-function setViewProjection() {
- g_viewInfo.drawContext.view = g_viewMatrix;
- g_viewInfo.drawContext.projection = g_projMatrix;
-}
-
-// Sets the default camera values and updates the view matrix
-function setDefaultCameraValues() {
- var myForm = document.defaultForm;
-
- // default eye position = (2, 2, 4)
- myForm.eyeX.value = '2.0';
- myForm.eyeY.value = '1.0';
- myForm.eyeZ.value = '4.0';
-
- // default target position = (0, 0, 0)
- // (ie centre of the cube)
- myForm.targetX.value = '0.0';
- myForm.targetY.value = '0.0';
- myForm.targetZ.value = '0.0';
-
- // default up vector = (0, 1, 0)
- // (this tells the renderer which direction is 'up')
- // in this case, we define the positive y-axis to be 'up'.
- myForm.upX.value = '0.0';
- myForm.upY.value = '1.0';
- myForm.upZ.value = '0.0';
-
- // update the view matrix
- setCamera();
-}
-
-// Updates the view matrix using the current camera parameters
-function setCamera() {
- // Create our view matrix using the target, eye, and up vectors in the form
- // and using the lookAt(..)
- // helper function to create the matrix.
- var myForm = document.defaultForm;
-
- // Eye-position, this is where our camera is at.
- var eye = [parseFloat(myForm.eyeX.value),
- parseFloat(myForm.eyeY.value),
- parseFloat(myForm.eyeZ.value)];
-
- // Target, this is where our camera is pointed at.
- var target = [parseFloat(myForm.targetX.value),
- parseFloat(myForm.targetY.value),
- parseFloat(myForm.targetZ.value)];
-
- // Up-vector, this tells the camera which direction is 'up'.
- // We define the positive y-direction to be up in this example.
- var up = [parseFloat(myForm.upX.value),
- parseFloat(myForm.upY.value),
- parseFloat(myForm.upZ.value)];
-
- g_viewMatrix = g_math.matrix4.lookAt(eye, target, up);
-
- // if we already have our projection matrix,
- // update the view projection matrix.
- if (g_projMatrix)
- setViewProjection();
-}
-
-// Validates a field in the form to make sure it contains a float.
-function validateFloat(field) {
- var floatValue = parseFloat(field.value);
- if (isNaN(floatValue))
- field.value = '0.0';
- else
- field.value = floatValue;
-}
-
-// Toggles animation
-function toggleAnimate() {
- // toggle the animate flag.
- g_animate = !g_animate;
-
- if (g_animate) {
- // turn on animation
- document.defaultForm.btnAnimate.value = 'Stop animation';
- } else {
- // turn off animation
- document.defaultForm.btnAnimate.value = 'Animate';
- }
-}
-
-// Animates the camera.
-// This function executes on each frame.
-// It was set using g_client.setRenderCallback(..)
-// in initStep2().
-function onrender(renderEvent) {
- resize();
- if (g_animate) {
- // Update the angle frame rate independently.
- g_animateAngle += 2.0 * renderEvent.elapsedTime;
-
- var myForm = document.defaultForm;
- // Set radius to 1.5
- var radius = 1.5;
- // rotate around the y-axis relative to the target
- myForm.eyeX.value = parseFloat(myForm.targetX.value) +
- Math.sin(g_animateAngle) * radius;
- myForm.eyeZ.value = parseFloat(myForm.targetZ.value) +
- Math.cos(g_animateAngle) * radius;
-
- setCamera();
- }
-}
-
-/**
- * Removes any callbacks so they don't get called after the page has unloaded.
- */
-function unload() {
- if (g_client) {
- g_client.cleanup();
- }
-}
-
-</script>
-</head>
-<body>
-<table width="100%" style="height:100%;"><tr><td valign="middle" align="center">
-<table width="100%" style="height:100%;"><tr><td>
-<h1>Cameras and events</h1>
-<p>
-This tutorial shows how we generate a simple cube mesh
-and view it using a dynamically generated camera which can be animated.
-</p>
-<p>
-Press Animate to animate the camera and use the textboxes to manually
-set the position of the camera.
-</p>
-<!-- Centre everything in the div -->
- <table id="container" width="98%" style="height:50%;"><tr><td height="100%">
- <!-- Start of g_o3d plugin -->
- <div id="o3d" style="width: 100%; height: 100%;"></div>
- <!-- End of g_o3d plugin -->
- </td></tr></table>
- <!-- Format input fields nicely in a table -->
- <form action="#" method="get" name="defaultForm">
- <table style="margin-left:auto; margin-right:auto"
- summary="This table contains camera controls.">
- <thead style="font-weight:bold; text-align:center">
- <tr>
- <th></th>
- <th>x</th>
- <th>y</th>
- <th>z</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>Eye</td>
- <td><input id="eyeX"
- name="eyeX"
- type="text"
- onblur="validateFloat(this)"/></td>
- <td><input id="eyeY"
- name="eyeY"
- type="text"
- onblur="validateFloat(this)"/></td>
- <td><input id="eyeZ"
- name="eyeZ"
- type="text"
- onblur="validateFloat(this)"/></td>
- <td rowspan="2">
- <input id="btnSet"
- name="btnSet"
- type="button"
- value="Set camera"
- onClick="setCamera()"/>
- </td>
- </tr>
- <tr>
- <td>Target</td>
- <td><input id="targetX"
- name="targetX"
- type="text"
- onblur="validateFloat(this)"/></td>
- <td><input id="targetY"
- name="targetY"
- type="text"
- onblur="validateFloat(this)"/></td>
- <td><input id="targetZ"
- name="targetZ"
- type="text"
- onblur="validateFloat(this)"/></td>
- </tr>
- <tr>
- <td>Up vector</td>
- <td><input id="upX"
- name="upX"
- type="text"
- onblur="validateFloat(this)"/></td>
- <td><input id="upY"
- name="upY"
- type="text"
- onblur="validateFloat(this)"/></td>
- <td><input id="upZ"
- name="upZ"
- type="text"
- onblur="validateFloat(this)"/></td>
- <td>
- <input id="btnDefault"
- name="btnDefault"
- type="button"
- value="Restore default camera"
- onClick="setDefaultCameraValues()"/>
- </td>
- </tr>
- <tr>
- <td colspan="5" style="text-align:center">
- <input id="btnAnimate"
- name="btnAnimate"
- type="button"
- value="Animate"
- onClick="toggleAnimate()"/>
- </td>
- </tr>
- </tbody>
- </table>
- </form>
-</td></tr></table>
-</td></tr></table>
-</body>
-</html>