var scene; var aspect; var camera; var controls; var renderer; var worker; var gui; var plane; var myTree; var centers; var tree; var twig; var TreeLocX=0; var TreeLocY=0; var TreeLocZ=0; var light; var lightDot; var SunX=0; var SunY=100; var SunZ=0; var contX; var contY; var contZ; var preset='Top'; var maxGenerations=200; var numOfInstances=12; var numOfChild=8; var sameBestIter=25; var useBest=true; var minFitnessTerm=0; var mutationRate=0.2; var trunkCollision=false; var facing=false; function workerMessage(evt){ scene.remove(tree); scene.remove(twig); tree = treeGeometry(evt.data); twig = twigGeometry(evt.data); tree.position.set(TreeLocX, TreeLocY, TreeLocZ); twig.position.set(TreeLocX, TreeLocY, TreeLocZ); scene.add(tree); scene.add(twig); } this.Start=function(){ var pos=[TreeLocX, TreeLocY, TreeLocZ]; var gaSettings=[maxGenerations,numOfInstances,numOfChild,sameBestIter,useBest,minFitnessTerm,mutationRate,facing,trunkCollision,pos]; //console.log("worker"); worker.postMessage([1,gaSettings]); } function updateLight(){ light.position.set( SunX, SunY, SunZ );//top var pos=[light.position.x,light.position.y,light.position.z]; lightDot.position.set(light.position.x, light.position.y, light.position.z); worker.postMessage([0,pos]); } function updateTreeLoc(){ tree.position.set(TreeLocX, TreeLocY, TreeLocZ); twig.position.set(TreeLocX, TreeLocY, TreeLocZ); //worker.postMessage([2,pos]); } function init(){ worker=new Worker("GAworker.js"); worker.onmessage=workerMessage; scene = new THREE.Scene(); scene.fog = new THREE.FogExp2( 0x9CCAF6, 0.05 ); aspect = window.innerWidth / window.innerHeight; camera = new THREE.PerspectiveCamera( 75, aspect, 0.1, 1000 ); renderer = new THREE.WebGLRenderer(); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.shadowMapEnabled = true; renderer.shadowMapSoft = true; document.body.appendChild( renderer.domElement ); camera.position.z = 10; camera.position.y = 3; controls = new THREE.OrbitControls( camera ); controls.rotateSpeed = 1.0; controls.zoomSpeed = 1.2; controls.panSpeed = 0.8; controls.noZoom = false; controls.noPan = true; controls.staticMoving = true; controls.dynamicDampingFactor = 0.3; controls.target=new THREE.Vector3(0,3,0); renderer.shadowCameraNear = 3; renderer.shadowCameraFar = camera.far; renderer.shadowCameraFov = 50; renderer.shadowMapBias = 0.0039; renderer.shadowMapDarkness = 0.5; renderer.shadowMapWidth = 4096; renderer.shadowMapHeight = 4096; light = new THREE.PointLight( 0xffffff, 1 ); //light.position.set( 50, 50, 50 ); light.position.set( SunX, SunY, SunZ );//top //light.position.set( 100, 20, 0 );//side //light.position.set( 0, 20, 100 ); scene.add( light ); var pos=[light.position.x,light.position.y,light.position.z]; worker.postMessage([0,pos]); var geo=new THREE.Geometry(); geo.vertices.push(new THREE.Vector3( 0, 0, 0 )); pcMat = new THREE.PointCloudMaterial( { size: 15, sizeAttenuation: false, alphaTest: 0.5, transparent: true, fog: false} ); lightDot=new THREE.PointCloud(geo,pcMat); lightDot.position.set(light.position.x, light.position.y, light.position.z); scene.add(lightDot); var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.7 ); directionalLight.position.set( 0, 1, 0 ); scene.add( directionalLight ); geometry = new THREE.BoxGeometry( 500, 0.01, 500 ); planeMat = new THREE.MeshPhongMaterial( {color: 0xEEEEEE, shading: THREE.SmoothShading} ); plane = new THREE.Mesh(geometry, planeMat); plane.receiveShadow = true; scene.add(plane); var sphere= new THREE.SphereGeometry(300, 32, 32); var skyMat = new THREE.MeshPhongMaterial( {color: 0xFFFFFF, shading: THREE.SmoothShading} ); skyMat.side = THREE.BackSide var sky=new THREE.Mesh(sphere,skyMat); scene.add(sky); myTree=randomTree(); tree = treeGeometry(myTree); scene.add( tree ); twig = twigGeometry(myTree); /* centers=leafCenters(myTree); normals=leafNormals(myTree); var geo=new THREE.Geometry(); //leafCenters,normal debug for(i=0;i