diff --git a/css/styles.css b/css/styles.css index 33bb3fb..fde2fa6 100644 --- a/css/styles.css +++ b/css/styles.css @@ -99,22 +99,27 @@ body { margin: 2px; background: rgba(0,0,0,0.5); } -#coords { +.coords { padding-bottom: 5px; margin-bottom: 10px; border-bottom: solid 1px #444; + font-family: "Courier New"; } -#coords > span { +.coords > span { display: block; - font-weight: bold; - font-size: 1.1rem; + font-size: 1rem; float: left; width: 33%; text-align: center; + background: rgba(30,30,30,0.5); + padding: 5px 0; + line-height: 100%; + border: solid 3px #000; + box-shadow: 2px 2px 5px #000; box-sizing: border-box; -webkit-box-sizing: border-box; } -#coords:after { +.coords:after { content: ' '; display: block; clear: both; diff --git a/js/components/action.class.js b/js/components/action.class.js index 2879d6f..3f8c37f 100644 --- a/js/components/action.class.js +++ b/js/components/action.class.js @@ -111,15 +111,15 @@ var Action = { var indexPoint = intersection.index; var selPoint = intersection.object.geometry.vertices[indexPoint]; - $('#hud #infos').html( - // "

"+intersection.object.name+"

" - "

"+selPoint.name+"

" - ); + if(selPoint.visible) { + $('#hud #infos').html( + "

"+selPoint.name+"

" + ); + var isMove = Action.moveToObj(indexPoint, selPoint); + if(isMove) return; + } - - var isMove = Action.moveToObj(indexPoint, selPoint); - if(isMove) return; } } @@ -135,11 +135,22 @@ var Action = { * @param {int} indexPoint */ - 'moveNextPrev' : function (indexPoint) { + 'moveNextPrev' : function (indexPoint, increment) { + + var find = false; + while(!find) { + + //-- If next|previous is undefined, loop to the first|last + if (indexPoint < 0) indexPoint = System.particleGeo.vertices.length-1; + else if (System.particleGeo.vertices[indexPoint] == undefined) indexPoint = 0; + + if(System.particleGeo.vertices[indexPoint].visible == true) { + find = true; + } else { + indexPoint += increment + } + } - //-- If next|previous is undefined, loop to the first|last - if (indexPoint < 0) indexPoint = System.particleGeo.vertices.length-1; - else if (System.particleGeo.vertices[indexPoint] == undefined) indexPoint = 0; //-- Move to var selPoint = System.particleGeo.vertices[indexPoint]; @@ -147,6 +158,52 @@ var Action = { }, + /** + * Disable current selection + */ + + 'disableSelection' : function () { + + this.oldSel = null; + this.cursorSel.visible = false; + + $('#hud #infos').html(''); + + }, + + /** + * Move to inital position + */ + 'moveInitalPosition' : function (timer) { + + if(timer == undefined) timer = 800; + + //-- Move camera to initial position + + var moveFrom = { + x: camera.position.x, y: camera.position.y , z: camera.position.z, + mx: controls.center.x, my: controls.center.y , mz: controls.center.z + }; + var moveCoords = { + x: 0, y: 500, z: 500, + mx: 0, my: 0 , mz: 0 + }; + + controls.enabled = false; + Ed3d.tween = new TWEEN.Tween(moveFrom).to(moveCoords, timer) + .start() + .onUpdate(function () { + camera.position.set(moveFrom.x, moveFrom.y, moveFrom.z); + controls.center.set(moveFrom.mx, moveFrom.my, moveFrom.mz); + }) + .onComplete(function () { + controls.enabled = true; + controls.update(); + }); + + }, + + /** * Move camera to a system * @@ -253,6 +310,7 @@ var Action = { scene.add(this.cursorSel); } + this.cursorSel.visible = true; this.cursorSel.position.set(x, y, z); this.cursorSel.scale.set(1, 1, 1); diff --git a/js/components/galaxy.class.js b/js/components/galaxy.class.js index c26ae18..9f58df3 100644 --- a/js/components/galaxy.class.js +++ b/js/components/galaxy.class.js @@ -38,6 +38,14 @@ var Galaxy = { //get height data from img Galaxy.getHeightData(img); + + //-- If using start animation: launch it + if(Ed3d.startAnim) { + camera.position.set(-10000, 40000, 50000); + Action.moveInitalPosition(4000); + } + $('#loader').hide(); + }; // load img source img.src = Ed3d.basePath + "textures/heightmap2.jpg"; diff --git a/js/components/hud.class.js b/js/components/hud.class.js index 7c7536a..dd33463 100644 --- a/js/components/hud.class.js +++ b/js/components/hud.class.js @@ -17,14 +17,14 @@ var HUD = { '
'+ '

Infos

'+ ' Dist. Sol '+ - '
'+ + '
'+ '
'+ '

