summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/movie15/dice.js
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-08-18 23:35:58 +0000
committerKarl Berry <karl@freefriends.org>2006-08-18 23:35:58 +0000
commit87db3bff624ea61d6317321a423aa3093fa320b8 (patch)
tree39cee3a48d33cb6ec4233429137eae03275abb47 /Master/texmf-dist/doc/latex/movie15/dice.js
parent1f37334503f1abac4e6f8b3a3b4af1dce55cc967 (diff)
movei15 update (16aug06)
git-svn-id: svn://tug.org/texlive/trunk@1980 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/movie15/dice.js')
-rw-r--r--Master/texmf-dist/doc/latex/movie15/dice.js144
1 files changed, 93 insertions, 51 deletions
diff --git a/Master/texmf-dist/doc/latex/movie15/dice.js b/Master/texmf-dist/doc/latex/movie15/dice.js
index 0b752c53b59..e5561194c32 100644
--- a/Master/texmf-dist/doc/latex/movie15/dice.js
+++ b/Master/texmf-dist/doc/latex/movie15/dice.js
@@ -1,56 +1,98 @@
+//////////////////////////
+// add our own lights
+//////////////////////////
//first remove any scene lights
-var lightIndex = scene.lights.count - 1;
-for (; lightIndex >= 0; lightIndex--)
-{
- scene.lights.removeByIndex(lightIndex);
+for (var i = scene.lights.count - 1; i >= 0; i--) {
+ scene.lights.removeByIndex(i);
}
-////set background color
-//changer = new RenderEventHandler();
-//changer.onEvent = function(event)
-//{
-// event.canvas.background.setColor(new Color(1,1,1));
-//}
-//runtime.addEventHandler(changer);
-
-//add our own lighting
-lights = new Object();
-lights.init = function()
-{
- //from left
- l1 = scene.createLight();
- l1.color.set3(1,1,1);
- l1.brightness = .4;
- l1.direction.set3(1,0,0); //NB: direction, not source!
-
- //from right
- l2 = scene.createLight();
- l2.color.set3(1,1,1);
- l2.brightness = .4;
- l2.direction.set3(-1,0,0);
-
- //from bottom
- l3 = scene.createLight();
- l3.color.set3(1,1,1);
- l3.brightness = .4;
- l3.direction.set3(0,0,1);
-
- //from top
- l4 = scene.createLight();
- l4.color.set3(1,1,1);
- l4.brightness = .4;
- l4.direction.set3(0,0,-1);
-
- //from front
- l5 = scene.createLight();
- l5.color.set3(1,1,1);
- l5.brightness = .4;
- l5.direction.set3(0,1,0);
-
- //from back
- l6 = scene.createLight();
- l6.color.set3(1,1,1);
- l6.brightness = .4;
- l6.direction.set3(0,-1,0);
+lights = new Object();
+lights.init = function() {
+ //from left
+ l1 = scene.createLight();
+ l1.color.set3(1,1,1);
+ l1.brightness = .4;
+ l1.direction.set3(1,0,0); //NB: direction, not source!
+
+ //from right
+ l2 = scene.createLight();
+ l2.color.set3(1,1,1);
+ l2.brightness = .4;
+ l2.direction.set3(-1,0,0);
+
+ //from bottom
+ l3 = scene.createLight();
+ l3.color.set3(1,1,1);
+ l3.brightness = .4;
+ l3.direction.set3(0,0,1);
+
+ //from top
+ l4 = scene.createLight();
+ l4.color.set3(1,1,1);
+ l4.brightness = .4;
+ l4.direction.set3(0,0,-1);
+
+ //from front
+ l5 = scene.createLight();
+ l5.color.set3(1,1,1);
+ l5.brightness = .4;
+ l5.direction.set3(0,1,0);
+
+ //from back
+ l6 = scene.createLight();
+ l6.color.set3(1,1,1);
+ l6.brightness = .4;
+ l6.direction.set3(0,-1,0);
}
+
lights.init();
+
+////////////////////////////////////////////////////////////////////////
+// get rid of Gimbal rotation; as a result the z-axis will always be up;
+// this part of the script should work off the shelf with _any_ 3D model
+////////////////////////////////////////////////////////////////////////
+var max_theta = 88; // maximum pitch (degrees from horizontal) of the camera
+var sin_max_theta = Math.sin(max_theta * Math.PI/180);
+var tan_max_theta = Math.tan(max_theta * Math.PI/180);
+
+mouseEventHandler = new MouseEventHandler();
+mouseEventHandler.onMouseMove = true;
+mouseEventHandler.onEvent = function(event) {
+ if(event.currentTool == runtime.TOOL_NAME_ROTATE) {
+ var camera = scene.cameras.getByIndex(0);
+ var c2c = camera.position.subtract(camera.targetPosition);
+ var roo = c2c.length;
+
+ try {
+ var sin_theta = c2c.z / roo;
+ if(sin_theta == 1) {//top view
+ c2c.z = roo * sin_max_theta;
+ c2c.y = -c2c.z / tan_max_theta;
+ c2c.x = 0
+ }
+ else if(sin_theta == -1) {//bottom view
+ c2c.z = -roo * sin_max_theta;
+ c2c.y = c2c.z / tan_max_theta;
+ c2c.x = 0
+ }
+ else if(sin_max_theta < sin_theta){//camera too high
+ c2c.z = Math.sqrt(c2c.x * c2c.x + c2c.y * c2c.y) * tan_max_theta;
+ c2c.normalize();
+ c2c.scaleInPlace(roo);
+ }
+ else if(sin_theta < -sin_max_theta){//camera too low
+ c2c.z = -Math.sqrt(c2c.x * c2c.x + c2c.y * c2c.y) * tan_max_theta;
+ c2c.normalize();
+ c2c.scaleInPlace(roo);
+ }
+
+ //corrected camera position
+ camera.position.set(camera.targetPosition.add(c2c));
+ }
+ catch(e) {}
+
+ camera.roll=0; //z-axis always up
+ }
+}
+
+runtime.addEventHandler(mouseEventHandler);