From a04f30dc499794ee085f9473d734be5756be12e7 Mon Sep 17 00:00:00 2001
From: Thomas FORGIONE
Date: Fri, 17 Apr 2015 10:33:41 +0200
Subject: [PATCH] Added reset button
---
js/PointerCamera.js | 55 ++++++++++++++++++++++++++------------------
prototype/index.html | 12 ++++++----
prototype/js/main.js | 6 +++--
3 files changed, 44 insertions(+), 29 deletions(-)
diff --git a/js/PointerCamera.js b/js/PointerCamera.js
index 471d65f..ae52a94 100644
--- a/js/PointerCamera.js
+++ b/js/PointerCamera.js
@@ -65,20 +65,8 @@ PointerCamera.prototype.update = function() {
if (Tools.norm2(Tools.diff(this.position, this.new_position)) < 0.01 &&
Tools.norm2(Tools.diff(this.target, this.new_target)) < 0.01) {
- // this.position = this.new_position.clone();
- // this.target = this.new_target.clone();
this.moving = false;
-
- // Update phi and theta so that return to reality does not hurt
- var forward = Tools.diff(this.target, this.position);
- forward.normalize();
-
- this.phi = Math.asin(forward.y);
-
- // Don't know why this line works... But thanks Thierry-san and
- // Bastien because it seems to work...
- this.theta = Math.atan2(forward.x, forward.z);
-
+ this.anglesFromVectors();
}
// Hermite polynom version
@@ -124,17 +112,11 @@ PointerCamera.prototype.update = function() {
this.phi = Math.min(Math.max(-(Math.PI/2-0.1),this.phi), Math.PI/2-0.1);
this.theta = ((this.theta - Math.PI) % (2*Math.PI)) + Math.PI;
+ // Compute vectors (position and target)
+ this.vectorsFromAngles();
+
+ // Update with events
var delta = 0.1;
-
- // Update direction
- this.forward.y = Math.sin(this.phi);
-
- var cos = Math.cos(this.phi);
- this.forward.z = cos * Math.cos(this.theta);
- this.forward.x = cos * Math.sin(this.theta);
- this.forward.normalize();
-
- // Update
var forward = this.forward.clone();
forward.multiplyScalar(400.0 * delta);
var left = this.up.clone();
@@ -152,8 +134,35 @@ PointerCamera.prototype.update = function() {
this.target = this.position.clone();
this.target.add(forward);
}
+}
+PointerCamera.prototype.reset = function() {
+ this.position.copy(new THREE.Vector3(-8.849933489419644, 9.050627639459208, 0.6192960680432451));
+ this.target.copy(new THREE.Vector3(17.945323228767702, -15.156828589982375, -16.585740412769756));
+ this.anglesFromVectors();
+}
+PointerCamera.prototype.vectorsFromAngles = function() {
+ // Update direction
+ this.forward.y = Math.sin(this.phi);
+
+ var cos = Math.cos(this.phi);
+ this.forward.z = cos * Math.cos(this.theta);
+ this.forward.x = cos * Math.sin(this.theta);
+ this.forward.normalize();
+
+}
+
+PointerCamera.prototype.anglesFromVectors = function() {
+ // Update phi and theta so that return to reality does not hurt
+ var forward = Tools.diff(this.target, this.position);
+ forward.normalize();
+
+ this.phi = Math.asin(forward.y);
+
+ // Don't know why this line works... But thanks Thierry-san and
+ // Bastien because it seems to work...
+ this.theta = Math.atan2(forward.x, forward.z);
}
PointerCamera.prototype.move = function(otherCamera) {
diff --git a/prototype/index.html b/prototype/index.html
index 227540a..4c86c98 100644
--- a/prototype/index.html
+++ b/prototype/index.html
@@ -5,13 +5,17 @@
camera with the arrow keys of your keyboard, and change the
angle of the camera by dragging and dropping the scene around
it (you can also use your numpad, 2 to look lower, 8 to look
- higher, 4 to look on the left and 6 to look on the right).
+ higher, 4 to look on the left and 6 to look on the right, but
+ if you're more comfortable with non-numpad keys, you can also
+ use i for up, j for left, k for down, and l for right).
- Recommended views are displayed with a transparent red screen.
- By clicking on this screen, your camera will move to the
- recommended viewpoint.
+ Recommended views are displayed with a transparent red arrow.
+ They disappear when you come closer to them, and you can
+ automatically move to them by clicking on them. You can reset
+ the camera at anytime by clicking on the reset button.
+
#
diff --git a/prototype/js/main.js b/prototype/js/main.js
index 1f94824..87a9ce0 100644
--- a/prototype/js/main.js
+++ b/prototype/js/main.js
@@ -16,6 +16,9 @@ init();
animate();
function init() {
+ // Add the listener on the button
+ document.getElementById('reset').onclick = function() { cameras.mainCamera().reset(); };
+
// on initialise le moteur de rendu
container = document.getElementById('container');
container.style.height = container_size.height + 'px';
@@ -51,8 +54,7 @@ function init() {
// on initialise la camera que l’on place ensuite sur la scène
var camera1 = new PointerCamera(50, container_size.width / container_size.height, 0.01, 100000, container);
camera1.speed = 0.001;
- camera1.position = new THREE.Vector3(0,2,0);
- camera1.phi = -0.1;
+ camera1.reset();
scene.add(camera1);
cameras.push(camera1);