'+ '
'+ - ' '+*/ '
'+ '
'+ @@ -52,13 +52,14 @@ var HUD = { //-- Disable 3D controls when mouse hover the Hud - $( "#hud, #systemDetails" ).hover( + $( "#hud" ).hover( function() { controls.enabled = false; }, function() { controls.enabled = true; } ); + $( "#systemDetails" ).hide(); //-- Add Count filters $('.map_filter').each(function(e) { @@ -73,13 +74,26 @@ var HUD = { var active = $(this).data('active'); active = (Math.abs(active-1)); + if(!Ed3d.hudMultipleSelect) { + + $('.map_filter').addClass('disabled'); + + $(System.particleGeo.vertices).each(function(index, point) { + point.visible = 0; + point.filtered = 0; + System.particleGeo.colors[index] = new THREE.Color('#111111'); + active = 1; + }); + + } + $(Ed3d.catObjs[idCat]).each(function(key, indexPoint) { obj = System.particleGeo.vertices[indexPoint]; System.particleGeo.colors[indexPoint] = (active==1) ? obj.color - : new THREE.Color('#000000'); + : new THREE.Color('#111111'); obj.visible = (active==1); obj.filtered = (active==1); @@ -90,6 +104,10 @@ var HUD = { }); $(this).data('active',active); $(this).toggleClass('disabled'); + + //-- If current selection is no more visible, disable active selection + if(Action.oldSel != null && !Action.oldSel.visible) Action.disableSelection(); + Action.moveInitalPosition(); }); @@ -157,7 +175,13 @@ var HUD = { */ 'openHudDetails' : function() { $('#hud').hide(); - $('#systemDetails').show(); + $('#systemDetails').show().hover( + function() { + controls.enabled = false; + }, function() { + controls.enabled = true; + } + ); }, /** * @@ -194,8 +218,9 @@ var HUD = { ); //-- Add navigation + $('', {'html': '<'}) - .click(function(){Action.moveNextPrev(index-1);}) + .click(function(){Action.moveNextPrev(index-1, -1);}) .appendTo("#nav"); $('', {'html': 'X'}) @@ -203,7 +228,7 @@ var HUD = { .appendTo("#nav"); $('', {'html': '>'}) - .click(function(){Action.moveNextPrev(index+1);}) + .click(function(){Action.moveNextPrev(index+1, 1);}) .appendTo("#nav"); }, diff --git a/js/components/system.class.js b/js/components/system.class.js index 6de4ad6..f759f42 100644 --- a/js/components/system.class.js +++ b/js/components/system.class.js @@ -44,6 +44,7 @@ var System = { //-- Attach name and set point as clickable particle.clickable = true; + particle.visible = true; particle.name = val.name; if(val.infos != undefined) particle.infos = val.infos; diff --git a/js/ed3dmap.js b/js/ed3dmap.js index 6153bf0..841bde5 100644 --- a/js/ed3dmap.js +++ b/js/ed3dmap.js @@ -82,6 +82,7 @@ var Ed3d = { //-- HUD 'withHudPanel' : false, + 'hudMultipleSelect' : true, //-- Systems 'systems' : [], @@ -89,6 +90,9 @@ var Ed3d = { //-- Starfield 'starfield' : null, + //-- Start animation + 'startAnim' : true, + //-- Graphical Options 'optDistObj' : 1500, @@ -101,27 +105,35 @@ var Ed3d = { */ 'init' : function(options) { + // Merge options with defaults var options = $.extend({ container: Ed3d.container, basePath: Ed3d.basePath, jsonPath: Ed3d.jsonPath, - withHudPanel: Ed3d.withHudPanel + withHudPanel: Ed3d.withHudPanel, + hudMultipleSelect: Ed3d.hudMultipleSelect, + startAnim: Ed3d.startAnim }, options); - $('#loader').show(); //-- Set Option - this.basePath = options.basePath; - this.container = options.container; - this.jsonPath = options.jsonPath; - this.withHudPanel = options.withHudPanel; + this.basePath = options.basePath; + this.container = options.container; + this.jsonPath = options.jsonPath; + this.withHudPanel = options.withHudPanel; + this.hudMultipleSelect = options.hudMultipleSelect; + this.startAnim = options.startAnim; //-- Init 3D map container $('#'+Ed3d.container).append('
'); + //-- Load dependencies + + if(typeof isMinified !== 'undefined') return Ed3d.launchMap(); + $.when( $.getScript(Ed3d.basePath + "vendor/three-js/OrbitControls.js"), @@ -145,6 +157,19 @@ var Ed3d = { ).done(function() { + Ed3d.launchMap(); + + }); + + }, + + /** + * Launch + */ + + 'launchMap' : function() { + + Ed3d.loadTextures(); Ed3d.initScene(); @@ -165,11 +190,8 @@ var Ed3d = { // Animate animate(); - }); - }, - /** * Init Three.js scene */ @@ -226,7 +248,6 @@ var Ed3d = { camera.position.set(0, 500, 500); - //HemisphereLight light = new THREE.HemisphereLight(0xffffff, 0xcccccc); scene.add(light); @@ -304,8 +325,6 @@ var Ed3d = { HUD.init(); Action.init(); - //-- Init Events - $('#loader').hide(); });; }, @@ -407,9 +426,7 @@ function animate(time) { Action.cursorSel.scale.set(scale, scale, scale); } - Action.cursorSel.rotation.y = camera.rotation.y ; - // Action.cursorSel.quaternion.setFromEuler(camera.rotation.y ); - //Action.cursorSel.quaternion.copy(camera.quaternion); + Action.cursorSel.rotation.y = camera.rotation.y ; } diff --git a/js/ed3dmap.min.js b/js/ed3dmap.min.js index 2b91135..d8cbfdc 100644 --- a/js/ed3dmap.min.js +++ b/js/ed3dmap.min.js @@ -1 +1 @@ -var camera;var controls;var scene;var light;var renderer;var raycaster;var composer;var container;var routes=[];var lensFlareSel;var Ed3d={container:null,jsonPath:null,grid1H:null,grid1K:null,material:{Trd:new THREE.MeshBasicMaterial({color:16777215}),line:new THREE.LineBasicMaterial({color:950152}),white:new THREE.MeshBasicMaterial({color:16777215}),orange:new THREE.MeshBasicMaterial({color:16751872}),black:new THREE.MeshBasicMaterial({color:65793}),lightblue:new THREE.MeshBasicMaterial({color:950152}),darkblue:new THREE.MeshBasicMaterial({color:1452331}),selected:new THREE.MeshPhongMaterial({color:917503}),transparent:new THREE.MeshBasicMaterial({color:0,transparent:true,opacity:0}),glow_1:null},textures:{},systems:[],starfield:null,optDistObj:1500,init:function(container,jsonPath){$("#loader").show();$.when().done(function(){Ed3d.container=container;Ed3d.jsonPath=jsonPath;Ed3d.loadTextures();Ed3d.initScene();Ed3d.grid1H=$.extend({},Grid.init(100,1054491),{});Ed3d.grid1K=$.extend({},Grid.init(1000,1448228),{});Ed3d.skyboxStars();Ed3d.loadDatas();animate()})},loadTextures:function(){var texloader=new THREE.TextureLoader();this.textures.flare_white=texloader.load("textures/lensflare/flare2.png");this.textures.flare_yellow=texloader.load("textures/lensflare/star_yellow.png");Ed3d.material.glow_1=new THREE.SpriteMaterial({map:this.textures.flare_yellow,color:16777215,transparent:false,blending:THREE.AdditiveBlending})},initScene:function(){container=document.getElementById("ed3dmap");camera=new THREE.PerspectiveCamera(45,container.offsetWidth/container.offsetHeight,1,10000);camera.position.set(0,500,-500);scene=new THREE.Scene();light=new THREE.HemisphereLight(16777215,13421772);scene.add(light);renderer=new THREE.WebGLRenderer({antialias:true,alpha:true});renderer.setClearColor(0,1);renderer.setSize(container.offsetWidth,container.offsetHeight);renderer.domElement.style.zIndex=5;container.appendChild(renderer.domElement);controls=new THREE.OrbitControls(camera,container);controls.rotateSpeed=1;controls.zoomSpeed=3;controls.panSpeed=0.8;scene.fog=new THREE.FogExp2(855312,0.000128);renderer.setClearColor(scene.fog.color,1);testPerfomances();composer=new THREE.EffectComposer(renderer);composer.addPass(new THREE.RenderPass(scene,camera));var bokehPass=new THREE.BokehPass(scene,camera,{focus:0.5,aperture:0.0025,maxblur:10,width:container.offsetWidth,height:container.offsetHeight});bokehPass.renderToScreen=true;composer.addPass(bokehPass)},loadDatas:function(){$.getJSON(this.jsonPath,function(data){HUD.create("ed3dmap");$.each(data.notes,function(key,val){var geometry=new THREE.SphereGeometry(2,10,10);var sphere=new THREE.Mesh(geometry,Ed3d.material.orange);sphere.position.set(val.x,val.y,val.z);sphere.name=val.name;scene.add(sphere)});$.each(data.routes,function(key1,route){Route.createRoute(key1,route)});$.each(data.permits,function(key,val){system=System.init(val);Ed3d.systems.push(system);scene.add(system)})}).done(function(){HUD.init();Action.init();$("#loader").hide()})},skyboxStars:function(){var sizeStars=10000;var particles=new THREE.Geometry;for(var p=0;p<5000;p++){var particle=new THREE.Vector3(Math.random()*sizeStars-(sizeStars/2),Math.random()*sizeStars-(sizeStars/2),Math.random()*sizeStars-(sizeStars/2));particles.vertices.push(particle)}var particleMaterial=new THREE.PointsMaterial({color:15658734,size:2});this.starfield=new THREE.Points(particles,particleMaterial);scene.add(this.starfield)},addText:function(textShow,x,y,z,size){var textShapes=THREE.FontUtils.generateShapes(textShow,{font:"helvetiker",weight:"normal",style:"normal",size:size,curveSegments:100});var text=new THREE.ShapeGeometry(textShapes);var textMesh=new THREE.Mesh(text,new THREE.MeshBasicMaterial({color:16777215}));textMesh.position.set(x,y,z);textMesh.rotation.x=-Math.PI/2;textMesh.rotation.z=-Math.PI;scene.add(textMesh)}};function animate(){requestAnimationFrame(animate);renderer.render(scene,camera);composer.render();$("#cx").html(Math.round(controls.target.x));$("#cy").html(Math.round(controls.target.y));$("#cz").html(Math.round(controls.target.z));Ed3d.starfield.position.set(controls.target.x-(controls.target.x/10)%4000,controls.target.y-(controls.target.y/10)%4000,controls.target.z-(controls.target.z/10)%4000);if(Action.cursorSel!=null){var scale=distanceFromTarget(camera)/200;if(scale>=1&&scale<10){Action.cursorSel.scale.x=scale;Action.cursorSel.scale.y=scale;Action.cursorSel.scale.z=scale}}refreshWithCamPos();controls.update()}function render(){renderer.render(scene,camera)}window.addEventListener("resize",function(){renderer.setSize(container.offsetWidth,container.offsetHeight);camera.aspect=container.offsetWidth/container.offsetHeight;camera.updateProjectionMatrix()});function distance(v1,v2){var dx=v1.position.x-v2.position.x;var dy=v1.position.y-v2.position.y;var dz=v1.position.z-v2.position.z;return Math.round(Math.sqrt(dx*dx+dy*dy+dz*dz))}function distanceFromTarget(v1){var dx=v1.position.x-controls.target.x;var dy=v1.position.y-controls.target.y;var dz=v1.position.z-controls.target.z;return Math.round(Math.sqrt(dx*dx+dy*dy+dz*dz))}var camSave={x:0,y:0,z:0};function refreshWithCamPos(){var d=new Date();var n=d.getTime();if(n%1!=0){return}var p=Ed3d.optDistObj/2;if(camSave.x==Math.round(camera.position.x/p)*p&&camSave.y==Math.round(camera.position.y/p)*p&&camSave.z==Math.round(camera.position.z/p)*p){return}refreshShowSystems();Ed3d.grid1H.addCoords();Ed3d.grid1K.addCoords();camSave.x=Math.round(camera.position.x/p)*p;camSave.y=Math.round(camera.position.y/p)*p;camSave.z=Math.round(camera.position.z/p)*p}function refreshShowSystems(){Ed3d.systems.forEach(setVisibilitySystem)}function setVisibilitySystem(obj){if(distance(obj,camera)":{x_min:18.0625,x_max:774,ha:792,o:"m 774 376 l 18 40 l 18 149 l 631 421 l 18 692 l 18 799 l 774 465 l 774 376 "},v:{x_min:0,x_max:675.15625,ha:761,o:"m 675 738 l 404 0 l 272 0 l 0 738 l 133 737 l 340 147 l 541 737 l 675 738 "},"τ":{x_min:0.28125,x_max:644.5,ha:703,o:"m 644 628 l 382 628 l 382 179 q 388 120 382 137 q 436 91 401 91 q 474 94 447 91 q 504 97 501 97 l 504 0 q 454 -9 482 -5 q 401 -14 426 -14 q 278 67 308 -14 q 260 233 260 118 l 260 628 l 0 628 l 0 739 l 644 739 l 644 628 "},"ξ":{x_min:0,x_max:624.9375,ha:699,o:"m 624 -37 q 608 -153 624 -96 q 563 -278 593 -211 l 454 -278 q 491 -183 486 -200 q 511 -83 511 -126 q 484 -23 511 -44 q 370 1 452 1 q 323 0 354 1 q 283 -1 293 -1 q 84 76 169 -1 q 0 266 0 154 q 56 431 0 358 q 197 538 108 498 q 94 613 134 562 q 54 730 54 665 q 77 823 54 780 q 143 901 101 867 l 27 901 l 27 1012 l 576 1012 l 576 901 l 380 901 q 244 863 303 901 q 178 745 178 820 q 312 600 178 636 q 532 582 380 582 l 532 479 q 276 455 361 479 q 118 281 118 410 q 165 173 118 217 q 274 120 208 133 q 494 101 384 110 q 624 -37 624 76 "},"&":{x_min:-3,x_max:894.25,ha:992,o:"m 894 0 l 725 0 l 624 123 q 471 0 553 40 q 306 -41 390 -41 q 168 -7 231 -41 q 62 92 105 26 q 14 187 31 139 q -3 276 -3 235 q 55 433 -3 358 q 248 581 114 508 q 170 689 196 640 q 137 817 137 751 q 214 985 137 922 q 384 1041 284 1041 q 548 988 483 1041 q 622 824 622 928 q 563 666 622 739 q 431 556 516 608 l 621 326 q 649 407 639 361 q 663 493 653 426 l 781 493 q 703 229 781 352 l 894 0 m 504 818 q 468 908 504 877 q 384 940 433 940 q 293 907 331 940 q 255 818 255 875 q 289 714 255 767 q 363 628 313 678 q 477 729 446 682 q 504 818 504 771 m 556 209 l 314 499 q 179 395 223 449 q 135 283 135 341 q 146 222 135 253 q 183 158 158 192 q 333 80 241 80 q 556 209 448 80 "},"Λ":{x_min:0,x_max:862.5,ha:942,o:"m 862 0 l 719 0 l 426 847 l 143 0 l 0 0 l 356 1013 l 501 1013 l 862 0 "},I:{x_min:41,x_max:180,ha:293,o:"m 180 0 l 41 0 l 41 1013 l 180 1013 l 180 0 "},G:{x_min:0,x_max:921,ha:1011,o:"m 921 0 l 832 0 l 801 136 q 655 15 741 58 q 470 -28 568 -28 q 126 133 259 -28 q 0 499 0 284 q 125 881 0 731 q 486 1043 259 1043 q 763 957 647 1043 q 905 709 890 864 l 772 709 q 668 866 747 807 q 486 926 589 926 q 228 795 322 926 q 142 507 142 677 q 228 224 142 342 q 483 94 323 94 q 712 195 625 94 q 796 435 796 291 l 477 435 l 477 549 l 921 549 l 921 0 "},"ΰ":{x_min:0,x_max:617,ha:725,o:"m 524 800 l 414 800 l 414 925 l 524 925 l 524 800 m 183 800 l 73 800 l 73 925 l 183 925 l 183 800 m 617 352 q 540 93 617 199 q 308 -24 455 -24 q 76 93 161 -24 q 0 352 0 199 l 0 738 l 126 738 l 126 354 q 169 185 126 257 q 312 98 220 98 q 451 185 402 98 q 492 354 492 257 l 492 738 l 617 738 l 617 352 m 489 1040 l 300 819 l 216 819 l 351 1040 l 489 1040 "},"`":{x_min:0,x_max:138.890625,ha:236,o:"m 138 699 l 0 699 l 0 861 q 36 974 0 929 q 138 1041 72 1020 l 138 977 q 82 931 95 969 q 69 839 69 893 l 138 839 l 138 699 "},"·":{x_min:0,x_max:142,ha:239,o:"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 "},"Υ":{x_min:0.328125,x_max:819.515625,ha:889,o:"m 819 1013 l 482 416 l 482 0 l 342 0 l 342 416 l 0 1013 l 140 1013 l 411 533 l 679 1013 l 819 1013 "},r:{x_min:0,x_max:355.5625,ha:432,o:"m 355 621 l 343 621 q 179 569 236 621 q 122 411 122 518 l 122 0 l 0 0 l 0 737 l 117 737 l 117 604 q 204 719 146 686 q 355 753 262 753 l 355 621 "},x:{x_min:0,x_max:675,ha:764,o:"m 675 0 l 525 0 l 331 286 l 144 0 l 0 0 l 256 379 l 12 738 l 157 737 l 336 473 l 516 738 l 661 738 l 412 380 l 675 0 "},"μ":{x_min:0,x_max:696.609375,ha:747,o:"m 696 -4 q 628 -14 657 -14 q 498 97 513 -14 q 422 8 470 41 q 313 -24 374 -24 q 207 3 258 -24 q 120 80 157 31 l 120 -278 l 0 -278 l 0 738 l 124 738 l 124 343 q 165 172 124 246 q 308 82 216 82 q 451 177 402 82 q 492 358 492 254 l 492 738 l 616 738 l 616 214 q 623 136 616 160 q 673 92 636 92 q 696 95 684 92 l 696 -4 "},h:{x_min:0,x_max:615,ha:724,o:"m 615 472 l 615 0 l 490 0 l 490 454 q 456 590 490 535 q 338 654 416 654 q 186 588 251 654 q 122 436 122 522 l 122 0 l 0 0 l 0 1013 l 122 1013 l 122 633 q 218 727 149 694 q 362 760 287 760 q 552 676 484 760 q 615 472 615 600 "},".":{x_min:0,x_max:142,ha:239,o:"m 142 0 l 0 0 l 0 151 l 142 151 l 142 0 "},"φ":{x_min:-2,x_max:878,ha:974,o:"m 496 -279 l 378 -279 l 378 -17 q 101 88 204 -17 q -2 367 -2 194 q 68 626 -2 510 q 283 758 151 758 l 283 646 q 167 537 209 626 q 133 373 133 462 q 192 177 133 254 q 378 93 259 93 l 378 758 q 445 764 426 763 q 476 765 464 765 q 765 659 653 765 q 878 377 878 553 q 771 96 878 209 q 496 -17 665 -17 l 496 -279 m 496 93 l 514 93 q 687 183 623 93 q 746 380 746 265 q 691 569 746 491 q 522 658 629 658 l 496 656 l 496 93 "},";":{x_min:0,x_max:142,ha:239,o:"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 m 142 -12 q 105 -132 142 -82 q 0 -206 68 -182 l 0 -138 q 58 -82 43 -123 q 68 0 68 -56 l 0 0 l 0 151 l 142 151 l 142 -12 "},f:{x_min:0,x_max:378,ha:472,o:"m 378 638 l 246 638 l 246 0 l 121 0 l 121 638 l 0 638 l 0 738 l 121 738 q 137 935 121 887 q 290 1028 171 1028 q 320 1027 305 1028 q 378 1021 334 1026 l 378 908 q 323 918 346 918 q 257 870 273 918 q 246 780 246 840 l 246 738 l 378 738 l 378 638 "},"“":{x_min:1,x_max:348.21875,ha:454,o:"m 140 670 l 1 670 l 1 830 q 37 943 1 897 q 140 1011 74 990 l 140 947 q 82 900 97 940 q 68 810 68 861 l 140 810 l 140 670 m 348 670 l 209 670 l 209 830 q 245 943 209 897 q 348 1011 282 990 l 348 947 q 290 900 305 940 q 276 810 276 861 l 348 810 l 348 670 "},A:{x_min:0.03125,x_max:906.953125,ha:1008,o:"m 906 0 l 756 0 l 648 303 l 251 303 l 142 0 l 0 0 l 376 1013 l 529 1013 l 906 0 m 610 421 l 452 867 l 293 421 l 610 421 "},"6":{x_min:53,x_max:739,ha:792,o:"m 739 312 q 633 62 739 162 q 400 -31 534 -31 q 162 78 257 -31 q 53 439 53 206 q 178 859 53 712 q 441 986 284 986 q 643 912 559 986 q 732 713 732 833 l 601 713 q 544 830 594 786 q 426 875 494 875 q 268 793 331 875 q 193 517 193 697 q 301 597 240 570 q 427 624 362 624 q 643 540 552 624 q 739 312 739 451 m 603 298 q 540 461 603 400 q 404 516 484 516 q 268 461 323 516 q 207 300 207 401 q 269 137 207 198 q 405 83 325 83 q 541 137 486 83 q 603 298 603 197 "},"‘":{x_min:1,x_max:139.890625,ha:236,o:"m 139 670 l 1 670 l 1 830 q 37 943 1 897 q 139 1011 74 990 l 139 947 q 82 900 97 940 q 68 810 68 861 l 139 810 l 139 670 "},"ϊ":{x_min:-70,x_max:283,ha:361,o:"m 283 800 l 173 800 l 173 925 l 283 925 l 283 800 m 40 800 l -70 800 l -70 925 l 40 925 l 40 800 m 283 3 q 232 -10 257 -5 q 181 -15 206 -15 q 84 26 118 -15 q 41 200 41 79 l 41 737 l 166 737 l 167 215 q 171 141 167 157 q 225 101 182 101 q 247 103 238 101 q 283 112 256 104 l 283 3 "},"π":{x_min:-0.21875,x_max:773.21875,ha:857,o:"m 773 -7 l 707 -11 q 575 40 607 -11 q 552 174 552 77 l 552 226 l 552 626 l 222 626 l 222 0 l 97 0 l 97 626 l 0 626 l 0 737 l 773 737 l 773 626 l 676 626 l 676 171 q 695 103 676 117 q 773 90 714 90 l 773 -7 "},"ά":{x_min:0,x_max:765.5625,ha:809,o:"m 765 -4 q 698 -14 726 -14 q 564 97 586 -14 q 466 7 525 40 q 337 -26 407 -26 q 88 98 186 -26 q 0 369 0 212 q 88 637 0 525 q 337 760 184 760 q 465 727 407 760 q 563 637 524 695 l 563 738 l 685 738 l 685 222 q 693 141 685 168 q 748 94 708 94 q 765 95 760 94 l 765 -4 m 584 371 q 531 562 584 485 q 360 653 470 653 q 192 566 254 653 q 135 379 135 489 q 186 181 135 261 q 358 84 247 84 q 528 176 465 84 q 584 371 584 260 m 604 1040 l 415 819 l 332 819 l 466 1040 l 604 1040 "},O:{x_min:0,x_max:958,ha:1057,o:"m 485 1041 q 834 882 702 1041 q 958 512 958 734 q 834 136 958 287 q 481 -26 702 -26 q 126 130 261 -26 q 0 504 0 279 q 127 880 0 728 q 485 1041 263 1041 m 480 98 q 731 225 638 98 q 815 504 815 340 q 733 783 815 669 q 480 912 640 912 q 226 784 321 912 q 142 504 142 670 q 226 224 142 339 q 480 98 319 98 "},n:{x_min:0,x_max:615,ha:724,o:"m 615 463 l 615 0 l 490 0 l 490 454 q 453 592 490 537 q 331 656 410 656 q 178 585 240 656 q 117 421 117 514 l 117 0 l 0 0 l 0 738 l 117 738 l 117 630 q 218 728 150 693 q 359 764 286 764 q 552 675 484 764 q 615 463 615 593 "},"3":{x_min:54,x_max:737,ha:792,o:"m 737 284 q 635 55 737 141 q 399 -25 541 -25 q 156 52 248 -25 q 54 308 54 140 l 185 308 q 245 147 185 202 q 395 96 302 96 q 539 140 484 96 q 602 280 602 190 q 510 429 602 390 q 324 454 451 454 l 324 565 q 487 584 441 565 q 565 719 565 617 q 515 835 565 791 q 395 879 466 879 q 255 824 307 879 q 203 661 203 769 l 78 661 q 166 909 78 822 q 387 992 250 992 q 603 921 513 992 q 701 723 701 844 q 669 607 701 656 q 578 524 637 558 q 696 434 655 499 q 737 284 737 369 "},"9":{x_min:53,x_max:739,ha:792,o:"m 739 524 q 619 94 739 241 q 362 -32 516 -32 q 150 47 242 -32 q 59 244 59 126 l 191 244 q 246 129 191 176 q 373 82 301 82 q 526 161 466 82 q 597 440 597 255 q 363 334 501 334 q 130 432 216 334 q 53 650 53 521 q 134 880 53 786 q 383 986 226 986 q 659 841 566 986 q 739 524 739 719 m 388 449 q 535 514 480 449 q 585 658 585 573 q 535 805 585 744 q 388 873 480 873 q 242 809 294 873 q 191 658 191 745 q 239 514 191 572 q 388 449 292 449 "},l:{x_min:41,x_max:166,ha:279,o:"m 166 0 l 41 0 l 41 1013 l 166 1013 l 166 0 "},"¤":{x_min:40.09375,x_max:728.796875,ha:825,o:"m 728 304 l 649 224 l 512 363 q 383 331 458 331 q 256 363 310 331 l 119 224 l 40 304 l 177 441 q 150 553 150 493 q 184 673 150 621 l 40 818 l 119 898 l 267 749 q 321 766 291 759 q 384 773 351 773 q 447 766 417 773 q 501 749 477 759 l 649 898 l 728 818 l 585 675 q 612 618 604 648 q 621 553 621 587 q 591 441 621 491 l 728 304 m 384 682 q 280 643 318 682 q 243 551 243 604 q 279 461 243 499 q 383 423 316 423 q 487 461 449 423 q 525 553 525 500 q 490 641 525 605 q 384 682 451 682 "},"κ":{x_min:0,x_max:632.328125,ha:679,o:"m 632 0 l 482 0 l 225 384 l 124 288 l 124 0 l 0 0 l 0 738 l 124 738 l 124 446 l 433 738 l 596 738 l 312 466 l 632 0 "},"4":{x_min:48,x_max:742.453125,ha:792,o:"m 742 243 l 602 243 l 602 0 l 476 0 l 476 243 l 48 243 l 48 368 l 476 958 l 602 958 l 602 354 l 742 354 l 742 243 m 476 354 l 476 792 l 162 354 l 476 354 "},p:{x_min:0,x_max:685,ha:786,o:"m 685 364 q 598 96 685 205 q 350 -23 504 -23 q 121 89 205 -23 l 121 -278 l 0 -278 l 0 738 l 121 738 l 121 633 q 220 726 159 691 q 351 761 280 761 q 598 636 504 761 q 685 364 685 522 m 557 371 q 501 560 557 481 q 330 651 437 651 q 162 559 223 651 q 108 366 108 479 q 162 177 108 254 q 333 87 224 87 q 502 178 441 87 q 557 371 557 258 "},"‡":{x_min:0,x_max:777,ha:835,o:"m 458 238 l 458 0 l 319 0 l 319 238 l 0 238 l 0 360 l 319 360 l 319 681 l 0 683 l 0 804 l 319 804 l 319 1015 l 458 1013 l 458 804 l 777 804 l 777 683 l 458 683 l 458 360 l 777 360 l 777 238 l 458 238 "},"ψ":{x_min:0,x_max:808,ha:907,o:"m 465 -278 l 341 -278 l 341 -15 q 87 102 180 -15 q 0 378 0 210 l 0 739 l 133 739 l 133 379 q 182 195 133 275 q 341 98 242 98 l 341 922 l 465 922 l 465 98 q 623 195 563 98 q 675 382 675 278 l 675 742 l 808 742 l 808 381 q 720 104 808 213 q 466 -13 627 -13 l 465 -278 "},"η":{x_min:0.78125,x_max:697,ha:810,o:"m 697 -278 l 572 -278 l 572 454 q 540 587 572 536 q 425 650 501 650 q 271 579 337 650 q 206 420 206 509 l 206 0 l 81 0 l 81 489 q 73 588 81 562 q 0 644 56 644 l 0 741 q 68 755 38 755 q 158 720 124 755 q 200 630 193 686 q 297 726 234 692 q 434 761 359 761 q 620 692 544 761 q 697 516 697 624 l 697 -278 "}},cssFontWeight:"normal",ascender:1189,underlinePosition:-100,cssFontStyle:"normal",boundingBox:{yMin:-334,xMin:-111,yMax:1189,xMax:1672},resolution:1000,original_font_information:{postscript_name:"Helvetiker-Regular",version_string:"Version 1.00 2004 initial release",vendor_url:"http://www.magenta.gr/",full_font_name:"Helvetiker",font_family_name:"Helvetiker",copyright:"Copyright (c) Μagenta ltd, 2004",description:"",trademark:"",designer:"",designer_url:"",unique_font_identifier:"Μagenta ltd:Helvetiker:22-10-104",license_url:"http://www.ellak.gr/fonts/MgOpen/license.html",license_description:'Copyright (c) 2004 by MAGENTA Ltd. All Rights Reserved.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: \r\n\r\nThe above copyright and this permission notice shall be included in all copies of one or more of the Font Software typefaces.\r\n\r\nThe Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing the word "MgOpen", or if the modifications are accepted for inclusion in the Font Software itself by the each appointed Administrator.\r\n\r\nThis License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "MgOpen" name.\r\n\r\nThe Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. \r\n\r\nTHE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL MAGENTA OR PERSONS OR BODIES IN CHARGE OF ADMINISTRATION AND MAINTENANCE OF THE FONT SOFTWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.',manufacturer_name:"Μagenta ltd",font_sub_family_name:"Regular"},descender:-334,familyName:"Helvetiker",lineHeight:1522,underlineThickness:50})}THREE.OrbitControls=function(object,domElement,localElement){this.object=object;this.domElement=(domElement!==undefined)?domElement:document;this.localElement=(localElement!==undefined)?localElement:document;this.enabled=true;this.target=new THREE.Vector3();this.center=this.target;this.noZoom=false;this.zoomSpeed=1;this.minDistance=0;this.maxDistance=Infinity;this.noRotate=false;this.rotateSpeed=1;this.noPan=false;this.keyPanSpeed=7;this.autoRotate=false;this.autoRotateSpeed=2;this.minPolarAngle=0;this.maxPolarAngle=Math.PI;this.noKeys=false;this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40};var scope=this;var EPS=0.000001;var rotateStart=new THREE.Vector2();var rotateEnd=new THREE.Vector2();var rotateDelta=new THREE.Vector2();var panStart=new THREE.Vector2();var panEnd=new THREE.Vector2();var panDelta=new THREE.Vector2();var dollyStart=new THREE.Vector2();var dollyEnd=new THREE.Vector2();var dollyDelta=new THREE.Vector2();var phiDelta=0;var thetaDelta=0;var scale=1;var pan=new THREE.Vector3();var lastPosition=new THREE.Vector3();var STATE={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY:4,TOUCH_PAN:5};var state=STATE.NONE;var changeEvent={type:"change"};this.rotateLeft=function(angle){if(angle===undefined){angle=getAutoRotationAngle()}thetaDelta-=angle};this.rotateUp=function(angle){if(angle===undefined){angle=getAutoRotationAngle()}phiDelta-=angle};this.panLeft=function(distance){var panOffset=new THREE.Vector3();var te=this.object.matrix.elements;panOffset.set(te[0],te[1],te[2]);panOffset.multiplyScalar(-distance);pan.add(panOffset)};this.panUp=function(distance){var panOffset=new THREE.Vector3();var te=this.object.matrix.elements;panOffset.set(te[4],te[5],te[6]);panOffset.multiplyScalar(distance);pan.add(panOffset)};this.pan=function(delta){var element=scope.domElement===document?scope.domElement.body:scope.domElement;if(scope.object.fov!==undefined){var position=scope.object.position;var offset=position.clone().sub(scope.target);var targetDistance=offset.length();targetDistance*=Math.tan((scope.object.fov/2)*Math.PI/180);scope.panLeft(2*delta.x*targetDistance/element.clientHeight);scope.panUp(2*delta.y*targetDistance/element.clientHeight)}else{if(scope.object.top!==undefined){scope.panLeft(delta.x*(scope.object.right-scope.object.left)/element.clientWidth);scope.panUp(delta.y*(scope.object.top-scope.object.bottom)/element.clientHeight)}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.")}}};this.dollyIn=function(dollyScale){if(dollyScale===undefined){dollyScale=getZoomScale()}scale/=dollyScale};this.dollyOut=function(dollyScale){if(dollyScale===undefined){dollyScale=getZoomScale()}scale*=dollyScale};this.update=function(){var position=this.object.position;var offset=position.clone().sub(this.target);var theta=Math.atan2(offset.x,offset.z);var phi=Math.atan2(Math.sqrt(offset.x*offset.x+offset.z*offset.z),offset.y);if(this.autoRotate){this.rotateLeft(getAutoRotationAngle())}theta+=thetaDelta;phi+=phiDelta;phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,phi));phi=Math.max(EPS,Math.min(Math.PI-EPS,phi));var radius=offset.length()*scale;radius=Math.max(this.minDistance,Math.min(this.maxDistance,radius));this.target.add(pan);offset.x=radius*Math.sin(phi)*Math.sin(theta);offset.y=radius*Math.cos(phi);offset.z=radius*Math.sin(phi)*Math.cos(theta);position.copy(this.target).add(offset);this.object.lookAt(this.target);thetaDelta=0;phiDelta=0;scale=1;pan.set(0,0,0);if(lastPosition.distanceTo(this.object.position)>0){this.dispatchEvent(changeEvent);lastPosition.copy(this.object.position)}};function getAutoRotationAngle(){return 2*Math.PI/60/60*scope.autoRotateSpeed}function getZoomScale(){return Math.pow(0.95,scope.zoomSpeed)}function onMouseDown(event){if(scope.enabled===false){return}event.preventDefault();if(event.button===0){if(scope.noRotate===true){return}state=STATE.ROTATE;rotateStart.set(event.clientX,event.clientY)}else{if(event.button===1){if(scope.noZoom===true){return}state=STATE.DOLLY;dollyStart.set(event.clientX,event.clientY)}else{if(event.button===2){if(scope.noPan===true){return}state=STATE.PAN;panStart.set(event.clientX,event.clientY)}}}scope.domElement.addEventListener("mousemove",onMouseMove,false);scope.domElement.addEventListener("mouseup",onMouseUp,false)}function onMouseMove(event){if(scope.enabled===false){return}event.preventDefault();var element=scope.domElement===document?scope.domElement.body:scope.domElement;if(state===STATE.ROTATE){if(scope.noRotate===true){return}rotateEnd.set(event.clientX,event.clientY);rotateDelta.subVectors(rotateEnd,rotateStart);scope.rotateLeft(2*Math.PI*rotateDelta.x/element.clientWidth*scope.rotateSpeed);scope.rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight*scope.rotateSpeed);rotateStart.copy(rotateEnd)}else{if(state===STATE.DOLLY){if(scope.noZoom===true){return}dollyEnd.set(event.clientX,event.clientY);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){scope.dollyIn()}else{scope.dollyOut()}dollyStart.copy(dollyEnd)}else{if(state===STATE.PAN){if(scope.noPan===true){return}panEnd.set(event.clientX,event.clientY);panDelta.subVectors(panEnd,panStart);scope.pan(panDelta);panStart.copy(panEnd)}}}scope.update()}function onMouseUp(){if(scope.enabled===false){return}scope.domElement.removeEventListener("mousemove",onMouseMove,false);scope.domElement.removeEventListener("mouseup",onMouseUp,false);state=STATE.NONE}function onMouseWheel(event){if(scope.enabled===false||scope.noZoom===true){return}var delta=0;if(event.wheelDelta){delta=event.wheelDelta}else{if(event.detail){delta=-event.detail}}if(delta>0){scope.dollyOut()}else{scope.dollyIn()}}function onKeyDown(event){if(scope.enabled===false){return}if(scope.noKeys===true){return}if(scope.noPan===true){return}var needUpdate=false;switch(event.keyCode){case scope.keys.UP:scope.pan(new THREE.Vector2(0,scope.keyPanSpeed));needUpdate=true;break;case scope.keys.BOTTOM:scope.pan(new THREE.Vector2(0,-scope.keyPanSpeed));needUpdate=true;break;case scope.keys.LEFT:scope.pan(new THREE.Vector2(scope.keyPanSpeed,0));needUpdate=true;break;case scope.keys.RIGHT:scope.pan(new THREE.Vector2(-scope.keyPanSpeed,0));needUpdate=true;break}if(needUpdate){scope.update()}}function touchstart(event){if(scope.enabled===false){return}switch(event.touches.length){case 1:if(scope.noRotate===true){return}state=STATE.TOUCH_ROTATE;rotateStart.set(event.touches[0].pageX,event.touches[0].pageY);break;case 2:if(scope.noZoom===true){return}state=STATE.TOUCH_DOLLY;var dx=event.touches[0].pageX-event.touches[1].pageX;var dy=event.touches[0].pageY-event.touches[1].pageY;var distance=Math.sqrt(dx*dx+dy*dy);dollyStart.set(0,distance);break;case 3:if(scope.noPan===true){return}state=STATE.TOUCH_PAN;panStart.set(event.touches[0].pageX,event.touches[0].pageY);break;default:state=STATE.NONE}}function touchmove(event){if(scope.enabled===false){return}event.preventDefault();event.stopPropagation();var element=scope.domElement===document?scope.domElement.body:scope.domElement;switch(event.touches.length){case 1:if(scope.noRotate===true){return}if(state!==STATE.TOUCH_ROTATE){return}rotateEnd.set(event.touches[0].pageX,event.touches[0].pageY);rotateDelta.subVectors(rotateEnd,rotateStart);scope.rotateLeft(2*Math.PI*rotateDelta.x/element.clientWidth*scope.rotateSpeed);scope.rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight*scope.rotateSpeed);rotateStart.copy(rotateEnd);break;case 2:if(scope.noZoom===true){return}if(state!==STATE.TOUCH_DOLLY){return}var dx=event.touches[0].pageX-event.touches[1].pageX;var dy=event.touches[0].pageY-event.touches[1].pageY;var distance=Math.sqrt(dx*dx+dy*dy);dollyEnd.set(0,distance);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){scope.dollyOut()}else{scope.dollyIn()}dollyStart.copy(dollyEnd);break;case 3:if(scope.noPan===true){return}if(state!==STATE.TOUCH_PAN){return}panEnd.set(event.touches[0].pageX,event.touches[0].pageY);panDelta.subVectors(panEnd,panStart);scope.pan(panDelta);panStart.copy(panEnd);break;default:state=STATE.NONE}}function touchend(){if(scope.enabled===false){return}state=STATE.NONE}this.domElement.addEventListener("contextmenu",function(event){event.preventDefault()},false);this.localElement.addEventListener("mousedown",onMouseDown,false);this.domElement.addEventListener("mousewheel",onMouseWheel,false);this.domElement.addEventListener("DOMMouseScroll",onMouseWheel,false);this.domElement.addEventListener("keydown",onKeyDown,false);this.localElement.addEventListener("touchstart",touchstart,false);this.domElement.addEventListener("touchend",touchend,false);this.domElement.addEventListener("touchmove",touchmove,false)};THREE.OrbitControls.prototype=Object.create(THREE.EventDispatcher.prototype);THREE.RenderableObject=function(){this.id=0;this.object=null;this.z=0;this.renderOrder=0};THREE.RenderableFace=function(){this.id=0;this.v1=new THREE.RenderableVertex();this.v2=new THREE.RenderableVertex();this.v3=new THREE.RenderableVertex();this.normalModel=new THREE.Vector3();this.vertexNormalsModel=[new THREE.Vector3(),new THREE.Vector3(),new THREE.Vector3()];this.vertexNormalsLength=0;this.color=new THREE.Color();this.material=null;this.uvs=[new THREE.Vector2(),new THREE.Vector2(),new THREE.Vector2()];this.z=0;this.renderOrder=0};THREE.RenderableVertex=function(){this.position=new THREE.Vector3();this.positionWorld=new THREE.Vector3();this.positionScreen=new THREE.Vector4();this.visible=true};THREE.RenderableVertex.prototype.copy=function(vertex){this.positionWorld.copy(vertex.positionWorld);this.positionScreen.copy(vertex.positionScreen)};THREE.RenderableLine=function(){this.id=0;this.v1=new THREE.RenderableVertex();this.v2=new THREE.RenderableVertex();this.vertexColors=[new THREE.Color(),new THREE.Color()];this.material=null;this.z=0;this.renderOrder=0};THREE.RenderableSprite=function(){this.id=0;this.object=null;this.x=0;this.y=0;this.z=0;this.rotation=0;this.scale=new THREE.Vector2();this.material=null;this.renderOrder=0};THREE.Projector=function(){var _object,_objectCount,_objectPool=[],_objectPoolLength=0,_vertex,_vertexCount,_vertexPool=[],_vertexPoolLength=0,_face,_faceCount,_facePool=[],_facePoolLength=0,_line,_lineCount,_linePool=[],_linePoolLength=0,_sprite,_spriteCount,_spritePool=[],_spritePoolLength=0,_renderData={objects:[],lights:[],elements:[]},_vector3=new THREE.Vector3(),_vector4=new THREE.Vector4(),_clipBox=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),_boundingBox=new THREE.Box3(),_points3=new Array(3),_points4=new Array(4),_viewMatrix=new THREE.Matrix4(),_viewProjectionMatrix=new THREE.Matrix4(),_modelMatrix,_modelViewProjectionMatrix=new THREE.Matrix4(),_normalMatrix=new THREE.Matrix3(),_frustum=new THREE.Frustum(),_clippedVertex1PositionScreen=new THREE.Vector4(),_clippedVertex2PositionScreen=new THREE.Vector4();this.projectVector=function(vector,camera){console.warn("THREE.Projector: .projectVector() is now vector.project().");vector.project(camera)};this.unprojectVector=function(vector,camera){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject().");vector.unproject(camera)};this.pickingRay=function(vector,camera){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")};var RenderList=function(){var normals=[];var uvs=[];var object=null;var material=null;var normalMatrix=new THREE.Matrix3();var setObject=function(value){object=value;material=object.material;normalMatrix.getNormalMatrix(object.matrixWorld);normals.length=0;uvs.length=0};var projectVertex=function(vertex){var position=vertex.position;var positionWorld=vertex.positionWorld;var positionScreen=vertex.positionScreen;positionWorld.copy(position).applyMatrix4(_modelMatrix);positionScreen.copy(positionWorld).applyMatrix4(_viewProjectionMatrix);var invW=1/positionScreen.w;positionScreen.x*=invW;positionScreen.y*=invW;positionScreen.z*=invW;vertex.visible=positionScreen.x>=-1&&positionScreen.x<=1&&positionScreen.y>=-1&&positionScreen.y<=1&&positionScreen.z>=-1&&positionScreen.z<=1};var pushVertex=function(x,y,z){_vertex=getNextVertexInPool();_vertex.position.set(x,y,z);projectVertex(_vertex)};var pushNormal=function(x,y,z){normals.push(x,y,z)};var pushUv=function(x,y){uvs.push(x,y)};var checkTriangleVisibility=function(v1,v2,v3){if(v1.visible===true||v2.visible===true||v3.visible===true){return true}_points3[0]=v1.positionScreen;_points3[1]=v2.positionScreen;_points3[2]=v3.positionScreen;return _clipBox.isIntersectionBox(_boundingBox.setFromPoints(_points3))};var checkBackfaceCulling=function(v1,v2,v3){return((v3.positionScreen.x-v1.positionScreen.x)*(v2.positionScreen.y-v1.positionScreen.y)-(v3.positionScreen.y-v1.positionScreen.y)*(v2.positionScreen.x-v1.positionScreen.x))<0};var pushLine=function(a,b){var v1=_vertexPool[a];var v2=_vertexPool[b];_line=getNextLineInPool();_line.id=object.id;_line.v1.copy(v1);_line.v2.copy(v2);_line.z=(v1.positionScreen.z+v2.positionScreen.z)/2;_line.renderOrder=object.renderOrder;_line.material=object.material;_renderData.elements.push(_line)};var pushTriangle=function(a,b,c){var v1=_vertexPool[a];var v2=_vertexPool[b];var v3=_vertexPool[c];if(checkTriangleVisibility(v1,v2,v3)===false){return}if(material.side===THREE.DoubleSide||checkBackfaceCulling(v1,v2,v3)===true){_face=getNextFaceInPool();_face.id=object.id;_face.v1.copy(v1);_face.v2.copy(v2);_face.v3.copy(v3);_face.z=(v1.positionScreen.z+v2.positionScreen.z+v3.positionScreen.z)/3;_face.renderOrder=object.renderOrder;_face.normalModel.fromArray(normals,a*3);_face.normalModel.applyMatrix3(normalMatrix).normalize();for(var i=0;i<3;i++){var normal=_face.vertexNormalsModel[i];normal.fromArray(normals,arguments[i]*3);normal.applyMatrix3(normalMatrix).normalize();var uv=_face.uvs[i];uv.fromArray(uvs,arguments[i]*2)}_face.vertexNormalsLength=3;_face.material=object.material;_renderData.elements.push(_face)}};return{setObject:setObject,projectVertex:projectVertex,checkTriangleVisibility:checkTriangleVisibility,checkBackfaceCulling:checkBackfaceCulling,pushVertex:pushVertex,pushNormal:pushNormal,pushUv:pushUv,pushLine:pushLine,pushTriangle:pushTriangle}};var renderList=new RenderList();this.projectScene=function(scene,camera,sortObjects,sortElements){_faceCount=0;_lineCount=0;_spriteCount=0;_renderData.elements.length=0;if(scene.autoUpdate===true){scene.updateMatrixWorld()}if(camera.parent===null){camera.updateMatrixWorld()}_viewMatrix.copy(camera.matrixWorldInverse.getInverse(camera.matrixWorld));_viewProjectionMatrix.multiplyMatrices(camera.projectionMatrix,_viewMatrix);_frustum.setFromMatrix(_viewProjectionMatrix);_objectCount=0;_renderData.objects.length=0;_renderData.lights.length=0;scene.traverseVisible(function(object){if(object instanceof THREE.Light){_renderData.lights.push(object)}else{if(object instanceof THREE.Mesh||object instanceof THREE.Line||object instanceof THREE.Sprite){var material=object.material;if(material.visible===false){return}if(object.frustumCulled===false||_frustum.intersectsObject(object)===true){_object=getNextObjectInPool();_object.id=object.id;_object.object=object;_vector3.setFromMatrixPosition(object.matrixWorld);_vector3.applyProjection(_viewProjectionMatrix);_object.z=_vector3.z;_object.renderOrder=object.renderOrder;_renderData.objects.push(_object)}}}});if(sortObjects===true){_renderData.objects.sort(painterSort)}for(var o=0,ol=_renderData.objects.length;o0){for(var o=0;o0){continue}v2=_vertexPool[_vertexCount-2];_clippedVertex1PositionScreen.copy(v1.positionScreen);_clippedVertex2PositionScreen.copy(v2.positionScreen);if(clipLine(_clippedVertex1PositionScreen,_clippedVertex2PositionScreen)===true){_clippedVertex1PositionScreen.multiplyScalar(1/_clippedVertex1PositionScreen.w);_clippedVertex2PositionScreen.multiplyScalar(1/_clippedVertex2PositionScreen.w);_line=getNextLineInPool();_line.id=object.id;_line.v1.positionScreen.copy(_clippedVertex1PositionScreen);_line.v2.positionScreen.copy(_clippedVertex2PositionScreen);_line.z=Math.max(_clippedVertex1PositionScreen.z,_clippedVertex2PositionScreen.z);_line.renderOrder=object.renderOrder;_line.material=object.material;if(object.material.vertexColors===THREE.VertexColors){_line.vertexColors[0].copy(object.geometry.colors[v]);_line.vertexColors[1].copy(object.geometry.colors[v-1])}_renderData.elements.push(_line)}}}}}else{if(object instanceof THREE.Sprite){_vector4.set(_modelMatrix.elements[12],_modelMatrix.elements[13],_modelMatrix.elements[14],1);_vector4.applyMatrix4(_viewProjectionMatrix);var invW=1/_vector4.w;_vector4.z*=invW;if(_vector4.z>=-1&&_vector4.z<=1){_sprite=getNextSpriteInPool();_sprite.id=object.id;_sprite.x=_vector4.x*invW;_sprite.y=_vector4.y*invW;_sprite.z=_vector4.z;_sprite.renderOrder=object.renderOrder;_sprite.object=object;_sprite.rotation=object.rotation;_sprite.scale.x=object.scale.x*Math.abs(_sprite.x-(_vector4.x+camera.projectionMatrix.elements[0])/(_vector4.w+camera.projectionMatrix.elements[12]));_sprite.scale.y=object.scale.y*Math.abs(_sprite.y-(_vector4.y+camera.projectionMatrix.elements[5])/(_vector4.w+camera.projectionMatrix.elements[13]));_sprite.material=object.material;_renderData.elements.push(_sprite)}}}}}if(sortElements===true){_renderData.elements.sort(painterSort)}return _renderData};function getNextObjectInPool(){if(_objectCount===_objectPoolLength){var object=new THREE.RenderableObject();_objectPool.push(object);_objectPoolLength++;_objectCount++;return object}return _objectPool[_objectCount++]}function getNextVertexInPool(){if(_vertexCount===_vertexPoolLength){var vertex=new THREE.RenderableVertex();_vertexPool.push(vertex);_vertexPoolLength++;_vertexCount++;return vertex}return _vertexPool[_vertexCount++]}function getNextFaceInPool(){if(_faceCount===_facePoolLength){var face=new THREE.RenderableFace();_facePool.push(face);_facePoolLength++;_faceCount++;return face}return _facePool[_faceCount++]}function getNextLineInPool(){if(_lineCount===_linePoolLength){var line=new THREE.RenderableLine();_linePool.push(line);_linePoolLength++;_lineCount++;return line}return _linePool[_lineCount++]}function getNextSpriteInPool(){if(_spriteCount===_spritePoolLength){var sprite=new THREE.RenderableSprite();_spritePool.push(sprite);_spritePoolLength++;_spriteCount++;return sprite}return _spritePool[_spriteCount++]}function painterSort(a,b){if(a.renderOrder!==b.renderOrder){return a.renderOrder-b.renderOrder}else{if(a.z!==b.z){return b.z-a.z}else{if(a.id!==b.id){return a.id-b.id}else{return 0}}}}function clipLine(s1,s2){var alpha1=0,alpha2=1,bc1near=s1.z+s1.w,bc2near=s2.z+s2.w,bc1far=-s1.z+s1.w,bc2far=-s2.z+s2.w;if(bc1near>=0&&bc2near>=0&&bc1far>=0&&bc2far>=0){return true}else{if((bc1near<0&&bc2near<0)||(bc1far<0&&bc2far<0)){return false}else{if(bc1near<0){alpha1=Math.max(alpha1,bc1near/(bc1near-bc2near))}else{if(bc2near<0){alpha2=Math.min(alpha2,bc1near/(bc1near-bc2near))}}if(bc1far<0){alpha1=Math.max(alpha1,bc1far/(bc1far-bc2far))}else{if(bc2far<0){alpha2=Math.min(alpha2,bc1far/(bc1far-bc2far))}}if(alpha20){continue}outputColor.add(diffuseColor)}}else{if(material instanceof THREE.MeshLambertMaterial||material instanceof THREE.MeshPhongMaterial){var normalComputed=false;for(var i=0,l=lights.length;i0){continue}if(normalComputed===false){computePixelNormal(normalVector,localPoint,material.shading,face,vertices);normalVector.applyMatrix3(_object.normalMatrix).normalize();normalComputed=true}var attenuation=1;if(light.physicalAttenuation===true){attenuation=lightVector.length();attenuation=1/(attenuation*attenuation)}lightVector.normalize();var dot=Math.max(normalVector.dot(lightVector),0);var diffuseIntensity=dot*light.intensity;lightContribution.copy(diffuseColor);lightContribution.multiply(lightColor);lightContribution.multiplyScalar(diffuseIntensity*attenuation);outputColor.add(lightContribution);if(material instanceof THREE.MeshPhongMaterial){halfVector.addVectors(lightVector,eyeVector).normalize();var dotNormalHalf=Math.max(normalVector.dot(halfVector),0);var specularIntensity=Math.max(Math.pow(dotNormalHalf,material.shininess),0)*diffuseIntensity;var specularNormalization=(material.shininess+2)/8;specularColor.copyGammaToLinear(material.specular);var alpha=Math.pow(Math.max(1-lightVector.dot(halfVector),0),5);schlick.r=specularColor.r+(1-specularColor.r)*alpha;schlick.g=specularColor.g+(1-specularColor.g)*alpha;schlick.b=specularColor.b+(1-specularColor.b)*alpha;lightContribution.copy(schlick);lightContribution.multiply(lightColor);lightContribution.multiplyScalar(specularNormalization*specularIntensity*attenuation);outputColor.add(lightContribution)}}}}var reflectivity=material.reflectivity;if((material.mirror||material.glass)&&reflectivity>0&&recursionDepth=canvasWidth){blockX=0;blockY+=blockSize;if(blockY>=canvasHeight){scope.dispatchEvent({type:"complete"});return}}context.fillRect(blockX,blockY,blockSize,blockSize);animationFrameId=requestAnimationFrame(function(){renderBlock(blockX,blockY)})}}());this.render=function(scene,camera){if(this.autoClear===true){this.clear()}cancelAnimationFrame(animationFrameId);if(scene.autoUpdate===true){scene.updateMatrixWorld()}if(camera.parent===null){camera.updateMatrixWorld()}camera.matrixWorldInverse.getInverse(camera.matrixWorld);cameraPosition.setFromMatrixPosition(camera.matrixWorld);cameraNormalMatrix.getNormalMatrix(camera.matrixWorld);origin.copy(cameraPosition);perspective=0.5/Math.tan(THREE.Math.degToRad(camera.fov*0.5))*canvasHeight;objects=scene.children;lights.length=0;scene.traverse(function(object){if(object instanceof THREE.Light){lights.push(object)}if(cache[object.id]===undefined){cache[object.id]={normalMatrix:new THREE.Matrix3(),inverseMatrix:new THREE.Matrix4()}}modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse,object.matrixWorld);var _object=cache[object.id];_object.normalMatrix.getNormalMatrix(modelViewMatrix);_object.inverseMatrix.getInverse(object.matrixWorld)});renderBlock(0,0)}};THREE.EventDispatcher.prototype.apply(THREE.RaytracingRenderer.prototype);THREE.ShaderMaterial=function(parameters){THREE.Material.call(this);this.type="ShaderMaterial";this.defines={};this.uniforms={};this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}";this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";this.shading=THREE.SmoothShading;this.linewidth=1;this.wireframe=false;this.wireframeLinewidth=1;this.fog=false;this.lights=false;this.vertexColors=THREE.NoColors;this.skinning=false;this.morphTargets=false;this.morphNormals=false;this.derivatives=false;this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]};this.index0AttributeName=undefined;if(parameters!==undefined){if(parameters.attributes!==undefined){console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.")}this.setValues(parameters)}};THREE.ShaderMaterial.prototype=Object.create(THREE.Material.prototype);THREE.ShaderMaterial.prototype.constructor=THREE.ShaderMaterial;THREE.ShaderMaterial.prototype.copy=function(source){THREE.Material.prototype.copy.call(this,source);this.fragmentShader=source.fragmentShader;this.vertexShader=source.vertexShader;this.uniforms=THREE.UniformsUtils.clone(source.uniforms);this.attributes=source.attributes;this.defines=source.defines;this.shading=source.shading;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;this.fog=source.fog;this.lights=source.lights;this.vertexColors=source.vertexColors;this.skinning=source.skinning;this.morphTargets=source.morphTargets;this.morphNormals=source.morphNormals;this.derivatives=source.derivatives;return this};THREE.ShaderMaterial.prototype.toJSON=function(meta){var data=THREE.Material.prototype.toJSON.call(this,meta);data.uniforms=this.uniforms;data.attributes=this.attributes;data.vertexShader=this.vertexShader;data.fragmentShader=this.fragmentShader;return data};THREE.TextGeometry=function(text,parameters){parameters=parameters||{};var textShapes=THREE.FontUtils.generateShapes(text,parameters);parameters.amount=parameters.height!==undefined?parameters.height:50;if(parameters.bevelThickness===undefined){parameters.bevelThickness=10}if(parameters.bevelSize===undefined){parameters.bevelSize=8}if(parameters.bevelEnabled===undefined){parameters.bevelEnabled=false}THREE.ExtrudeGeometry.call(this,textShapes,parameters);this.type="TextGeometry"};THREE.TextGeometry.prototype=Object.create(THREE.ExtrudeGeometry.prototype);THREE.TextGeometry.prototype.constructor=THREE.TextGeometry;var Action={cursorSel:null,mouseVector:null,oldSel:null,objHover:null,init:function(){this.mouseVector=new THREE.Vector3();container.addEventListener("click",this.onMouseClick,false)},onMouseHover:function(e){e.preventDefault();this.mouseVector=new THREE.Vector3((e.clientX/container.offsetWidth)*2-1,-(e.clientY/container.offsetHeight)*2+1,1);this.mouseVector.unproject(camera);var raycaster=new THREE.Raycaster(camera.position,this.mouseVector.sub(camera.position).normalize());var intersects=raycaster.intersectObjects(scene.children);if(intersects.length>0){if(intersects[0].object.geometry.type!="SphereGeometry"){return}$("#hud #infos").html("Intersected object: "+intersects.length+" - "+intersects[0].object.name);Action.hoverOnObj(intersects[0].object)}},hoverOnObj:function(obj){if(this.objHover!==null){this.objHover.material=Ed3d.material.white}obj.material=Ed3d.material.orange;this.objHover=obj},onMouseClick:function(e){e.preventDefault();this.mouseVector=new THREE.Vector3((e.clientX/container.offsetWidth)*2-1,-(e.clientY/container.offsetHeight)*2+1,1);this.mouseVector.unproject(camera);var raycaster=new THREE.Raycaster(camera.position,this.mouseVector.sub(camera.position).normalize());var intersects=raycaster.intersectObjects(scene.children);if(intersects.length>0){if(intersects[0].object.geometry.type!="SphereGeometry"){return}$("#hud #infos").html("

