summaryrefslogtreecommitdiff
path: root/assets
diff options
context:
space:
mode:
Diffstat (limited to 'assets')
-rw-r--r--assets/javascripts/rectangles/engine/rooms/projector.js30
-rw-r--r--assets/javascripts/rectangles/engine/scenery/_scenery.js2
-rw-r--r--assets/javascripts/rectangles/models/mat4.js78
-rw-r--r--assets/javascripts/rectangles/models/vec3.js26
4 files changed, 135 insertions, 1 deletions
diff --git a/assets/javascripts/rectangles/engine/rooms/projector.js b/assets/javascripts/rectangles/engine/rooms/projector.js
new file mode 100644
index 0000000..2eac314
--- /dev/null
+++ b/assets/javascripts/rectangles/engine/rooms/projector.js
@@ -0,0 +1,30 @@
+
+rooms.projector = new function(){
+
+ projector = new THREE.Projector();
+ vector = new THREE.Vector3( mouse.x, mouse.y, 0.5 );
+ projector.unprojectVector( vector, camera );
+
+ raycaster = new THREE.Raycaster( camera.position, vector.sub( camera.position ).normalize() );
+ intersects = raycaster.intersectObjects( scene.children, true );
+
+}
+
+
+
+THREE.Projector = function () {
+
+ _viewProjectionMatrix = new THREE.Matrix4(),
+
+ this.unprojectVector = function ( vector, camera ) {
+ camera.projectionMatrixInverse.getInverse( camera.projectionMatrix );
+
+ _viewProjectionMatrix.multiplyMatrices(
+ camera.matrixWorld,
+ camera.projectionMatrixInverse
+ );
+
+ return vector.applyProjection( _viewProjectionMatrix );
+ };
+
+}
diff --git a/assets/javascripts/rectangles/engine/scenery/_scenery.js b/assets/javascripts/rectangles/engine/scenery/_scenery.js
index 867bb6f..9e9e2bf 100644
--- a/assets/javascripts/rectangles/engine/scenery/_scenery.js
+++ b/assets/javascripts/rectangles/engine/scenery/_scenery.js
@@ -20,7 +20,7 @@ var Scenery = new function(){
var loader = new Loader(function(){
base.load(loader.images)
})
- loader.preloadImages(urls)
+ // loader.preloadImages(urls)
}
base.load = function(images){
diff --git a/assets/javascripts/rectangles/models/mat4.js b/assets/javascripts/rectangles/models/mat4.js
new file mode 100644
index 0000000..b061199
--- /dev/null
+++ b/assets/javascripts/rectangles/models/mat4.js
@@ -0,0 +1,78 @@
+function mat4(e){
+ this.elements = [ 1, 0, 0, 0,
+ 0, 1, 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1 ]
+ return this
+}
+mat4.prototype.set = function (a) {
+ var els = this.elements
+ a.forEach(function(n,i){ els[i] = n })
+ return this
+}
+mat4.prototype.clone = function(){
+ return (new mat4).set(this.els)
+}
+mat4.prototype.identity = function () {
+ this.set([
+ 1, 0, 0, 0,
+ 0, 1, 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1
+ ]);
+ return this;
+}
+mat4.prototype.getInverse = function (m, throwOnInvertible) {
+
+ // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
+ var te = this.elements;
+ var me = m.elements;
+
+ var n11 = me[0], n12 = me[4], n13 = me[8], n14 = me[12];
+ var n21 = me[1], n22 = me[5], n23 = me[9], n24 = me[13];
+ var n31 = me[2], n32 = me[6], n33 = me[10], n34 = me[14];
+ var n41 = me[3], n42 = me[7], n43 = me[11], n44 = me[15];
+
+ te[0] = n23*n34*n42 - n24*n33*n42 + n24*n32*n43 - n22*n34*n43 - n23*n32*n44 + n22*n33*n44;
+ te[4] = n14*n33*n42 - n13*n34*n42 - n14*n32*n43 + n12*n34*n43 + n13*n32*n44 - n12*n33*n44;
+ te[8] = n13*n24*n42 - n14*n23*n42 + n14*n22*n43 - n12*n24*n43 - n13*n22*n44 + n12*n23*n44;
+ te[12] = n14*n23*n32 - n13*n24*n32 - n14*n22*n33 + n12*n24*n33 + n13*n22*n34 - n12*n23*n34;
+ te[1] = n24*n33*n41 - n23*n34*n41 - n24*n31*n43 + n21*n34*n43 + n23*n31*n44 - n21*n33*n44;
+ te[5] = n13*n34*n41 - n14*n33*n41 + n14*n31*n43 - n11*n34*n43 - n13*n31*n44 + n11*n33*n44;
+ te[9] = n14*n23*n41 - n13*n24*n41 - n14*n21*n43 + n11*n24*n43 + n13*n21*n44 - n11*n23*n44;
+ te[13] = n13*n24*n31 - n14*n23*n31 + n14*n21*n33 - n11*n24*n33 - n13*n21*n34 + n11*n23*n34;
+ te[2] = n22*n34*n41 - n24*n32*n41 + n24*n31*n42 - n21*n34*n42 - n22*n31*n44 + n21*n32*n44;
+ te[6] = n14*n32*n41 - n12*n34*n41 - n14*n31*n42 + n11*n34*n42 + n12*n31*n44 - n11*n32*n44;
+ te[10] = n12*n24*n41 - n14*n22*n41 + n14*n21*n42 - n11*n24*n42 - n12*n21*n44 + n11*n22*n44;
+ te[14] = n14*n22*n31 - n12*n24*n31 - n14*n21*n32 + n11*n24*n32 + n12*n21*n34 - n11*n22*n34;
+ te[3] = n23*n32*n41 - n22*n33*n41 - n23*n31*n42 + n21*n33*n42 + n22*n31*n43 - n21*n32*n43;
+ te[7] = n12*n33*n41 - n13*n32*n41 + n13*n31*n42 - n11*n33*n42 - n12*n31*n43 + n11*n32*n43;
+ te[11] = n13*n22*n41 - n12*n23*n41 - n13*n21*n42 + n11*n23*n42 + n12*n21*n43 - n11*n22*n43;
+ te[15] = n12*n23*n31 - n13*n22*n31 + n13*n21*n32 - n11*n23*n32 - n12*n21*n33 + n11*n22*n33;
+
+ var det = n11 * te[ 0 ] + n21 * te[ 4 ] + n31 * te[ 8 ] + n41 * te[ 12 ];
+
+ if ( det == 0 ) {
+ var msg = "Matrix4.getInverse(): can't invert matrix, determinant is 0";
+
+ if ( throwOnInvertible || false ) {
+ throw new Error( msg )
+ }
+ else {
+ console.warn( msg )
+ }
+ this.identity();
+ return this
+ }
+ this.multiplyScalar( 1 / det );
+ return this
+}
+mat4.prototype.multiplyScalar = function (n) {
+ var els = this.elements
+ els[0] *= n; els[4] *= n; els[8] *= n; els[12] *= n
+ els[1] *= n; els[5] *= n; els[9] *= n; els[13] *= n
+ els[2] *= n; els[6] *= n; els[10] *= n; els[14] *= n
+ els[3] *= n; els[7] *= n; els[11] *= n; els[15] *= n
+ return this
+}
+
diff --git a/assets/javascripts/rectangles/models/vec3.js b/assets/javascripts/rectangles/models/vec3.js
index 4e9f3cb..4e00b0c 100644
--- a/assets/javascripts/rectangles/models/vec3.js
+++ b/assets/javascripts/rectangles/models/vec3.js
@@ -3,3 +3,29 @@ function vec3(a,b,c){
this.b = b
this.c = c
}
+vec3.prototype.add = function(v){
+ this.a += v.a
+ this.b += v.b
+ this.c += v.c
+ return this
+}
+vec3.prototype.sub = function(v){
+ this.a -= v.a
+ this.b -= v.b
+ this.c -= v.c
+ return this
+}
+
+// input: mat4 projection matrix
+vec3.prototype.apply_projection = function (m) {
+ var x = this.a, y = this.b, z = this.c;
+
+ var e = m.elements;
+ var d = 1 / ( e[3] * x + e[7] * y + e[11] * z + e[15] ); // perspective divide
+
+ this.x = ( e[0] * x + e[4] * y + e[8] * z + e[12] ) * d;
+ this.y = ( e[1] * x + e[5] * y + e[9] * z + e[13] ) * d;
+ this.z = ( e[2] * x + e[6] * y + e[10] * z + e[14] ) * d;
+
+ return this;
+}