diff --git a/static/js/prototype/ArrowCamera.js b/static/js/prototype/ArrowCamera.js index 3ff5e5f..2085cde 100644 --- a/static/js/prototype/ArrowCamera.js +++ b/static/js/prototype/ArrowCamera.js @@ -29,11 +29,14 @@ var ArrowCamera = function(arg1, arg2, arg3, arg4, position, target) { this.arrow = new THREE.Mesh(new THREE.Geometry(), new THREE.MeshLambertMaterial({color: 0x0000ff, side:THREE.BackSide})); + this.size = 0.4; + this.object3D = new THREE.Object3D(); this.object3D.add(this.initExtremity()); this.object3D.add(this.arrow); this.fullArrow = false; + } ArrowCamera.prototype = Object.create(THREE.PerspectiveCamera.prototype); ArrowCamera.prototype.constructor = ArrowCamera; @@ -51,8 +54,8 @@ ArrowCamera.prototype.initExtremity = function() { left.normalize(); other.normalize(); - left = Tools.mul(left, 0.2); - other = Tools.mul(other, 0.2); + left = Tools.mul(left, this.size); + other = Tools.mul(other, this.size); geometry.vertices.push(Tools.sum( Tools.sum( this.position, left), other), Tools.diff(Tools.sum( this.position, other), left), @@ -120,7 +123,7 @@ ArrowCamera.prototype.regenerateArrow = function(mainCamera) { // First point of curve var f0 = mainCamera.position.clone(); - f0.add(Tools.sum(Tools.mul(this.up,-1), Tools.diff(this.target, this.position).normalize())); + f0.add(Tools.mul(Tools.sum(new THREE.Vector3(0,-0.5,0), Tools.diff(this.target, this.position).normalize()),2)); // Last point of curve var f1 = this.position.clone(); @@ -128,6 +131,7 @@ ArrowCamera.prototype.regenerateArrow = function(mainCamera) { // Last derivative of curve var fp1 = Tools.diff(this.target, this.position); fp1.normalize(); + fp1.multiplyScalar(2); // Camera direction var dir = Tools.diff(this.position, mainCamera.position); @@ -160,7 +164,7 @@ ArrowCamera.prototype.regenerateArrow = function(mainCamera) { var limit = this.fullArrow ? 0.1 : 0.3; // for (var i = this.fullArrow ? 0 : 0.5; i <= 1.001; i += 0.05) { - for (var i = 1; i > limit; i -= 0.05) { + for (var i = 1; i > limit; i -= 0.1) { point = hermite.eval(i); deriv = hermite.prime(i); up.cross(deriv); @@ -168,8 +172,8 @@ ArrowCamera.prototype.regenerateArrow = function(mainCamera) { up.multiplyScalar(-1); up.normalize(); - var coeff = 0.1; - var left = Tools.cross(up, deriv); left.normalize(); left.multiplyScalar(coeff); + var coeff = this.size / 2; + var left = Tools.cross(up, deriv); left.normalize(); left.multiplyScalar(coeff); var other = Tools.cross(deriv, left); other.normalize(); other.multiplyScalar(coeff); vertices.push( @@ -180,21 +184,31 @@ ArrowCamera.prototype.regenerateArrow = function(mainCamera) { ); } - var faces = new Array(); - - for (var i = 0; i < vertices.length - 4; i+= 4) { - faces.push(new THREE.Face3(i,i+1,i+5),new THREE.Face3(i,i+5,i+4), - new THREE.Face3(i+1,i+2,i+6),new THREE.Face3(i+1,i+6,i+5), - new THREE.Face3(i+2,i+3,i+7),new THREE.Face3(i+2,i+7,i+6), - new THREE.Face3(i,i+7,i+3), new THREE.Face3(i,i+4,i+7)); - } - - var len = vertices.length; - faces.push(new THREE.Face3(len-4,len-3,len-2), new THREE.Face3(len-4,len-2,len-1)); - - this.arrow.geometry.vertices = vertices; - this.arrow.geometry.faces = faces; + + if (this.arrow.geometry.faces.length == 0) { + var faces = new Array(); + + for (var i = 0; i < vertices.length - 4; i+= 4) { + faces.push(new THREE.Face3(i,i+1,i+5),new THREE.Face3(i,i+5,i+4), + new THREE.Face3(i+1,i+2,i+6),new THREE.Face3(i+1,i+6,i+5), + new THREE.Face3(i+2,i+3,i+7),new THREE.Face3(i+2,i+7,i+6), + new THREE.Face3(i,i+7,i+3), new THREE.Face3(i,i+4,i+7)); + } + + var len = vertices.length; + faces.push(new THREE.Face3(len-4,len-3,len-2), new THREE.Face3(len-4,len-2,len-1)); + + var max = 0; + for (var i = 0; i < faces.length; i++) { + max = Math.max(max, faces[i].a, faces[i].b, faces[i].c); + } + console.log(max + '/' + len); + + + this.arrow.geometry.faces = faces; + this.arrow.geometry.facesNeedUpdate = true; + } // this.arrow.geometry.mergeVertices(); this.arrow.geometry.computeFaceNormals(); @@ -209,7 +223,6 @@ ArrowCamera.prototype.regenerateArrow = function(mainCamera) { this.arrow.geometry.elementsNeedUpdate = true; this.arrow.geometry.groupsNeedUpdate = true; this.arrow.geometry.normalsNeedUpdate = true; - // this.arrow.geometry.facesNeedUpdate = true; } diff --git a/static/js/prototype/Previewer.js b/static/js/prototype/Previewer.js index 8625328..2d12477 100644 --- a/static/js/prototype/Previewer.js +++ b/static/js/prototype/Previewer.js @@ -43,10 +43,14 @@ Previewer.prototype.render = function(prev, container_width, container_height) { this.renderer.enableScissorTest (true); this.renderer.setViewport(left, bottom, width, height); this.renderer.render(scene, prev.camera); - } + this.clearNeeded = true; + } } Previewer.prototype.clear = function() { - this.domElement.width = this.domElement.width; + if (this.clearNeeded) { + this.domElement.width = this.domElement.width; + this.clearNeeded = false; + } } diff --git a/static/js/prototype/initScene.js b/static/js/prototype/initScene.js index 9ced37d..2985254 100644 --- a/static/js/prototype/initScene.js +++ b/static/js/prototype/initScene.js @@ -219,6 +219,10 @@ function createBobombCameras(width, height) { } cams.push( + createCamera( + new THREE.Vector3(37.24445046448742,17.56004329173052,-13.432945825465112), + new THREE.Vector3(15.446296842638255,0.7142524861838169,15.568085721947512) + ), createCamera( new THREE.Vector3(-24.10987782946019,26.75997424452833,-24.7814217620827), new THREE.Vector3(-13.724964120740987,14.939165978074758,11.993869660150779) @@ -243,10 +247,6 @@ function createBobombCameras(width, height) { new THREE.Vector3(5.068708131530766,11.201320390433953,9.77462743108436), new THREE.Vector3(9.20744154720096,3.8549750522404134,48.87580511010085) ), - createCamera( - new THREE.Vector3(37.24445046448742,17.56004329173052,-13.432945825465112), - new THREE.Vector3(15.446296842638255,0.7142524861838169,15.568085721947512) - ), createCamera( new THREE.Vector3(4.18086580540298,16.54831275414988,29.96253548469186), new THREE.Vector3(-17.059296481928556,3.408610856102113,-1.2817238286325505) @@ -258,11 +258,11 @@ function createBobombCameras(width, height) { createCamera( new THREE.Vector3(11.29580093093769,15.03666008708929,31.377195488571406), new THREE.Vector3(-28.288314738873957,13.648654387264967,25.794075678265735) + ), + createCamera( + new THREE.Vector3(28.438969076366728,18.888756501203087,26.694456000440766), + new THREE.Vector3(-5.369166248035665,2.54925886583683,12.909289954623416) ) - // createCamera( - // new THREE.Vector3(28.438969076366728,18.888756501203087,26.694456000440766), - // new THREE.Vector3(-5.369166248035665,2.54925886583683,12.909289954623416) - // ) ); return cams;