"+intersects[0].object.name+"

Intersected object: "+intersects.length);Action.moveToObj(intersects[0].object)}},moveToObj:function(obj){obj.material=Ed3d.material.selected;this.addCusorOnSelect(obj.position.x,obj.position.y,obj.position.z);camera.position.set(obj.position.x,obj.position.y+100,obj.position.z-100);camera.rotation.set(0,0,0);controls.center.set(obj.position.x,obj.position.y,obj.position.z);controls.update();render();var textAdd=obj.name;textAdd+=" - "+Math.round(obj.position.x)+", "+Math.round(obj.position.y)+", "+Math.round(obj.position.z);Ed3d.addText(textAdd,obj.position.x,obj.position.y,obj.position.z,5);this.moveGridTo(obj)},addCusorOnSelect:function(x,y,z){if(this.cursorSel==null){this.cursorSel=new THREE.Object3D();var geometryL=new THREE.TorusGeometry(12,0.4,3,30);var selection=new THREE.Mesh(geometryL,Ed3d.material.selected);selection.rotation.x=Math.PI/2;this.cursorSel.add(selection);var geometryCone=new THREE.CylinderGeometry(0,5,16,4,1,false);var cone=new THREE.Mesh(geometryCone,Ed3d.material.selected);cone.position.set(0,20,0);cone.rotation.x=Math.PI;this.cursorSel.add(cone);var geometryConeInner=new THREE.CylinderGeometry(0,4,16,4,1,false);var coneInner=new THREE.Mesh(geometryConeInner,Ed3d.material.black);coneInner.position.set(0,20.1,0);coneInner.rotation.x=Math.PI;this.cursorSel.add(coneInner);scene.add(this.cursorSel)}this.cursorSel.position.set(x,y,z);this.cursorSel.scale.set(1,1,1)},moveGridTo:function(obj){var posX=Math.floor(obj.position.x/1000)*1000;var posY=Math.floor(obj.position.y);var posZ=Math.floor(obj.position.z/1000)*1000;Ed3d.grid1H.obj.position.set(posX,posY,posZ);Ed3d.grid1K.obj.position.set(posX,posY,posZ)}};var Grid={obj:null,size:null,init:function(size,color){this.size=size;this.obj=new THREE.GridHelper(1000000,size);this.obj.setColors(color,color);scene.add(this.obj);this.obj.customUpdateCallback=this.addCoords;return this},init2:function(size,color){alert(this.size)},addCoords:function(){var textShow="TEST";var options={font:"helvetiker",weight:"normal",style:"normal",size:this.size/20,curveSegments:10};if(this.coordGrid!=null){if(Math.abs(camera.position.y-this.obj.position.y)>this.size*10){this.coordGrid.visible=false;return}this.coordGrid.visible=true;var posX=Math.ceil(controls.target.x/this.size)*this.size;var posZ=Math.ceil(controls.target.z/this.size)*this.size;this.coordGrid.position.set(posX,this.obj.position.y,posZ);var textCoords=posX+" : "+this.obj.position.y+" : "+posZ;var textShapes=THREE.FontUtils.generateShapes(textCoords,options);var text=new THREE.ShapeGeometry(textShapes);this.coordGrid.geometry=text;this.coordGrid.geometry.needsUpdate=true}else{var textShapes=THREE.FontUtils.generateShapes(textShow,options);var text=new THREE.ShapeGeometry(textShapes);this.coordGrid=new THREE.Mesh(text,Ed3d.material.darkblue);this.coordGrid.position.set(this.obj.position.x,this.obj.position.y,this.obj.position.z);this.coordGrid.rotation.x=-Math.PI/2;this.coordGrid.rotation.z=-Math.PI;scene.add(this.coordGrid)}}};var HUD={container:null,create:function(container){this.container=container;$("body").append('
');$("#hud").append('

Infos

Routes

Filter

X Test 1

Test 2

Test 3

Test 4

Options

Distance obj

Fog

')},init:function(){this.initHudAction()},initHudAction:function(){$("#hud").hover(function(){controls.enabled=false},function(){controls.enabled=true});$(".map_link").click(function(e){e.preventDefault();var elId=$(this).data("route");Action.moveToObj(routes[elId])});$(".map_link span").click(function(e){e.preventDefault();var elId=$(this).parent().data("route");routes[elId].visible=!routes[elId].visible});$("#opt_distance").change(function(e){Ed3d.optDistObj=$(this).val()});$("#opt_fog").change(function(e){scene.fog.density=$(this).val()})},setRoute:function(idRoute,nameR){$("#routes").append('X'+nameR+"")}};var Route={createRoute:function(idRoute,route){var geometryL=new THREE.Geometry();var nameR="";$.each(route,function(key2,val){geometryL.vertices.push(new THREE.Vector3(val.x,val.y,val.z));var geometry=new THREE.SphereGeometry(3,10,10);var sphere=new THREE.Mesh(geometry,Ed3d.material.trd);sphere.position.set(val.x,val.y,val.z);scene.add(sphere);nameR+=val.name});routes[idRoute]=new THREE.Line(geometryL,Ed3d.material.line);scene.add(routes[idRoute]);HUD.setRoute(idRoute,nameR)}};var System={init:function(val){var geometry=new THREE.SphereGeometry(2,10,10);if(val.unlock==1){var sphere=new THREE.Mesh(geometry,Ed3d.material.white)}else{var sphere=new THREE.Mesh(geometry,Ed3d.material.orange)}sphere.position.set(parseInt(val.x),parseInt(val.y),parseInt(val.z));sphere.name=val.name;Ed3d.addText(val.name,val.x,val.y,val.z,10);return sphere}};THREE.BokehShader={uniforms:{tColor:{type:"t",value:null},tDepth:{type:"t",value:null},focus:{type:"f",value:1},aspect:{type:"f",value:1},aperture:{type:"f",value:0.025},maxblur:{type:"f",value:1}},vertexShader:["varying vec2 vUv;","void main() {","vUv = uv;","gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["varying vec2 vUv;","uniform sampler2D tColor;","uniform sampler2D tDepth;","uniform float maxblur;","uniform float aperture;","uniform float focus;","uniform float aspect;","void main() {","vec2 aspectcorrect = vec2( 1.0, aspect );","vec4 depth1 = texture2D( tDepth, vUv );","float factor = depth1.x - focus;","vec2 dofblur = vec2 ( clamp( factor * aperture, -maxblur, maxblur ) );","vec2 dofblur9 = dofblur * 0.9;","vec2 dofblur7 = dofblur * 0.7;","vec2 dofblur4 = dofblur * 0.4;","vec4 col = vec4( 0.0 );","col += texture2D( tColor, vUv.xy );","col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur );","col += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur9 );","col += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur9 );","col += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur9 );","col += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur9 );","col += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur9 );","col += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur9 );","col += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur9 );","col += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur9 );","col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur7 );","col += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur7 );","col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur7 );","col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur7 );","col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur7 );","col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur7 );","col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur7 );","col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur7 );","col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur4 );","col += texture2D( tColor, vUv.xy + ( vec2( 0.4, 0.0 ) * aspectcorrect ) * dofblur4 );","col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur4 );","col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur4 );","col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur4 );","col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur4 );","col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur4 );","col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur4 );","gl_FragColor = col / 41.0;","gl_FragColor.a = 1.0;","}"].join("\n")};THREE.CopyShader={uniforms:{tDiffuse:{type:"t",value:null},opacity:{type:"f",value:1}},vertexShader:["varying vec2 vUv;","void main() {","vUv = uv;","gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["uniform float opacity;","uniform sampler2D tDiffuse;","varying vec2 vUv;","void main() {","vec4 texel = texture2D( tDiffuse, vUv );","gl_FragColor = opacity * texel;","}"].join("\n")};THREE.AdaptiveToneMappingPass=function(adaptive,resolution){this.resolution=(resolution!==undefined)?resolution:256;this.needsInit=true;this.adaptive=adaptive!==undefined?!!adaptive:true;this.luminanceRT=null;this.previousLuminanceRT=null;this.currentLuminanceRT=null;if(THREE.CopyShader===undefined){console.error("THREE.AdaptiveToneMappingPass relies on THREE.CopyShader")}var copyShader=THREE.CopyShader;this.copyUniforms=THREE.UniformsUtils.clone(copyShader.uniforms);this.materialCopy=new THREE.ShaderMaterial({uniforms:this.copyUniforms,vertexShader:copyShader.vertexShader,fragmentShader:copyShader.fragmentShader,blending:THREE.NoBlending,depthTest:false});if(THREE.LuminosityShader===undefined){console.error("THREE.AdaptiveToneMappingPass relies on THREE.LuminosityShader")}this.materialLuminance=new THREE.ShaderMaterial({uniforms:THREE.UniformsUtils.clone(THREE.LuminosityShader.uniforms),vertexShader:THREE.LuminosityShader.vertexShader,fragmentShader:THREE.LuminosityShader.fragmentShader,blending:THREE.NoBlending});this.adaptLuminanceShader={defines:{MIP_LEVEL_1X1:(Math.log(this.resolution)/Math.log(2)).toFixed(1)},uniforms:{lastLum:{type:"t",value:null},currentLum:{type:"t",value:null},delta:{type:"f",value:0.016},tau:{type:"f",value:1}},vertexShader:["varying vec2 vUv;","void main() {","vUv = uv;","gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["varying vec2 vUv;","uniform sampler2D lastLum;","uniform sampler2D currentLum;","uniform float delta;","uniform float tau;","void main() {","vec4 lastLum = texture2D( lastLum, vUv, MIP_LEVEL_1X1 );","vec4 currentLum = texture2D( currentLum, vUv, MIP_LEVEL_1X1 );","float fLastLum = lastLum.r;","float fCurrentLum = currentLum.r;","fCurrentLum *= fCurrentLum;","float fAdaptedLum = fLastLum + (fCurrentLum - fLastLum) * (1.0 - exp(-delta * tau));","gl_FragColor = vec4( vec3( fAdaptedLum ), 1.0 );","}"].join("\n")};this.materialAdaptiveLum=new THREE.ShaderMaterial({uniforms:THREE.UniformsUtils.clone(this.adaptLuminanceShader.uniforms),vertexShader:this.adaptLuminanceShader.vertexShader,fragmentShader:this.adaptLuminanceShader.fragmentShader,defines:this.adaptLuminanceShader.defines,blending:THREE.NoBlending});if(THREE.ToneMapShader===undefined){console.error("THREE.AdaptiveToneMappingPass relies on THREE.ToneMapShader")}this.materialToneMap=new THREE.ShaderMaterial({uniforms:THREE.UniformsUtils.clone(THREE.ToneMapShader.uniforms),vertexShader:THREE.ToneMapShader.vertexShader,fragmentShader:THREE.ToneMapShader.fragmentShader,blending:THREE.NoBlending});this.enabled=true;this.needsSwap=true;this.clear=false;this.camera=new THREE.OrthographicCamera(-1,1,1,-1,0,1);this.scene=new THREE.Scene();this.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),null);this.scene.add(this.quad)};THREE.AdaptiveToneMappingPass.prototype={render:function(renderer,writeBuffer,readBuffer,delta,maskActive){if(this.needsInit){this.reset(renderer);this.luminanceRT.type=readBuffer.type;this.previousLuminanceRT.type=readBuffer.type;this.currentLuminanceRT.type=readBuffer.type;this.needsInit=false}if(this.adaptive){this.quad.material=this.materialLuminance;this.materialLuminance.uniforms.tDiffuse.value=readBuffer;renderer.render(this.scene,this.camera,this.currentLuminanceRT);this.quad.material=this.materialAdaptiveLum;this.materialAdaptiveLum.uniforms.delta.value=delta;this.materialAdaptiveLum.uniforms.lastLum.value=this.previousLuminanceRT;this.materialAdaptiveLum.uniforms.currentLum.value=this.currentLuminanceRT;renderer.render(this.scene,this.camera,this.luminanceRT);this.quad.material=this.materialCopy;this.copyUniforms.tDiffuse.value=this.luminanceRT;renderer.render(this.scene,this.camera,this.previousLuminanceRT)}this.quad.material=this.materialToneMap;this.materialToneMap.uniforms.tDiffuse.value=readBuffer;renderer.render(this.scene,this.camera,writeBuffer,this.clear)},reset:function(renderer){if(this.luminanceRT){this.luminanceRT.dispose()}if(this.currentLuminanceRT){this.currentLuminanceRT.dispose()}if(this.previousLuminanceRT){this.previousLuminanceRT.dispose()}var pars={minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBFormat};this.luminanceRT=new THREE.WebGLRenderTarget(this.resolution,this.resolution,pars);this.luminanceRT.generateMipmaps=false;this.previousLuminanceRT=new THREE.WebGLRenderTarget(this.resolution,this.resolution,pars);this.previousLuminanceRT.generateMipmaps=false;pars.minFilter=THREE.LinearMipMapLinearFilter;this.currentLuminanceRT=new THREE.WebGLRenderTarget(this.resolution,this.resolution,pars);if(this.adaptive){this.materialToneMap.defines.ADAPTED_LUMINANCE="";this.materialToneMap.uniforms.luminanceMap.value=this.luminanceRT}this.quad.material=new THREE.MeshBasicMaterial({color:7829367});this.materialLuminance.needsUpdate=true;this.materialAdaptiveLum.needsUpdate=true;this.materialToneMap.needsUpdate=true},setAdaptive:function(adaptive){if(adaptive){this.adaptive=true;this.materialToneMap.defines.ADAPTED_LUMINANCE="";this.materialToneMap.uniforms.luminanceMap.value=this.luminanceRT}else{this.adaptive=false;delete this.materialToneMap.defines.ADAPTED_LUMINANCE;this.materialToneMap.uniforms.luminanceMap.value=undefined}this.materialToneMap.needsUpdate=true},setAdaptionRate:function(rate){if(rate){this.materialAdaptiveLum.uniforms.tau.value=Math.abs(rate)}},setMaxLuminance:function(maxLum){if(maxLum){this.materialToneMap.uniforms.maxLuminance.value=maxLum}},setAverageLuminance:function(avgLum){if(avgLum){this.materialToneMap.uniforms.averageLuminance.value=avgLum}},setMiddleGrey:function(middleGrey){if(middleGrey){this.materialToneMap.uniforms.middleGrey.value=middleGrey}},dispose:function(){if(this.luminanceRT){this.luminanceRT.dispose()}if(this.previousLuminanceRT){this.previousLuminanceRT.dispose()}if(this.currentLuminanceRT){this.currentLuminanceRT.dispose()}if(this.materialLuminance){this.materialLuminance.dispose()}if(this.materialAdaptiveLum){this.materialAdaptiveLum.dispose()}if(this.materialCopy){this.materialCopy.dispose()}if(this.materialToneMap){this.materialToneMap.dispose()}}};THREE.BloomPass=function(strength,kernelSize,sigma,resolution){strength=(strength!==undefined)?strength:1;kernelSize=(kernelSize!==undefined)?kernelSize:25;sigma=(sigma!==undefined)?sigma:4;resolution=(resolution!==undefined)?resolution:256;var pars={minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBFormat};this.renderTargetX=new THREE.WebGLRenderTarget(resolution,resolution,pars);this.renderTargetY=new THREE.WebGLRenderTarget(resolution,resolution,pars);if(THREE.CopyShader===undefined){console.error("THREE.BloomPass relies on THREE.CopyShader")}var copyShader=THREE.CopyShader;this.copyUniforms=THREE.UniformsUtils.clone(copyShader.uniforms);this.copyUniforms.opacity.value=strength;this.materialCopy=new THREE.ShaderMaterial({uniforms:this.copyUniforms,vertexShader:copyShader.vertexShader,fragmentShader:copyShader.fragmentShader,blending:THREE.AdditiveBlending,transparent:true});if(THREE.ConvolutionShader===undefined){console.error("THREE.BloomPass relies on THREE.ConvolutionShader")}var convolutionShader=THREE.ConvolutionShader;this.convolutionUniforms=THREE.UniformsUtils.clone(convolutionShader.uniforms);this.convolutionUniforms.uImageIncrement.value=THREE.BloomPass.blurX;this.convolutionUniforms.cKernel.value=THREE.ConvolutionShader.buildKernel(sigma);this.materialConvolution=new THREE.ShaderMaterial({uniforms:this.convolutionUniforms,vertexShader:convolutionShader.vertexShader,fragmentShader:convolutionShader.fragmentShader,defines:{KERNEL_SIZE_FLOAT:kernelSize.toFixed(1),KERNEL_SIZE_INT:kernelSize.toFixed(0)}});this.enabled=true;this.needsSwap=false;this.clear=false;this.camera=new THREE.OrthographicCamera(-1,1,1,-1,0,1);this.scene=new THREE.Scene();this.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),null);this.scene.add(this.quad)};THREE.BloomPass.prototype={render:function(renderer,writeBuffer,readBuffer,delta,maskActive){if(maskActive){renderer.context.disable(renderer.context.STENCIL_TEST)}this.quad.material=this.materialConvolution;this.convolutionUniforms.tDiffuse.value=readBuffer;this.convolutionUniforms.uImageIncrement.value=THREE.BloomPass.blurX;renderer.render(this.scene,this.camera,this.renderTargetX,true);this.convolutionUniforms.tDiffuse.value=this.renderTargetX;this.convolutionUniforms.uImageIncrement.value=THREE.BloomPass.blurY;renderer.render(this.scene,this.camera,this.renderTargetY,true);this.quad.material=this.materialCopy;this.copyUniforms.tDiffuse.value=this.renderTargetY;if(maskActive){renderer.context.enable(renderer.context.STENCIL_TEST)}renderer.render(this.scene,this.camera,readBuffer,this.clear)}};THREE.BloomPass.blurX=new THREE.Vector2(0.001953125,0);THREE.BloomPass.blurY=new THREE.Vector2(0,0.001953125);THREE.BokehPass=function(scene,camera,params){this.scene=scene;this.camera=camera;var focus=(params.focus!==undefined)?params.focus:1;var aspect=(params.aspect!==undefined)?params.aspect:camera.aspect;var aperture=(params.aperture!==undefined)?params.aperture:0.025;var maxblur=(params.maxblur!==undefined)?params.maxblur:1;var width=params.width||window.innerWidth||1;var height=params.height||window.innerHeight||1;this.renderTargetColor=new THREE.WebGLRenderTarget(width,height,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBFormat});this.renderTargetDepth=this.renderTargetColor.clone();this.materialDepth=new THREE.MeshDepthMaterial();if(THREE.BokehShader===undefined){console.error("THREE.BokehPass relies on THREE.BokehShader")}var bokehShader=THREE.BokehShader;var bokehUniforms=THREE.UniformsUtils.clone(bokehShader.uniforms);bokehUniforms.tDepth.value=this.renderTargetDepth;bokehUniforms.focus.value=focus;bokehUniforms.aspect.value=aspect;bokehUniforms.aperture.value=aperture;bokehUniforms.maxblur.value=maxblur;this.materialBokeh=new THREE.ShaderMaterial({uniforms:bokehUniforms,vertexShader:bokehShader.vertexShader,fragmentShader:bokehShader.fragmentShader});this.uniforms=bokehUniforms;this.enabled=true;this.needsSwap=false;this.renderToScreen=false;this.clear=false;this.camera2=new THREE.OrthographicCamera(-1,1,1,-1,0,1);this.scene2=new THREE.Scene();this.quad2=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),null);this.scene2.add(this.quad2)};THREE.BokehPass.prototype={render:function(renderer,writeBuffer,readBuffer,delta,maskActive){this.quad2.material=this.materialBokeh;this.scene.overrideMaterial=this.materialDepth;renderer.render(this.scene,this.camera,this.renderTargetDepth,true);this.uniforms.tColor.value=readBuffer;if(this.renderToScreen){renderer.render(this.scene2,this.camera2)}else{renderer.render(this.scene2,this.camera2,writeBuffer,this.clear)}this.scene.overrideMaterial=null}};THREE.EffectComposer=function(renderer,renderTarget){this.renderer=renderer;if(renderTarget===undefined){var pixelRatio=renderer.getPixelRatio();var width=Math.floor(renderer.context.canvas.width/pixelRatio)||1;var height=Math.floor(renderer.context.canvas.height/pixelRatio)||1;var parameters={minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBFormat,stencilBuffer:false};renderTarget=new THREE.WebGLRenderTarget(width,height,parameters)}this.renderTarget1=renderTarget;this.renderTarget2=renderTarget.clone();this.writeBuffer=this.renderTarget1;this.readBuffer=this.renderTarget2;this.passes=[];if(THREE.CopyShader===undefined){console.error("THREE.EffectComposer relies on THREE.CopyShader")}this.copyPass=new THREE.ShaderPass(THREE.CopyShader)};THREE.EffectComposer.prototype={swapBuffers:function(){var tmp=this.readBuffer;this.readBuffer=this.writeBuffer;this.writeBuffer=tmp},addPass:function(pass){this.passes.push(pass)},insertPass:function(pass,index){this.passes.splice(index,0,pass)},render:function(delta){this.writeBuffer=this.renderTarget1;this.readBuffer=this.renderTarget2;var maskActive=false;var pass,i,il=this.passes.length;for(i=0;i');if(typeof isMinified!=="undefined"){return Ed3d.launchMap()}$.when($.getScript(Ed3d.basePath+"vendor/three-js/OrbitControls.js"),$.getScript(Ed3d.basePath+"vendor/three-js/CSS3DRenderer.js"),$.getScript(Ed3d.basePath+"vendor/three-js/Projector.js"),$.getScript(Ed3d.basePath+"vendor/three-js/FontUtils.js"),$.getScript(Ed3d.basePath+"vendor/three-js/helvetiker_regular.typeface.js"),$.getScript(Ed3d.basePath+"js/components/grid.class.js"),$.getScript(Ed3d.basePath+"js/components/hud.class.js"),$.getScript(Ed3d.basePath+"js/components/action.class.js"),$.getScript(Ed3d.basePath+"js/components/route.class.js"),$.getScript(Ed3d.basePath+"js/components/system.class.js"),$.getScript(Ed3d.basePath+"js/components/galaxy.class.js"),$.getScript(Ed3d.basePath+"vendor/tween-js/Tween.js"),$.Deferred(function(deferred){$(deferred.resolve)})).done(function(){Ed3d.launchMap()})},launchMap:function(){Ed3d.loadTextures();Ed3d.initScene();Ed3d.grid1H=$.extend({},Grid.init(100,1121827,0),{});Ed3d.grid1K=$.extend({},Grid.init(1000,2241082,1000),{});Ed3d.grid1XL=$.extend({},Grid.init(10000,2241082,10000),{});Ed3d.skyboxStars();Ed3d.loadDatas();animate()},loadTextures:function(){var texloader=new THREE.TextureLoader();this.textures.flare_white=texloader.load(Ed3d.basePath+"textures/lensflare/flare2.png");this.textures.flare_yellow=texloader.load(Ed3d.basePath+"textures/lensflare/star_grey2.png");this.textures.flare_center=texloader.load(Ed3d.basePath+"textures/lensflare/flare3.png");Ed3d.material.glow_1=new THREE.SpriteMaterial({map:this.textures.flare_yellow,color:16777215,transparent:false,fog:true});Ed3d.material.glow_2=new THREE.SpriteMaterial({map:Ed3d.textures.flare_white,transparent:true,size:15,vertexColors:THREE.VertexColors,blending:THREE.AdditiveBlending,depthWrite:false,opacity:0.5})},addCustomMaterial:function(id,color){var color=new THREE.Color("#"+color);this.colors[id]=color},initScene:function(){container=document.getElementById("ed3dmap");scene=new THREE.Scene();camera=new THREE.PerspectiveCamera(45,container.offsetWidth/container.offsetHeight,1,200000);camera.position.set(0,500,500);light=new THREE.HemisphereLight(16777215,13421772);scene.add(light);renderer=new THREE.WebGLRenderer({antialias:true,alpha:true});renderer.setClearColor(0,1);renderer.setSize(container.offsetWidth,container.offsetHeight);renderer.domElement.style.zIndex=5;container.appendChild(renderer.domElement);controls=new THREE.OrbitControls(camera,container);controls.rotateSpeed=1;controls.zoomSpeed=3;controls.panSpeed=0.8;controls.maxDistance=40000;controls.noZoom=!1;controls.noPan=!1;controls.staticMoving=!0;controls.dynamicDampingFactor=0.3;scene.fog=new THREE.FogExp2(855312,0.000128);renderer.setClearColor(scene.fog.color,1);Ed3d.fogDensity=scene.fog.density},loadDatas:function(){$.getJSON(this.jsonPath,function(data){HUD.create("ed3dmap");System.initParticleSystem();Galaxy.addGalaxyCenter();if(data.categories!=undefined){HUD.initFilters(data.categories)}list=(data.systems!==undefined)?data.systems:data;$.each(list,function(key,val){system=System.create(val);if(system!=undefined){if(val.cat!=undefined){Ed3d.addObjToCategories(system,val.cat)}if(val.cat!=undefined){Ed3d.systems.push(system)}}});if(data.routes!=undefined){$.each(data.routes,function(key1,route){Route.createRoute(key1,route.list,route.cat)})}}).done(function(){System.endParticleSystem();HUD.init();Action.init()})},addObjToCategories:function(index,catList){$.each(catList,function(keyArr,idCat){Ed3d.catObjs[idCat].push(index)})},skyboxStars:function(){var sizeStars=10000;var particles=new THREE.Geometry;for(var p=0;p<5;p++){var particle=new THREE.Vector3(Math.random()*sizeStars-(sizeStars/2),Math.random()*sizeStars-(sizeStars/2),Math.random()*sizeStars-(sizeStars/2));particles.vertices.push(particle)}var particleMaterial=new THREE.PointsMaterial({color:15658734,size:2});this.starfield=new THREE.Points(particles,particleMaterial);scene.add(this.starfield)},calcDistSol:function(target){var dx=target.x;var dy=target.y;var dz=target.z;return Math.round(Math.sqrt(dx*dx+dy*dy+dz*dz))}};function animate(time){refreshWithCamPos();controls.update();TWEEN.update(time);renderer.render(scene,camera);$("#cx").html(Math.round(controls.center.x));$("#cy").html(Math.round(controls.center.y));$("#cz").html(Math.round(controls.center.z));$("#distsol").html(Ed3d.calcDistSol(controls.target));Ed3d.starfield.position.set(controls.target.x-(controls.target.x/10)%4000,controls.target.y-(controls.target.y/10)%4000,controls.target.z-(controls.target.z/10)%4000);var scale=distanceFromTarget(camera)/200;if(Action.cursorSel!=null){if(scale>=0.01&&scale<10){Action.cursorSel.scale.set(scale,scale,scale)}Action.cursorSel.rotation.y=camera.rotation.y}if(scale>25){enableFarView(scale)}else{disableFarView(scale)}requestAnimationFrame(animate)}var isFarView=false;function enableFarView(scale,withAnim){if(isFarView){return}if(withAnim==undefined){withAnim=true}isFarView=true;var scaleFrom={zoom:25};var scaleTo={zoom:500};if(withAnim){Ed3d.tween=new TWEEN.Tween(scaleFrom).to(scaleTo,500).start().onUpdate(function(){Galaxy.milkyway[0].material.size=scaleFrom.zoom;Galaxy.milkyway[1].material.size=scaleFrom.zoom*4;System.particle.material.size=scaleFrom.zoom*4})}else{Galaxy.milkyway[0].material.size=scaleTo;Galaxy.milkyway[1].material.size=scaleTo*4}if(Action.cursorSel!=null){Action.cursorSel.scale.set(60,60,60)}Ed3d.grid1H.obj.visible=false;Ed3d.grid1K.obj.visible=false;Ed3d.starfield.visible=false;scene.fog.density=0.000009}function disableFarView(scale,withAnim){if(!isFarView){return}if(withAnim==undefined){withAnim=true}isFarView=false;var oldScale=parseFloat(1/(25/3));var scaleFrom={zoom:250};var scaleTo={zoom:64};if(withAnim){Ed3d.tween=new TWEEN.Tween(scaleFrom).to(scaleTo,500).start().onUpdate(function(){Galaxy.milkyway[0].material.size=scaleFrom.zoom;Galaxy.milkyway[1].material.size=scaleFrom.zoom;System.particle.material.size=scaleFrom.zoom})}else{Galaxy.milkyway[0].material.size=scaleTo;Galaxy.milkyway[1].material.size=scaleTo}Galaxy.milkyway[0].material.size=16;camera.scale.set(1,1,1);if(Action.cursorSel!=null){Action.cursorSel.scale.set(1,1,1)}Ed3d.grid1H.obj.visible=true;Ed3d.grid1K.obj.visible=true;Ed3d.starfield.visible=true;scene.fog.density=Ed3d.fogDensity}function render(){renderer.render(scene,camera)}window.addEventListener("resize",function(){if(renderer!=undefined){renderer.setSize(container.offsetWidth,container.offsetHeight);camera.aspect=container.offsetWidth/container.offsetHeight;camera.updateProjectionMatrix()}});function distance(v1,v2){var dx=v1.position.x-v2.position.x;var dy=v1.position.y-v2.position.y;var dz=v1.position.z-v2.position.z;return Math.round(Math.sqrt(dx*dx+dy*dy+dz*dz))}function distanceFromTarget(v1){var dx=v1.position.x-controls.target.x;var dy=v1.position.y-controls.target.y;var dz=v1.position.z-controls.target.z;return Math.round(Math.sqrt(dx*dx+dy*dy+dz*dz))}var camSave={x:0,y:0,z:0};function refreshWithCamPos(){var d=new Date();var n=d.getTime();if(n%1!=0){return}Ed3d.grid1H.addCoords();Ed3d.grid1K.addCoords();var p=Ed3d.optDistObj/2;if(camSave.x==Math.round(camera.position.x/p)*p&&camSave.y==Math.round(camera.position.y/p)*p&&camSave.z==Math.round(camera.position.z/p)*p){return}camSave.x=Math.round(camera.position.x/p)*p;camSave.y=Math.round(camera.position.y/p)*p;camSave.z=Math.round(camera.position.z/p)*p}var Action={cursorSel:null,mouseVector:null,raycaster:null,oldSel:null,objHover:null,init:function(){this.mouseVector=new THREE.Vector3();this.raycaster=new THREE.Raycaster();container.addEventListener("mousedown",this.onMouseClick,false)},onMouseHover:function(e){e.preventDefault();this.mouseVector=new THREE.Vector3((e.clientX/container.offsetWidth)*2-1,-(e.clientY/container.offsetHeight)*2+1,1);this.mouseVector.unproject(camera);this.raycaster=new THREE.Raycaster(camera.position,this.mouseVector.sub(camera.position).normalize());this.raycaster.params.Points.threshold=5;var intersects=this.raycaster.intersectObjects(scene.children);if(intersects.length>0){for(var i=0;i0){for(var i=0;i"+selPoint.name+"");var isMove=Action.moveToObj(indexPoint,selPoint);if(isMove){return}}}}}},moveNextPrev:function(indexPoint,increment){var find=false;while(!find){if(indexPoint<0){indexPoint=System.particleGeo.vertices.length-1}else{if(System.particleGeo.vertices[indexPoint]==undefined){indexPoint=0}}if(System.particleGeo.vertices[indexPoint].visible==true){find=true}else{indexPoint+=increment}}var selPoint=System.particleGeo.vertices[indexPoint];Action.moveToObj(indexPoint,selPoint)},disableSelection:function(){this.oldSel=null;this.cursorSel.visible=false;$("#hud #infos").html("")},moveInitalPosition:function(timer){if(timer==undefined){timer=800}var moveFrom={x:camera.position.x,y:camera.position.y,z:camera.position.z,mx:controls.center.x,my:controls.center.y,mz:controls.center.z};var moveCoords={x:0,y:500,z:500,mx:0,my:0,mz:0};controls.enabled=false;Ed3d.tween=new TWEEN.Tween(moveFrom).to(moveCoords,timer).start().onUpdate(function(){camera.position.set(moveFrom.x,moveFrom.y,moveFrom.z);controls.center.set(moveFrom.mx,moveFrom.my,moveFrom.mz)}).onComplete(function(){controls.enabled=true;controls.update()})},moveToObj:function(index,obj){if(this.oldSel!==null&&this.oldSel==index){return false}HUD.setInfoPanel(index,obj);HUD.openHudDetails();this.oldSel=index;var goX=obj.x;var goY=obj.y;var goZ=obj.z;disableFarView(25,false);this.moveGridTo(goX,goY,goZ);var moveFrom={x:camera.position.x,y:camera.position.y,z:camera.position.z,mx:controls.center.x,my:controls.center.y,mz:controls.center.z};var moveCoords={x:goX,y:goY+15,z:goZ+15,mx:goX,my:goY,mz:goZ};controls.enabled=false;Ed3d.tween=new TWEEN.Tween(moveFrom).to(moveCoords,800).start().onUpdate(function(){camera.position.set(moveFrom.x,moveFrom.y,moveFrom.z);controls.center.set(moveFrom.mx,moveFrom.my,moveFrom.mz)}).onComplete(function(){controls.enabled=true;controls.update()});obj.material=Ed3d.material.selected;this.addCusorOnSelect(goX,goY,goZ);var textAdd=obj.name;var textAddC=Math.round(goX)+", "+Math.round(goY)+", "+Math.round(goZ);HUD.addText("system",textAdd,8,20,0,6,this.cursorSel);HUD.addText("coords",textAddC,8,15,0,3,this.cursorSel);return true},addCusorOnSelect:function(x,y,z){if(this.cursorSel==null){this.cursorSel=new THREE.Object3D();var geometryL=new THREE.TorusGeometry(12,0.4,3,30);var selection=new THREE.Mesh(geometryL,Ed3d.material.selected);selection.rotation.x=Math.PI/2;this.cursorSel.add(selection);var geometryCone=new THREE.CylinderGeometry(0,5,16,4,1,false);var cone=new THREE.Mesh(geometryCone,Ed3d.material.selected);cone.position.set(0,20,0);cone.rotation.x=Math.PI;this.cursorSel.add(cone);var geometryConeInner=new THREE.CylinderGeometry(0,3.6,16,4,1,false);var coneInner=new THREE.Mesh(geometryConeInner,Ed3d.material.black);coneInner.position.set(0,20.2,0);coneInner.rotation.x=Math.PI;this.cursorSel.add(coneInner);scene.add(this.cursorSel)}this.cursorSel.visible=true;this.cursorSel.position.set(x,y,z);this.cursorSel.scale.set(1,1,1)},moveGridTo:function(goX,goY,goZ){var posX=Math.floor(goX/1000)*1000;var posY=Math.floor(goY);var posZ=Math.floor(goZ/1000)*1000;Ed3d.grid1H.obj.position.set(posX,posY,posZ);Ed3d.grid1K.obj.position.set(posX,posY,posZ);Ed3d.grid1XL.obj.position.set(posX,posY,posZ)}};var Galaxy={obj:null,milkyway:[],colors:[],x:25,y:-21,z:25900,addGalaxyCenter:function(){var objVal=new Object;objVal.name="Sagittarius A*";objVal.coords={x:this.y,y:this.y,z:this.z};objVal.cat=[];this.obj=System.create(objVal,true);var sprite=new THREE.Sprite(Ed3d.material.glow_2);sprite.scale.set(50,40,2);this.obj.add(sprite);this.createParticles()},createParticles:function(){var img=new Image();img.onload=function(){Galaxy.getHeightData(img);if(Ed3d.startAnim){camera.position.set(-10000,40000,50000);Action.moveInitalPosition(4000)}$("#loader").hide()};img.src=Ed3d.basePath+"textures/heightmap2.jpg"},getHeightData:function(img){var particles=new THREE.Geometry;var particlesBig=new THREE.Geometry;var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var context=canvas.getContext("2d");var size=img.width*img.height;context.drawImage(img,0,0);var imgd=context.getImageData(0,0,img.width,img.height);var pix=imgd.data;var j=0;var min=8;var nb=0;var maxDensity=15;var colorsBig=[];var nbBig=0;for(var i=0;imin){var x=15.6*((i/4)%img.width);var z=15.6*(Math.floor((i/4)/img.height));var density=Math.floor((pix[i]-min)/10);if(density>maxDensity){density=maxDensity}var add=Math.ceil(density/maxDensity*2);for(var y=-density;y=2&&Math.abs(y)-1==0&&Math.random()*1000<200){particlesBig.vertices.push(particle);colorsBig[nbBig]=new THREE.Color("rgb("+r+", "+g+", "+b+")");nbBig++}else{if(density<4||(Math.random()*1000<400-(density*2))){particles.vertices.push(particle);this.colors[nb]=new THREE.Color("rgb("+r+", "+g+", "+b+")");nb++}}}}}particles.colors=this.colors;var particleMaterial=new THREE.PointsMaterial({map:Ed3d.textures.flare_yellow,transparent:true,size:64,vertexColors:THREE.VertexColors,blending:THREE.AdditiveBlending,depthTest:true,depthWrite:false});var points=new THREE.Points(particles,particleMaterial);points.sortParticles=true;particles.center();this.milkyway[0]=points;this.milkyway[0].scale.set(20,20,20);this.obj.add(points);particlesBig.colors=colorsBig;var particleMaterialBig=new THREE.PointsMaterial({map:Ed3d.textures.flare_yellow,transparent:true,vertexColors:THREE.VertexColors,size:16,blending:THREE.AdditiveBlending,depthTest:true,depthWrite:false});var pointsBig=new THREE.Points(particlesBig,particleMaterialBig);pointsBig.sortParticles=true;particlesBig.center();this.milkyway[1]=pointsBig;this.milkyway[1].scale.set(20,20,20);this.obj.add(pointsBig)}};var Grid={obj:null,size:null,textShapes:null,textGeo:null,coordTxt:null,minDistView:null,init:function(size,color,minDistView){this.size=size;this.obj=new THREE.GridHelper(1000000,size);this.obj.setColors(color,color);this.obj.minDistView=minDistView;scene.add(this.obj);this.obj.customUpdateCallback=this.addCoords;return this},addCoords:function(){var textShow="0 : 0 : 0";var options={font:"helvetiker",weight:"normal",style:"normal",size:this.size/20,curveSegments:10};if(this.coordGrid!=null){if(Math.abs(camera.position.y-this.obj.position.y)>this.size*10||Math.abs(camera.position.y-this.obj.position.y)');$("#hud").append('

Infos

Dist. Sol

');$("#"+this.container).append('')},init:function(){this.initHudAction()},initHudAction:function(){$("#hud").hover(function(){controls.enabled=false},function(){controls.enabled=true});$("#systemDetails").hide();$(".map_filter").each(function(e){var idCat=$(this).data("filter");$(this).append(" ("+Ed3d.catObjs[idCat].length+")")});$(".map_filter").click(function(e){e.preventDefault();var idCat=$(this).data("filter");var active=$(this).data("active");active=(Math.abs(active-1));if(!Ed3d.hudMultipleSelect){$(".map_filter").addClass("disabled");$(System.particleGeo.vertices).each(function(index,point){point.visible=0;point.filtered=0;System.particleGeo.colors[index]=new THREE.Color("#111111");active=1})}$(Ed3d.catObjs[idCat]).each(function(key,indexPoint){obj=System.particleGeo.vertices[indexPoint];System.particleGeo.colors[indexPoint]=(active==1)?obj.color:new THREE.Color("#111111");obj.visible=(active==1);obj.filtered=(active==1);System.particleGeo.colorsNeedUpdate=true});$(this).data("active",active);$(this).toggleClass("disabled");if(Action.oldSel!=null&&!Action.oldSel.visible){Action.disableSelection()}Action.moveInitalPosition()});$(".map_link").click(function(e){e.preventDefault();var elId=$(this).data("route");Action.moveToObj(routes[elId])});$(".map_link span").click(function(e){e.preventDefault();var elId=$(this).parent().data("route");routes[elId].visible=!routes[elId].visible})},initFilters:function(categories){$.each(categories,function(typeFilter,values){if(typeof values==="object"){var groupId=typeFilter.toLowerCase();groupId.replace(" ","-");$("#filters").append("

"+typeFilter+"

");$("#filters").append('
');$.each(values,function(key,val){HUD.addFilter(groupId,key,val);Ed3d.catObjs[key]=[]})}})},addFilter:function(groupId,idCat,val){var back="#fff";if(val.color!=undefined){Ed3d.addCustomMaterial(idCat,val.color);back="#"+val.color}$("#"+groupId).append(' '+val.name+"")},openHudDetails:function(){$("#hud").hide();$("#systemDetails").show().hover(function(){controls.enabled=false},function(){controls.enabled=true})},closeHudDetails:function(){$("#hud").show();$("#systemDetails").hide()},setRoute:function(idRoute,nameR){$("#routes").append(' '+nameR+"")},setInfoPanel:function(index,point){$("#systemDetails").html("

"+point.name+'

'+point.x+""+point.y+""+point.z+'

'+(point.infos!=undefined?"
"+point.infos+"
":"")+'');$("",{html:"<"}).click(function(){Action.moveNextPrev(index-1,-1)}).appendTo("#nav");$("",{html:"X"}).click(function(){HUD.closeHudDetails()}).appendTo("#nav");$("",{html:">"}).click(function(){Action.moveNextPrev(index+1,1)}).appendTo("#nav")},addText:function(id,textShow,x,y,z,size,addToObj){if(addToObj==undefined){addToObj=scene}var textShapes=THREE.FontUtils.generateShapes(textShow,{font:"helvetiker",weight:"normal",style:"normal",size:size,curveSegments:100});var textGeo=new THREE.ShapeGeometry(textShapes);if(Ed3d.textSel[id]==undefined){var textMesh=new THREE.Mesh(textGeo,new THREE.MeshBasicMaterial({color:16777215}))}else{var textMesh=Ed3d.textSel[id]}textMesh.geometry=textGeo;textMesh.geometry.needsUpdate=true;textMesh.position.set(x,y,z);Ed3d.textSel[id]=textMesh;addToObj.add(textMesh)}};var Route={createRoute:function(idRoute,route,cat){var geometryL=new THREE.Geometry();var nameR="";$.each(route,function(key2,val){var x=parseInt(val.coords.x);var y=parseInt(val.coords.y);var z=-parseInt(val.coords.z);geometryL.vertices.push(new THREE.Vector3(x,y,z));var geometry=new THREE.SphereGeometry(3,10,10);var sphere=new THREE.Mesh(geometry,Ed3d.material.white);sphere.position.set(x,y,z);scene.add(sphere);nameR+=val.name});routes[idRoute]=new THREE.Line(geometryL,Ed3d.material.line);scene.add(routes[idRoute])}};var System={particle:null,particleGeo:null,particleColor:[],count:0,create:function(val,withSolid){if(withSolid==undefined){withSolid=false}if(val.coords==undefined){return false}var x=parseInt(val.coords.x);var y=parseInt(val.coords.y);var z=-parseInt(val.coords.z);var colors=[];if(this.particleGeo!==null){var particle=new THREE.Vector3(x,y,z);if(val.cat!=undefined&&val.cat[0]!=undefined&&Ed3d.colors[val.cat[0]]!=undefined){this.particleColor[this.count]=Ed3d.colors[val.cat[0]]}else{this.particleColor[this.count]=new THREE.Color("#ffffff")}if(val.cat!=undefined){Ed3d.addObjToCategories(this.count,val.cat);particle.color=this.particleColor[this.count]}particle.clickable=true;particle.visible=true;particle.name=val.name;if(val.infos!=undefined){particle.infos=val.infos}this.particleGeo.vertices.push(particle);this.count++}if(withSolid){var mat=Ed3d.material.glow_1;var sprite=new THREE.Sprite(mat);sprite.position.set(x,y,z);sprite.scale.set(50,50,1);scene.add(sprite);var geometry=new THREE.SphereGeometry(2,10,10);var sphere=new THREE.Mesh(geometry,Ed3d.material.white);sphere.position.set(x,y,z);sphere.name=val.name;sphere.clickable=true;sphere.idsprite=sprite.id;scene.add(sphere);return sphere}},initParticleSystem:function(){this.particleGeo=new THREE.Geometry},endParticleSystem:function(){this.particleGeo.colors=this.particleColor;var particleMaterial=new THREE.PointsMaterial({map:Ed3d.textures.flare_yellow,vertexColors:THREE.VertexColors,size:64,fog:false,blending:THREE.AdditiveBlending,transparent:true,depthTest:true,depthWrite:false});this.particle=new THREE.Points(this.particleGeo,particleMaterial);this.particle.sortParticles=true;this.particle.clickable=true;scene.add(this.particle)},loadSpectral:function(val){}};THREE.CSS3DObject=function(element){THREE.Object3D.call(this);this.element=element;this.element.style.position="absolute";this.element.style.WebkitTransformStyle="preserve-3d";this.element.style.MozTransformStyle="preserve-3d";this.element.style.oTransformStyle="preserve-3d";this.element.style.transformStyle="preserve-3d";this.addEventListener("removed",function(event){if(this.element.parentNode!==null){this.element.parentNode.removeChild(this.element);for(var i=0,l=this.children.length;i":{x_min:18.0625,x_max:774,ha:792,o:"m 774 376 l 18 40 l 18 149 l 631 421 l 18 692 l 18 799 l 774 465 l 774 376 "},v:{x_min:0,x_max:675.15625,ha:761,o:"m 675 738 l 404 0 l 272 0 l 0 738 l 133 737 l 340 147 l 541 737 l 675 738 "},"τ":{x_min:0.28125,x_max:644.5,ha:703,o:"m 644 628 l 382 628 l 382 179 q 388 120 382 137 q 436 91 401 91 q 474 94 447 91 q 504 97 501 97 l 504 0 q 454 -9 482 -5 q 401 -14 426 -14 q 278 67 308 -14 q 260 233 260 118 l 260 628 l 0 628 l 0 739 l 644 739 l 644 628 "},"ξ":{x_min:0,x_max:624.9375,ha:699,o:"m 624 -37 q 608 -153 624 -96 q 563 -278 593 -211 l 454 -278 q 491 -183 486 -200 q 511 -83 511 -126 q 484 -23 511 -44 q 370 1 452 1 q 323 0 354 1 q 283 -1 293 -1 q 84 76 169 -1 q 0 266 0 154 q 56 431 0 358 q 197 538 108 498 q 94 613 134 562 q 54 730 54 665 q 77 823 54 780 q 143 901 101 867 l 27 901 l 27 1012 l 576 1012 l 576 901 l 380 901 q 244 863 303 901 q 178 745 178 820 q 312 600 178 636 q 532 582 380 582 l 532 479 q 276 455 361 479 q 118 281 118 410 q 165 173 118 217 q 274 120 208 133 q 494 101 384 110 q 624 -37 624 76 "},"&":{x_min:-3,x_max:894.25,ha:992,o:"m 894 0 l 725 0 l 624 123 q 471 0 553 40 q 306 -41 390 -41 q 168 -7 231 -41 q 62 92 105 26 q 14 187 31 139 q -3 276 -3 235 q 55 433 -3 358 q 248 581 114 508 q 170 689 196 640 q 137 817 137 751 q 214 985 137 922 q 384 1041 284 1041 q 548 988 483 1041 q 622 824 622 928 q 563 666 622 739 q 431 556 516 608 l 621 326 q 649 407 639 361 q 663 493 653 426 l 781 493 q 703 229 781 352 l 894 0 m 504 818 q 468 908 504 877 q 384 940 433 940 q 293 907 331 940 q 255 818 255 875 q 289 714 255 767 q 363 628 313 678 q 477 729 446 682 q 504 818 504 771 m 556 209 l 314 499 q 179 395 223 449 q 135 283 135 341 q 146 222 135 253 q 183 158 158 192 q 333 80 241 80 q 556 209 448 80 "},"Λ":{x_min:0,x_max:862.5,ha:942,o:"m 862 0 l 719 0 l 426 847 l 143 0 l 0 0 l 356 1013 l 501 1013 l 862 0 "},I:{x_min:41,x_max:180,ha:293,o:"m 180 0 l 41 0 l 41 1013 l 180 1013 l 180 0 "},G:{x_min:0,x_max:921,ha:1011,o:"m 921 0 l 832 0 l 801 136 q 655 15 741 58 q 470 -28 568 -28 q 126 133 259 -28 q 0 499 0 284 q 125 881 0 731 q 486 1043 259 1043 q 763 957 647 1043 q 905 709 890 864 l 772 709 q 668 866 747 807 q 486 926 589 926 q 228 795 322 926 q 142 507 142 677 q 228 224 142 342 q 483 94 323 94 q 712 195 625 94 q 796 435 796 291 l 477 435 l 477 549 l 921 549 l 921 0 "},"ΰ":{x_min:0,x_max:617,ha:725,o:"m 524 800 l 414 800 l 414 925 l 524 925 l 524 800 m 183 800 l 73 800 l 73 925 l 183 925 l 183 800 m 617 352 q 540 93 617 199 q 308 -24 455 -24 q 76 93 161 -24 q 0 352 0 199 l 0 738 l 126 738 l 126 354 q 169 185 126 257 q 312 98 220 98 q 451 185 402 98 q 492 354 492 257 l 492 738 l 617 738 l 617 352 m 489 1040 l 300 819 l 216 819 l 351 1040 l 489 1040 "},"`":{x_min:0,x_max:138.890625,ha:236,o:"m 138 699 l 0 699 l 0 861 q 36 974 0 929 q 138 1041 72 1020 l 138 977 q 82 931 95 969 q 69 839 69 893 l 138 839 l 138 699 "},"·":{x_min:0,x_max:142,ha:239,o:"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 "},"Υ":{x_min:0.328125,x_max:819.515625,ha:889,o:"m 819 1013 l 482 416 l 482 0 l 342 0 l 342 416 l 0 1013 l 140 1013 l 411 533 l 679 1013 l 819 1013 "},r:{x_min:0,x_max:355.5625,ha:432,o:"m 355 621 l 343 621 q 179 569 236 621 q 122 411 122 518 l 122 0 l 0 0 l 0 737 l 117 737 l 117 604 q 204 719 146 686 q 355 753 262 753 l 355 621 "},x:{x_min:0,x_max:675,ha:764,o:"m 675 0 l 525 0 l 331 286 l 144 0 l 0 0 l 256 379 l 12 738 l 157 737 l 336 473 l 516 738 l 661 738 l 412 380 l 675 0 "},"μ":{x_min:0,x_max:696.609375,ha:747,o:"m 696 -4 q 628 -14 657 -14 q 498 97 513 -14 q 422 8 470 41 q 313 -24 374 -24 q 207 3 258 -24 q 120 80 157 31 l 120 -278 l 0 -278 l 0 738 l 124 738 l 124 343 q 165 172 124 246 q 308 82 216 82 q 451 177 402 82 q 492 358 492 254 l 492 738 l 616 738 l 616 214 q 623 136 616 160 q 673 92 636 92 q 696 95 684 92 l 696 -4 "},h:{x_min:0,x_max:615,ha:724,o:"m 615 472 l 615 0 l 490 0 l 490 454 q 456 590 490 535 q 338 654 416 654 q 186 588 251 654 q 122 436 122 522 l 122 0 l 0 0 l 0 1013 l 122 1013 l 122 633 q 218 727 149 694 q 362 760 287 760 q 552 676 484 760 q 615 472 615 600 "},".":{x_min:0,x_max:142,ha:239,o:"m 142 0 l 0 0 l 0 151 l 142 151 l 142 0 "},"φ":{x_min:-2,x_max:878,ha:974,o:"m 496 -279 l 378 -279 l 378 -17 q 101 88 204 -17 q -2 367 -2 194 q 68 626 -2 510 q 283 758 151 758 l 283 646 q 167 537 209 626 q 133 373 133 462 q 192 177 133 254 q 378 93 259 93 l 378 758 q 445 764 426 763 q 476 765 464 765 q 765 659 653 765 q 878 377 878 553 q 771 96 878 209 q 496 -17 665 -17 l 496 -279 m 496 93 l 514 93 q 687 183 623 93 q 746 380 746 265 q 691 569 746 491 q 522 658 629 658 l 496 656 l 496 93 "},";":{x_min:0,x_max:142,ha:239,o:"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 m 142 -12 q 105 -132 142 -82 q 0 -206 68 -182 l 0 -138 q 58 -82 43 -123 q 68 0 68 -56 l 0 0 l 0 151 l 142 151 l 142 -12 "},f:{x_min:0,x_max:378,ha:472,o:"m 378 638 l 246 638 l 246 0 l 121 0 l 121 638 l 0 638 l 0 738 l 121 738 q 137 935 121 887 q 290 1028 171 1028 q 320 1027 305 1028 q 378 1021 334 1026 l 378 908 q 323 918 346 918 q 257 870 273 918 q 246 780 246 840 l 246 738 l 378 738 l 378 638 "},"“":{x_min:1,x_max:348.21875,ha:454,o:"m 140 670 l 1 670 l 1 830 q 37 943 1 897 q 140 1011 74 990 l 140 947 q 82 900 97 940 q 68 810 68 861 l 140 810 l 140 670 m 348 670 l 209 670 l 209 830 q 245 943 209 897 q 348 1011 282 990 l 348 947 q 290 900 305 940 q 276 810 276 861 l 348 810 l 348 670 "},A:{x_min:0.03125,x_max:906.953125,ha:1008,o:"m 906 0 l 756 0 l 648 303 l 251 303 l 142 0 l 0 0 l 376 1013 l 529 1013 l 906 0 m 610 421 l 452 867 l 293 421 l 610 421 "},"6":{x_min:53,x_max:739,ha:792,o:"m 739 312 q 633 62 739 162 q 400 -31 534 -31 q 162 78 257 -31 q 53 439 53 206 q 178 859 53 712 q 441 986 284 986 q 643 912 559 986 q 732 713 732 833 l 601 713 q 544 830 594 786 q 426 875 494 875 q 268 793 331 875 q 193 517 193 697 q 301 597 240 570 q 427 624 362 624 q 643 540 552 624 q 739 312 739 451 m 603 298 q 540 461 603 400 q 404 516 484 516 q 268 461 323 516 q 207 300 207 401 q 269 137 207 198 q 405 83 325 83 q 541 137 486 83 q 603 298 603 197 "},"‘":{x_min:1,x_max:139.890625,ha:236,o:"m 139 670 l 1 670 l 1 830 q 37 943 1 897 q 139 1011 74 990 l 139 947 q 82 900 97 940 q 68 810 68 861 l 139 810 l 139 670 "},"ϊ":{x_min:-70,x_max:283,ha:361,o:"m 283 800 l 173 800 l 173 925 l 283 925 l 283 800 m 40 800 l -70 800 l -70 925 l 40 925 l 40 800 m 283 3 q 232 -10 257 -5 q 181 -15 206 -15 q 84 26 118 -15 q 41 200 41 79 l 41 737 l 166 737 l 167 215 q 171 141 167 157 q 225 101 182 101 q 247 103 238 101 q 283 112 256 104 l 283 3 "},"π":{x_min:-0.21875,x_max:773.21875,ha:857,o:"m 773 -7 l 707 -11 q 575 40 607 -11 q 552 174 552 77 l 552 226 l 552 626 l 222 626 l 222 0 l 97 0 l 97 626 l 0 626 l 0 737 l 773 737 l 773 626 l 676 626 l 676 171 q 695 103 676 117 q 773 90 714 90 l 773 -7 "},"ά":{x_min:0,x_max:765.5625,ha:809,o:"m 765 -4 q 698 -14 726 -14 q 564 97 586 -14 q 466 7 525 40 q 337 -26 407 -26 q 88 98 186 -26 q 0 369 0 212 q 88 637 0 525 q 337 760 184 760 q 465 727 407 760 q 563 637 524 695 l 563 738 l 685 738 l 685 222 q 693 141 685 168 q 748 94 708 94 q 765 95 760 94 l 765 -4 m 584 371 q 531 562 584 485 q 360 653 470 653 q 192 566 254 653 q 135 379 135 489 q 186 181 135 261 q 358 84 247 84 q 528 176 465 84 q 584 371 584 260 m 604 1040 l 415 819 l 332 819 l 466 1040 l 604 1040 "},O:{x_min:0,x_max:958,ha:1057,o:"m 485 1041 q 834 882 702 1041 q 958 512 958 734 q 834 136 958 287 q 481 -26 702 -26 q 126 130 261 -26 q 0 504 0 279 q 127 880 0 728 q 485 1041 263 1041 m 480 98 q 731 225 638 98 q 815 504 815 340 q 733 783 815 669 q 480 912 640 912 q 226 784 321 912 q 142 504 142 670 q 226 224 142 339 q 480 98 319 98 "},n:{x_min:0,x_max:615,ha:724,o:"m 615 463 l 615 0 l 490 0 l 490 454 q 453 592 490 537 q 331 656 410 656 q 178 585 240 656 q 117 421 117 514 l 117 0 l 0 0 l 0 738 l 117 738 l 117 630 q 218 728 150 693 q 359 764 286 764 q 552 675 484 764 q 615 463 615 593 "},"3":{x_min:54,x_max:737,ha:792,o:"m 737 284 q 635 55 737 141 q 399 -25 541 -25 q 156 52 248 -25 q 54 308 54 140 l 185 308 q 245 147 185 202 q 395 96 302 96 q 539 140 484 96 q 602 280 602 190 q 510 429 602 390 q 324 454 451 454 l 324 565 q 487 584 441 565 q 565 719 565 617 q 515 835 565 791 q 395 879 466 879 q 255 824 307 879 q 203 661 203 769 l 78 661 q 166 909 78 822 q 387 992 250 992 q 603 921 513 992 q 701 723 701 844 q 669 607 701 656 q 578 524 637 558 q 696 434 655 499 q 737 284 737 369 "},"9":{x_min:53,x_max:739,ha:792,o:"m 739 524 q 619 94 739 241 q 362 -32 516 -32 q 150 47 242 -32 q 59 244 59 126 l 191 244 q 246 129 191 176 q 373 82 301 82 q 526 161 466 82 q 597 440 597 255 q 363 334 501 334 q 130 432 216 334 q 53 650 53 521 q 134 880 53 786 q 383 986 226 986 q 659 841 566 986 q 739 524 739 719 m 388 449 q 535 514 480 449 q 585 658 585 573 q 535 805 585 744 q 388 873 480 873 q 242 809 294 873 q 191 658 191 745 q 239 514 191 572 q 388 449 292 449 "},l:{x_min:41,x_max:166,ha:279,o:"m 166 0 l 41 0 l 41 1013 l 166 1013 l 166 0 "},"¤":{x_min:40.09375,x_max:728.796875,ha:825,o:"m 728 304 l 649 224 l 512 363 q 383 331 458 331 q 256 363 310 331 l 119 224 l 40 304 l 177 441 q 150 553 150 493 q 184 673 150 621 l 40 818 l 119 898 l 267 749 q 321 766 291 759 q 384 773 351 773 q 447 766 417 773 q 501 749 477 759 l 649 898 l 728 818 l 585 675 q 612 618 604 648 q 621 553 621 587 q 591 441 621 491 l 728 304 m 384 682 q 280 643 318 682 q 243 551 243 604 q 279 461 243 499 q 383 423 316 423 q 487 461 449 423 q 525 553 525 500 q 490 641 525 605 q 384 682 451 682 "},"κ":{x_min:0,x_max:632.328125,ha:679,o:"m 632 0 l 482 0 l 225 384 l 124 288 l 124 0 l 0 0 l 0 738 l 124 738 l 124 446 l 433 738 l 596 738 l 312 466 l 632 0 "},"4":{x_min:48,x_max:742.453125,ha:792,o:"m 742 243 l 602 243 l 602 0 l 476 0 l 476 243 l 48 243 l 48 368 l 476 958 l 602 958 l 602 354 l 742 354 l 742 243 m 476 354 l 476 792 l 162 354 l 476 354 "},p:{x_min:0,x_max:685,ha:786,o:"m 685 364 q 598 96 685 205 q 350 -23 504 -23 q 121 89 205 -23 l 121 -278 l 0 -278 l 0 738 l 121 738 l 121 633 q 220 726 159 691 q 351 761 280 761 q 598 636 504 761 q 685 364 685 522 m 557 371 q 501 560 557 481 q 330 651 437 651 q 162 559 223 651 q 108 366 108 479 q 162 177 108 254 q 333 87 224 87 q 502 178 441 87 q 557 371 557 258 "},"‡":{x_min:0,x_max:777,ha:835,o:"m 458 238 l 458 0 l 319 0 l 319 238 l 0 238 l 0 360 l 319 360 l 319 681 l 0 683 l 0 804 l 319 804 l 319 1015 l 458 1013 l 458 804 l 777 804 l 777 683 l 458 683 l 458 360 l 777 360 l 777 238 l 458 238 "},"ψ":{x_min:0,x_max:808,ha:907,o:"m 465 -278 l 341 -278 l 341 -15 q 87 102 180 -15 q 0 378 0 210 l 0 739 l 133 739 l 133 379 q 182 195 133 275 q 341 98 242 98 l 341 922 l 465 922 l 465 98 q 623 195 563 98 q 675 382 675 278 l 675 742 l 808 742 l 808 381 q 720 104 808 213 q 466 -13 627 -13 l 465 -278 "},"η":{x_min:0.78125,x_max:697,ha:810,o:"m 697 -278 l 572 -278 l 572 454 q 540 587 572 536 q 425 650 501 650 q 271 579 337 650 q 206 420 206 509 l 206 0 l 81 0 l 81 489 q 73 588 81 562 q 0 644 56 644 l 0 741 q 68 755 38 755 q 158 720 124 755 q 200 630 193 686 q 297 726 234 692 q 434 761 359 761 q 620 692 544 761 q 697 516 697 624 l 697 -278 "}},cssFontWeight:"normal",ascender:1189,underlinePosition:-100,cssFontStyle:"normal",boundingBox:{yMin:-334,xMin:-111,yMax:1189,xMax:1672},resolution:1000,original_font_information:{postscript_name:"Helvetiker-Regular",version_string:"Version 1.00 2004 initial release",vendor_url:"http://www.magenta.gr/",full_font_name:"Helvetiker",font_family_name:"Helvetiker",copyright:"Copyright (c) Μagenta ltd, 2004",description:"",trademark:"",designer:"",designer_url:"",unique_font_identifier:"Μagenta ltd:Helvetiker:22-10-104",license_url:"http://www.ellak.gr/fonts/MgOpen/license.html",license_description:'Copyright (c) 2004 by MAGENTA Ltd. All Rights Reserved.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: \r\n\r\nThe above copyright and this permission notice shall be included in all copies of one or more of the Font Software typefaces.\r\n\r\nThe Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing the word "MgOpen", or if the modifications are accepted for inclusion in the Font Software itself by the each appointed Administrator.\r\n\r\nThis License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "MgOpen" name.\r\n\r\nThe Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. \r\n\r\nTHE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL MAGENTA OR PERSONS OR BODIES IN CHARGE OF ADMINISTRATION AND MAINTENANCE OF THE FONT SOFTWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.',manufacturer_name:"Μagenta ltd",font_sub_family_name:"Regular"},descender:-334,familyName:"Helvetiker",lineHeight:1522,underlineThickness:50})}THREE.OrbitControls=function(object,domElement,localElement){this.object=object;this.domElement=(domElement!==undefined)?domElement:document;this.localElement=(localElement!==undefined)?localElement:document;this.enabled=true;this.target=new THREE.Vector3();this.center=this.target;this.noZoom=false;this.zoomSpeed=1;this.minDistance=0;this.maxDistance=Infinity;this.noRotate=false;this.rotateSpeed=1;this.noPan=false;this.keyPanSpeed=7;this.autoRotate=false;this.autoRotateSpeed=2;this.minPolarAngle=0;this.maxPolarAngle=Math.PI;this.noKeys=false;this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40};var scope=this;var EPS=0.000001;var rotateStart=new THREE.Vector2();var rotateEnd=new THREE.Vector2();var rotateDelta=new THREE.Vector2();var panStart=new THREE.Vector2();var panEnd=new THREE.Vector2();var panDelta=new THREE.Vector2();var dollyStart=new THREE.Vector2();var dollyEnd=new THREE.Vector2();var dollyDelta=new THREE.Vector2();var phiDelta=0;var thetaDelta=0;var scale=1;var pan=new THREE.Vector3();var lastPosition=new THREE.Vector3();var STATE={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY:4,TOUCH_PAN:5};var state=STATE.NONE;var changeEvent={type:"change"};this.rotateLeft=function(angle){if(angle===undefined){angle=getAutoRotationAngle()}thetaDelta-=angle};this.rotateUp=function(angle){if(angle===undefined){angle=getAutoRotationAngle()}phiDelta-=angle};this.panLeft=function(distance){var panOffset=new THREE.Vector3();var te=this.object.matrix.elements;panOffset.set(te[0],te[1],te[2]);panOffset.multiplyScalar(-distance);pan.add(panOffset)};this.panUp=function(distance){var panOffset=new THREE.Vector3();var te=this.object.matrix.elements;panOffset.set(te[4],te[5],te[6]);panOffset.multiplyScalar(distance);pan.add(panOffset)};this.pan=function(delta){var element=scope.domElement===document?scope.domElement.body:scope.domElement;if(scope.object.fov!==undefined){var position=scope.object.position;var offset=position.clone().sub(scope.target);var targetDistance=offset.length();targetDistance*=Math.tan((scope.object.fov/2)*Math.PI/180);scope.panLeft(2*delta.x*targetDistance/element.clientHeight);scope.panUp(2*delta.y*targetDistance/element.clientHeight)}else{if(scope.object.top!==undefined){scope.panLeft(delta.x*(scope.object.right-scope.object.left)/element.clientWidth);scope.panUp(delta.y*(scope.object.top-scope.object.bottom)/element.clientHeight)}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.")}}};this.dollyIn=function(dollyScale){if(dollyScale===undefined){dollyScale=getZoomScale()}scale/=dollyScale};this.dollyOut=function(dollyScale){if(dollyScale===undefined){dollyScale=getZoomScale()}scale*=dollyScale};this.update=function(){var position=this.object.position;var offset=position.clone().sub(this.target);var theta=Math.atan2(offset.x,offset.z);var phi=Math.atan2(Math.sqrt(offset.x*offset.x+offset.z*offset.z),offset.y);if(this.autoRotate){this.rotateLeft(getAutoRotationAngle())}theta+=thetaDelta;phi+=phiDelta;phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,phi));phi=Math.max(EPS,Math.min(Math.PI-EPS,phi));var radius=offset.length()*scale;radius=Math.max(this.minDistance,Math.min(this.maxDistance,radius));this.target.add(pan);offset.x=radius*Math.sin(phi)*Math.sin(theta);offset.y=radius*Math.cos(phi);offset.z=radius*Math.sin(phi)*Math.cos(theta);position.copy(this.target).add(offset);this.object.lookAt(this.target);thetaDelta=0;phiDelta=0;scale=1;pan.set(0,0,0);if(lastPosition.distanceTo(this.object.position)>0){this.dispatchEvent(changeEvent);lastPosition.copy(this.object.position)}};function getAutoRotationAngle(){return 2*Math.PI/60/60*scope.autoRotateSpeed}function getZoomScale(){return Math.pow(0.95,scope.zoomSpeed)}function onMouseDown(event){if(scope.enabled===false){return}event.preventDefault();if(event.button===0){if(scope.noRotate===true){return}state=STATE.ROTATE;rotateStart.set(event.clientX,event.clientY)}else{if(event.button===1){if(scope.noZoom===true){return}state=STATE.DOLLY;dollyStart.set(event.clientX,event.clientY)}else{if(event.button===2){if(scope.noPan===true){return}state=STATE.PAN;panStart.set(event.clientX,event.clientY)}}}scope.domElement.addEventListener("mousemove",onMouseMove,false);scope.domElement.addEventListener("mouseup",onMouseUp,false)}function onMouseMove(event){if(scope.enabled===false){return}event.preventDefault();var element=scope.domElement===document?scope.domElement.body:scope.domElement;if(state===STATE.ROTATE){if(scope.noRotate===true){return}rotateEnd.set(event.clientX,event.clientY);rotateDelta.subVectors(rotateEnd,rotateStart);scope.rotateLeft(2*Math.PI*rotateDelta.x/element.clientWidth*scope.rotateSpeed);scope.rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight*scope.rotateSpeed);rotateStart.copy(rotateEnd)}else{if(state===STATE.DOLLY){if(scope.noZoom===true){return}dollyEnd.set(event.clientX,event.clientY);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){scope.dollyIn()}else{scope.dollyOut()}dollyStart.copy(dollyEnd)}else{if(state===STATE.PAN){if(scope.noPan===true){return}panEnd.set(event.clientX,event.clientY);panDelta.subVectors(panEnd,panStart);scope.pan(panDelta);panStart.copy(panEnd)}}}scope.update()}function onMouseUp(){if(scope.enabled===false){return}scope.domElement.removeEventListener("mousemove",onMouseMove,false);scope.domElement.removeEventListener("mouseup",onMouseUp,false);state=STATE.NONE}function onMouseWheel(event){if(scope.enabled===false||scope.noZoom===true){return}var delta=0;if(event.wheelDelta){delta=event.wheelDelta}else{if(event.detail){delta=-event.detail}}if(delta>0){scope.dollyOut()}else{scope.dollyIn()}}function onKeyDown(event){if(scope.enabled===false){return}if(scope.noKeys===true){return}if(scope.noPan===true){return}var needUpdate=false;switch(event.keyCode){case scope.keys.UP:scope.pan(new THREE.Vector2(0,scope.keyPanSpeed));needUpdate=true;break;case scope.keys.BOTTOM:scope.pan(new THREE.Vector2(0,-scope.keyPanSpeed));needUpdate=true;break;case scope.keys.LEFT:scope.pan(new THREE.Vector2(scope.keyPanSpeed,0));needUpdate=true;break;case scope.keys.RIGHT:scope.pan(new THREE.Vector2(-scope.keyPanSpeed,0));needUpdate=true;break}if(needUpdate){scope.update()}}function touchstart(event){if(scope.enabled===false){return}switch(event.touches.length){case 1:if(scope.noRotate===true){return}state=STATE.TOUCH_ROTATE;rotateStart.set(event.touches[0].pageX,event.touches[0].pageY);break;case 2:if(scope.noZoom===true){return}state=STATE.TOUCH_DOLLY;var dx=event.touches[0].pageX-event.touches[1].pageX;var dy=event.touches[0].pageY-event.touches[1].pageY;var distance=Math.sqrt(dx*dx+dy*dy);dollyStart.set(0,distance);break;case 3:if(scope.noPan===true){return}state=STATE.TOUCH_PAN;panStart.set(event.touches[0].pageX,event.touches[0].pageY);break;default:state=STATE.NONE}}function touchmove(event){if(scope.enabled===false){return}event.preventDefault();event.stopPropagation();var element=scope.domElement===document?scope.domElement.body:scope.domElement;switch(event.touches.length){case 1:if(scope.noRotate===true){return}if(state!==STATE.TOUCH_ROTATE){return}rotateEnd.set(event.touches[0].pageX,event.touches[0].pageY);rotateDelta.subVectors(rotateEnd,rotateStart);scope.rotateLeft(2*Math.PI*rotateDelta.x/element.clientWidth*scope.rotateSpeed);scope.rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight*scope.rotateSpeed);rotateStart.copy(rotateEnd);break;case 2:if(scope.noZoom===true){return}if(state!==STATE.TOUCH_DOLLY){return}var dx=event.touches[0].pageX-event.touches[1].pageX;var dy=event.touches[0].pageY-event.touches[1].pageY;var distance=Math.sqrt(dx*dx+dy*dy);dollyEnd.set(0,distance);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){scope.dollyOut()}else{scope.dollyIn()}dollyStart.copy(dollyEnd);break;case 3:if(scope.noPan===true){return}if(state!==STATE.TOUCH_PAN){return}panEnd.set(event.touches[0].pageX,event.touches[0].pageY);panDelta.subVectors(panEnd,panStart);scope.pan(panDelta);panStart.copy(panEnd);break;default:state=STATE.NONE}}function touchend(){if(scope.enabled===false){return}state=STATE.NONE}this.domElement.addEventListener("contextmenu",function(event){event.preventDefault()},false);this.localElement.addEventListener("mousedown",onMouseDown,false);this.domElement.addEventListener("mousewheel",onMouseWheel,false);this.domElement.addEventListener("DOMMouseScroll",onMouseWheel,false);this.domElement.addEventListener("keydown",onKeyDown,false);this.localElement.addEventListener("touchstart",touchstart,false);this.domElement.addEventListener("touchend",touchend,false);this.domElement.addEventListener("touchmove",touchmove,false)};THREE.OrbitControls.prototype=Object.create(THREE.EventDispatcher.prototype);THREE.RenderableObject=function(){this.id=0;this.object=null;this.z=0;this.renderOrder=0};THREE.RenderableFace=function(){this.id=0;this.v1=new THREE.RenderableVertex();this.v2=new THREE.RenderableVertex();this.v3=new THREE.RenderableVertex();this.normalModel=new THREE.Vector3();this.vertexNormalsModel=[new THREE.Vector3(),new THREE.Vector3(),new THREE.Vector3()];this.vertexNormalsLength=0;this.color=new THREE.Color();this.material=null;this.uvs=[new THREE.Vector2(),new THREE.Vector2(),new THREE.Vector2()];this.z=0;this.renderOrder=0};THREE.RenderableVertex=function(){this.position=new THREE.Vector3();this.positionWorld=new THREE.Vector3();this.positionScreen=new THREE.Vector4();this.visible=true};THREE.RenderableVertex.prototype.copy=function(vertex){this.positionWorld.copy(vertex.positionWorld);this.positionScreen.copy(vertex.positionScreen)};THREE.RenderableLine=function(){this.id=0;this.v1=new THREE.RenderableVertex();this.v2=new THREE.RenderableVertex();this.vertexColors=[new THREE.Color(),new THREE.Color()];this.material=null;this.z=0;this.renderOrder=0};THREE.RenderableSprite=function(){this.id=0;this.object=null;this.x=0;this.y=0;this.z=0;this.rotation=0;this.scale=new THREE.Vector2();this.material=null;this.renderOrder=0};THREE.Projector=function(){var _object,_objectCount,_objectPool=[],_objectPoolLength=0,_vertex,_vertexCount,_vertexPool=[],_vertexPoolLength=0,_face,_faceCount,_facePool=[],_facePoolLength=0,_line,_lineCount,_linePool=[],_linePoolLength=0,_sprite,_spriteCount,_spritePool=[],_spritePoolLength=0,_renderData={objects:[],lights:[],elements:[]},_vector3=new THREE.Vector3(),_vector4=new THREE.Vector4(),_clipBox=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),_boundingBox=new THREE.Box3(),_points3=new Array(3),_points4=new Array(4),_viewMatrix=new THREE.Matrix4(),_viewProjectionMatrix=new THREE.Matrix4(),_modelMatrix,_modelViewProjectionMatrix=new THREE.Matrix4(),_normalMatrix=new THREE.Matrix3(),_frustum=new THREE.Frustum(),_clippedVertex1PositionScreen=new THREE.Vector4(),_clippedVertex2PositionScreen=new THREE.Vector4();this.projectVector=function(vector,camera){console.warn("THREE.Projector: .projectVector() is now vector.project().");vector.project(camera)};this.unprojectVector=function(vector,camera){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject().");vector.unproject(camera)};this.pickingRay=function(vector,camera){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")};var RenderList=function(){var normals=[];var uvs=[];var object=null;var material=null;var normalMatrix=new THREE.Matrix3();var setObject=function(value){object=value;material=object.material;normalMatrix.getNormalMatrix(object.matrixWorld);normals.length=0;uvs.length=0};var projectVertex=function(vertex){var position=vertex.position;var positionWorld=vertex.positionWorld;var positionScreen=vertex.positionScreen;positionWorld.copy(position).applyMatrix4(_modelMatrix);positionScreen.copy(positionWorld).applyMatrix4(_viewProjectionMatrix);var invW=1/positionScreen.w;positionScreen.x*=invW;positionScreen.y*=invW;positionScreen.z*=invW;vertex.visible=positionScreen.x>=-1&&positionScreen.x<=1&&positionScreen.y>=-1&&positionScreen.y<=1&&positionScreen.z>=-1&&positionScreen.z<=1};var pushVertex=function(x,y,z){_vertex=getNextVertexInPool();_vertex.position.set(x,y,z);projectVertex(_vertex)};var pushNormal=function(x,y,z){normals.push(x,y,z)};var pushUv=function(x,y){uvs.push(x,y)};var checkTriangleVisibility=function(v1,v2,v3){if(v1.visible===true||v2.visible===true||v3.visible===true){return true}_points3[0]=v1.positionScreen;_points3[1]=v2.positionScreen;_points3[2]=v3.positionScreen;return _clipBox.isIntersectionBox(_boundingBox.setFromPoints(_points3))};var checkBackfaceCulling=function(v1,v2,v3){return((v3.positionScreen.x-v1.positionScreen.x)*(v2.positionScreen.y-v1.positionScreen.y)-(v3.positionScreen.y-v1.positionScreen.y)*(v2.positionScreen.x-v1.positionScreen.x))<0};var pushLine=function(a,b){var v1=_vertexPool[a];var v2=_vertexPool[b];_line=getNextLineInPool();_line.id=object.id;_line.v1.copy(v1);_line.v2.copy(v2);_line.z=(v1.positionScreen.z+v2.positionScreen.z)/2;_line.renderOrder=object.renderOrder;_line.material=object.material;_renderData.elements.push(_line)};var pushTriangle=function(a,b,c){var v1=_vertexPool[a];var v2=_vertexPool[b];var v3=_vertexPool[c];if(checkTriangleVisibility(v1,v2,v3)===false){return}if(material.side===THREE.DoubleSide||checkBackfaceCulling(v1,v2,v3)===true){_face=getNextFaceInPool();_face.id=object.id;_face.v1.copy(v1);_face.v2.copy(v2);_face.v3.copy(v3);_face.z=(v1.positionScreen.z+v2.positionScreen.z+v3.positionScreen.z)/3;_face.renderOrder=object.renderOrder;_face.normalModel.fromArray(normals,a*3);_face.normalModel.applyMatrix3(normalMatrix).normalize();for(var i=0;i<3;i++){var normal=_face.vertexNormalsModel[i];normal.fromArray(normals,arguments[i]*3);normal.applyMatrix3(normalMatrix).normalize();var uv=_face.uvs[i];uv.fromArray(uvs,arguments[i]*2)}_face.vertexNormalsLength=3;_face.material=object.material;_renderData.elements.push(_face)}};return{setObject:setObject,projectVertex:projectVertex,checkTriangleVisibility:checkTriangleVisibility,checkBackfaceCulling:checkBackfaceCulling,pushVertex:pushVertex,pushNormal:pushNormal,pushUv:pushUv,pushLine:pushLine,pushTriangle:pushTriangle}};var renderList=new RenderList();this.projectScene=function(scene,camera,sortObjects,sortElements){_faceCount=0;_lineCount=0;_spriteCount=0;_renderData.elements.length=0;if(scene.autoUpdate===true){scene.updateMatrixWorld()}if(camera.parent===null){camera.updateMatrixWorld()}_viewMatrix.copy(camera.matrixWorldInverse.getInverse(camera.matrixWorld));_viewProjectionMatrix.multiplyMatrices(camera.projectionMatrix,_viewMatrix);_frustum.setFromMatrix(_viewProjectionMatrix);_objectCount=0;_renderData.objects.length=0;_renderData.lights.length=0;scene.traverseVisible(function(object){if(object instanceof THREE.Light){_renderData.lights.push(object)}else{if(object instanceof THREE.Mesh||object instanceof THREE.Line||object instanceof THREE.Sprite){var material=object.material;if(material.visible===false){return}if(object.frustumCulled===false||_frustum.intersectsObject(object)===true){_object=getNextObjectInPool();_object.id=object.id;_object.object=object;_vector3.setFromMatrixPosition(object.matrixWorld);_vector3.applyProjection(_viewProjectionMatrix);_object.z=_vector3.z;_object.renderOrder=object.renderOrder;_renderData.objects.push(_object)}}}});if(sortObjects===true){_renderData.objects.sort(painterSort)}for(var o=0,ol=_renderData.objects.length;o0){for(var o=0;o0){continue}v2=_vertexPool[_vertexCount-2];_clippedVertex1PositionScreen.copy(v1.positionScreen);_clippedVertex2PositionScreen.copy(v2.positionScreen);if(clipLine(_clippedVertex1PositionScreen,_clippedVertex2PositionScreen)===true){_clippedVertex1PositionScreen.multiplyScalar(1/_clippedVertex1PositionScreen.w);_clippedVertex2PositionScreen.multiplyScalar(1/_clippedVertex2PositionScreen.w);_line=getNextLineInPool();_line.id=object.id;_line.v1.positionScreen.copy(_clippedVertex1PositionScreen);_line.v2.positionScreen.copy(_clippedVertex2PositionScreen);_line.z=Math.max(_clippedVertex1PositionScreen.z,_clippedVertex2PositionScreen.z);_line.renderOrder=object.renderOrder;_line.material=object.material;if(object.material.vertexColors===THREE.VertexColors){_line.vertexColors[0].copy(object.geometry.colors[v]);_line.vertexColors[1].copy(object.geometry.colors[v-1])}_renderData.elements.push(_line)}}}}}else{if(object instanceof THREE.Sprite){_vector4.set(_modelMatrix.elements[12],_modelMatrix.elements[13],_modelMatrix.elements[14],1);_vector4.applyMatrix4(_viewProjectionMatrix);var invW=1/_vector4.w;_vector4.z*=invW;if(_vector4.z>=-1&&_vector4.z<=1){_sprite=getNextSpriteInPool();_sprite.id=object.id;_sprite.x=_vector4.x*invW;_sprite.y=_vector4.y*invW;_sprite.z=_vector4.z;_sprite.renderOrder=object.renderOrder;_sprite.object=object;_sprite.rotation=object.rotation;_sprite.scale.x=object.scale.x*Math.abs(_sprite.x-(_vector4.x+camera.projectionMatrix.elements[0])/(_vector4.w+camera.projectionMatrix.elements[12]));_sprite.scale.y=object.scale.y*Math.abs(_sprite.y-(_vector4.y+camera.projectionMatrix.elements[5])/(_vector4.w+camera.projectionMatrix.elements[13]));_sprite.material=object.material;_renderData.elements.push(_sprite)}}}}}if(sortElements===true){_renderData.elements.sort(painterSort)}return _renderData};function getNextObjectInPool(){if(_objectCount===_objectPoolLength){var object=new THREE.RenderableObject();_objectPool.push(object);_objectPoolLength++;_objectCount++;return object}return _objectPool[_objectCount++]}function getNextVertexInPool(){if(_vertexCount===_vertexPoolLength){var vertex=new THREE.RenderableVertex();_vertexPool.push(vertex);_vertexPoolLength++;_vertexCount++;return vertex}return _vertexPool[_vertexCount++]}function getNextFaceInPool(){if(_faceCount===_facePoolLength){var face=new THREE.RenderableFace();_facePool.push(face);_facePoolLength++;_faceCount++;return face}return _facePool[_faceCount++]}function getNextLineInPool(){if(_lineCount===_linePoolLength){var line=new THREE.RenderableLine();_linePool.push(line);_linePoolLength++;_lineCount++;return line}return _linePool[_lineCount++]}function getNextSpriteInPool(){if(_spriteCount===_spritePoolLength){var sprite=new THREE.RenderableSprite();_spritePool.push(sprite);_spritePoolLength++;_spriteCount++;return sprite}return _spritePool[_spriteCount++]}function painterSort(a,b){if(a.renderOrder!==b.renderOrder){return a.renderOrder-b.renderOrder}else{if(a.z!==b.z){return b.z-a.z}else{if(a.id!==b.id){return a.id-b.id}else{return 0}}}}function clipLine(s1,s2){var alpha1=0,alpha2=1,bc1near=s1.z+s1.w,bc2near=s2.z+s2.w,bc1far=-s1.z+s1.w,bc2far=-s2.z+s2.w;if(bc1near>=0&&bc2near>=0&&bc1far>=0&&bc2far>=0){return true}else{if((bc1near<0&&bc2near<0)||(bc1far<0&&bc2far<0)){return false}else{if(bc1near<0){alpha1=Math.max(alpha1,bc1near/(bc1near-bc2near))}else{if(bc2near<0){alpha2=Math.min(alpha2,bc1near/(bc1near-bc2near))}}if(bc1far<0){alpha1=Math.max(alpha1,bc1far/(bc1far-bc2far))}else{if(bc2far<0){alpha2=Math.min(alpha2,bc1far/(bc1far-bc2far))}}if(alpha20){continue}outputColor.add(diffuseColor)}}else{if(material instanceof THREE.MeshLambertMaterial||material instanceof THREE.MeshPhongMaterial){var normalComputed=false;for(var i=0,l=lights.length;i0){continue}if(normalComputed===false){computePixelNormal(normalVector,localPoint,material.shading,face,vertices);normalVector.applyMatrix3(_object.normalMatrix).normalize();normalComputed=true}var attenuation=1;if(light.physicalAttenuation===true){attenuation=lightVector.length();attenuation=1/(attenuation*attenuation)}lightVector.normalize();var dot=Math.max(normalVector.dot(lightVector),0);var diffuseIntensity=dot*light.intensity;lightContribution.copy(diffuseColor);lightContribution.multiply(lightColor);lightContribution.multiplyScalar(diffuseIntensity*attenuation);outputColor.add(lightContribution);if(material instanceof THREE.MeshPhongMaterial){halfVector.addVectors(lightVector,eyeVector).normalize();var dotNormalHalf=Math.max(normalVector.dot(halfVector),0);var specularIntensity=Math.max(Math.pow(dotNormalHalf,material.shininess),0)*diffuseIntensity;var specularNormalization=(material.shininess+2)/8;specularColor.copyGammaToLinear(material.specular);var alpha=Math.pow(Math.max(1-lightVector.dot(halfVector),0),5);schlick.r=specularColor.r+(1-specularColor.r)*alpha;schlick.g=specularColor.g+(1-specularColor.g)*alpha;schlick.b=specularColor.b+(1-specularColor.b)*alpha;lightContribution.copy(schlick);lightContribution.multiply(lightColor);lightContribution.multiplyScalar(specularNormalization*specularIntensity*attenuation);outputColor.add(lightContribution)}}}}var reflectivity=material.reflectivity;if((material.mirror||material.glass)&&reflectivity>0&&recursionDepth=canvasWidth){blockX=0;blockY+=blockSize;if(blockY>=canvasHeight){scope.dispatchEvent({type:"complete"});return}}context.fillRect(blockX,blockY,blockSize,blockSize);animationFrameId=requestAnimationFrame(function(){renderBlock(blockX,blockY)})}}());this.render=function(scene,camera){if(this.autoClear===true){this.clear()}cancelAnimationFrame(animationFrameId);if(scene.autoUpdate===true){scene.updateMatrixWorld()}if(camera.parent===null){camera.updateMatrixWorld()}camera.matrixWorldInverse.getInverse(camera.matrixWorld);cameraPosition.setFromMatrixPosition(camera.matrixWorld);cameraNormalMatrix.getNormalMatrix(camera.matrixWorld);origin.copy(cameraPosition);perspective=0.5/Math.tan(THREE.Math.degToRad(camera.fov*0.5))*canvasHeight;objects=scene.children;lights.length=0;scene.traverse(function(object){if(object instanceof THREE.Light){lights.push(object)}if(cache[object.id]===undefined){cache[object.id]={normalMatrix:new THREE.Matrix3(),inverseMatrix:new THREE.Matrix4()}}modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse,object.matrixWorld);var _object=cache[object.id];_object.normalMatrix.getNormalMatrix(modelViewMatrix);_object.inverseMatrix.getInverse(object.matrixWorld)});renderBlock(0,0)}};THREE.EventDispatcher.prototype.apply(THREE.RaytracingRenderer.prototype);THREE.ShaderMaterial=function(parameters){THREE.Material.call(this);this.type="ShaderMaterial";this.defines={};this.uniforms={};this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}";this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";this.shading=THREE.SmoothShading;this.linewidth=1;this.wireframe=false;this.wireframeLinewidth=1;this.fog=false;this.lights=false;this.vertexColors=THREE.NoColors;this.skinning=false;this.morphTargets=false;this.morphNormals=false;this.derivatives=false;this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]};this.index0AttributeName=undefined;if(parameters!==undefined){if(parameters.attributes!==undefined){console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.")}this.setValues(parameters)}};THREE.ShaderMaterial.prototype=Object.create(THREE.Material.prototype);THREE.ShaderMaterial.prototype.constructor=THREE.ShaderMaterial;THREE.ShaderMaterial.prototype.copy=function(source){THREE.Material.prototype.copy.call(this,source);this.fragmentShader=source.fragmentShader;this.vertexShader=source.vertexShader;this.uniforms=THREE.UniformsUtils.clone(source.uniforms);this.attributes=source.attributes;this.defines=source.defines;this.shading=source.shading;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;this.fog=source.fog;this.lights=source.lights;this.vertexColors=source.vertexColors;this.skinning=source.skinning;this.morphTargets=source.morphTargets;this.morphNormals=source.morphNormals;this.derivatives=source.derivatives;return this};THREE.ShaderMaterial.prototype.toJSON=function(meta){var data=THREE.Material.prototype.toJSON.call(this,meta);data.uniforms=this.uniforms;data.attributes=this.attributes;data.vertexShader=this.vertexShader;data.fragmentShader=this.fragmentShader;return data};THREE.TextGeometry=function(text,parameters){parameters=parameters||{};var textShapes=THREE.FontUtils.generateShapes(text,parameters);parameters.amount=parameters.height!==undefined?parameters.height:50;if(parameters.bevelThickness===undefined){parameters.bevelThickness=10}if(parameters.bevelSize===undefined){parameters.bevelSize=8}if(parameters.bevelEnabled===undefined){parameters.bevelEnabled=false}THREE.ExtrudeGeometry.call(this,textShapes,parameters);this.type="TextGeometry"};THREE.TextGeometry.prototype=Object.create(THREE.ExtrudeGeometry.prototype);THREE.TextGeometry.prototype.constructor=THREE.TextGeometry;(function(){if("performance" in window===false){window.performance={}}Date.now=(Date.now||function(){return new Date().getTime()});if("now" in window.performance===false){var offset=window.performance.timing&&window.performance.timing.navigationStart?window.performance.timing.navigationStart:Date.now();window.performance.now=function(){return Date.now()-offset}}})();var TWEEN=TWEEN||(function(){var _tweens=[];return{getAll:function(){return _tweens},removeAll:function(){_tweens=[]},add:function(tween){_tweens.push(tween)},remove:function(tween){var i=_tweens.indexOf(tween);if(i!==-1){_tweens.splice(i,1)}},update:function(time){if(_tweens.length===0){return false}var i=0;time=time!==undefined?time:window.performance.now();while(i<_tweens.length){if(_tweens[i].update(time)){i++}else{_tweens.splice(i,1)}}return true}}})();TWEEN.Tween=function(object){var _object=object;var _valuesStart={};var _valuesEnd={};var _valuesStartRepeat={};var _duration=1000;var _repeat=0;var _yoyo=false;var _isPlaying=false;var _reversed=false;var _delayTime=0;var _startTime=null;var _easingFunction=TWEEN.Easing.Linear.None;var _interpolationFunction=TWEEN.Interpolation.Linear;var _chainedTweens=[];var _onStartCallback=null;var _onStartCallbackFired=false;var _onUpdateCallback=null;var _onCompleteCallback=null;var _onStopCallback=null;for(var field in object){_valuesStart[field]=parseFloat(object[field],10)}this.to=function(properties,duration){if(duration!==undefined){_duration=duration}_valuesEnd=properties;return this};this.start=function(time){TWEEN.add(this);_isPlaying=true;_onStartCallbackFired=false;_startTime=time!==undefined?time:window.performance.now();_startTime+=_delayTime;for(var property in _valuesEnd){if(_valuesEnd[property] instanceof Array){if(_valuesEnd[property].length===0){continue}_valuesEnd[property]=[_object[property]].concat(_valuesEnd[property])}_valuesStart[property]=_object[property];if((_valuesStart[property] instanceof Array)===false){_valuesStart[property]*=1}_valuesStartRepeat[property]=_valuesStart[property]||0}return this};this.stop=function(){if(!_isPlaying){return this}TWEEN.remove(this);_isPlaying=false;if(_onStopCallback!==null){_onStopCallback.call(_object)}this.stopChainedTweens();return this};this.stopChainedTweens=function(){for(var i=0,numChainedTweens=_chainedTweens.length;i1?1:elapsed;value=_easingFunction(elapsed);for(property in _valuesEnd){var start=_valuesStart[property]||0;var end=_valuesEnd[property];if(end instanceof Array){_object[property]=_interpolationFunction(end,value)}else{if(typeof(end)==="string"){end=start+parseFloat(end,10)}if(typeof(end)==="number"){_object[property]=start+(end-start)*value}}}if(_onUpdateCallback!==null){_onUpdateCallback.call(_object,value)}if(elapsed===1){if(_repeat>0){if(isFinite(_repeat)){_repeat--}for(property in _valuesStartRepeat){if(typeof(_valuesEnd[property])==="string"){_valuesStartRepeat[property]=_valuesStartRepeat[property]+parseFloat(_valuesEnd[property],10)}if(_yoyo){var tmp=_valuesStartRepeat[property];_valuesStartRepeat[property]=_valuesEnd[property];_valuesEnd[property]=tmp}_valuesStart[property]=_valuesStartRepeat[property]}if(_yoyo){_reversed=!_reversed}_startTime=time+_delayTime;return true}else{if(_onCompleteCallback!==null){_onCompleteCallback.call(_object)}for(var i=0,numChainedTweens=_chainedTweens.length;i1){return fn(v[m],v[m-1],m-f)}return fn(v[i],v[i+1>m?m:i+1],f-i)},Bezier:function(v,k){var b=0;var n=v.length-1;var pw=Math.pow;var bn=TWEEN.Interpolation.Utils.Bernstein;for(var i=0;i<=n;i++){b+=pw(1-k,n-i)*pw(k,i)*v[i]*bn(n,i)}return b},CatmullRom:function(v,k){var m=v.length-1;var f=m*k;var i=Math.floor(f);var fn=TWEEN.Interpolation.Utils.CatmullRom;if(v[0]===v[m]){if(k<0){i=Math.floor(f=m*(1+k))}return fn(v[(i-1+m)%m],v[i],v[(i+1)%m],v[(i+2)%m],f-i)}else{if(k<0){return v[0]-(fn(v[0],v[0],v[1],v[1],-f)-v[0])}if(k>1){return v[m]-(fn(v[m],v[m],v[m-1],v[m-1],f-m)-v[m])}return fn(v[i?i-1:0],v[i],v[m1;i--){s*=i}a[n]=s;return s}})(),CatmullRom:function(p0,p1,p2,p3,t){var v0=(p2-p0)*0.5;var v1=(p3-p1)*0.5;var t2=t*t;var t3=t*t2;return(2*p1-2*p2+v0+v1)*t3+(-3*p1+3*p2-2*v0-v1)*t2+v0*t+p1}}};(function(root){if(typeof define==="function"&&define.amd){define([],function(){return TWEEN})}else{if(typeof exports==="object"){module.exports=TWEEN}else{root.TWEEN=TWEEN}}})(this); \ No newline at end of file