var camera, tick = 0, scene, renderer, clock = new THREE.Clock(true), options, spawnerOptions, particleSystem, pointLight; var path = 'obj/'; var file = 'title'; init(); animate(); function init() { if(!Detector.webgl) Detector.addGetWebGLMessage(); container = document.createElement('div'); document.body.appendChild(container); renderer = new THREE.WebGLRenderer(); renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); scene = new THREE.Scene(); scene.fog = new THREE.FogExp2( 0xaabbbb, 0.005 ); camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 800); camera.position.set( 0, 0, 100 ); var planeGeo = new THREE.PlaneBufferGeometry( 600.1, 200.1 ); var groundMirror = new THREE.Reflector( 1000, 1000, { clipBias: 0.001, textureWidth: window.innerWidth * window.devicePixelRatio, textureHeight: window.innerHeight * window.devicePixelRatio, color: 0x777777, recursion: 1 } ); groundMirror.rotateX( - Math.PI * 0.35 ); groundMirror.position.y = -7.5; groundMirror.position.z = 0; scene.add( groundMirror ); var onProgress = function ( xhr ) { if ( xhr.lengthComputable ) { var percentComplete = xhr.loaded / xhr.total * 100; } }; var onError = function ( xhr ) { alert(xhr); }; THREE.Loader.Handlers.add( /\.dds$/i, new THREE.DDSLoader() ); var mtlLoader = new THREE.MTLLoader(); mtlLoader.setPath( path ); mtlLoader.load( file + '.mtl', function( materials ) { materials.preload(); var objLoader = new THREE.OBJLoader(); objLoader.setMaterials( materials ); objLoader.setPath( path ); objLoader.load( file + '.obj', function ( object ) { object.scale.set(15,15,15); object.rotation.x = Math.PI / 2; scene.add(object); }, onProgress, onError ); }, onProgress, onError ); particleSystem = new THREE.GPUParticleSystem({ maxParticles: 900 }); scene.add( particleSystem); // options passed during each spawned options = { position: new THREE.Vector3(), positionRandomness: 1.0, velocity: new THREE.Vector3(), velocityRandomness: 1.0, color: 0x88ffe0, colorRandomness: 0.2, turbulence: 0.85, lifetime: 4, size: 6, sizeRandomness: 0.5 }; spawnerOptions = { spawnRate: 10, horizontalSpeed: 0.75, verticalSpeed: 1.25, timeScale: 0.9 } pointOptions = { horizontalSpeed: 0.75, verticalSpeed: 1.25, timeScale: 0.8 } // LIGHTS var dirLight = new THREE.DirectionalLight( 0xffffff, 0.2 ); dirLight.position.set( 0, -100, 100 ).normalize(); scene.add( dirLight ); var sphere = new THREE.SphereGeometry( 0.75, 6, 6 ); var material = new THREE.MeshBasicMaterial( { color: 0xffffff, transparent: true } ); material.opacity = 0.8; var mesh = new THREE.Mesh( sphere, material ); pointLight = new THREE.PointLight( 0xffffff, 1.0, 450 ); pointLight.add( mesh ); pointLight.color.setHSL( 0.52, 0.92, 0.9 ); pointLight.position.set( 0, 100, 90 ); scene.add( pointLight ); group = new THREE.Group(); group.position.y = 100; scene.add( group ); createText(); container.appendChild(renderer.domElement); window.addEventListener('resize', onWindowResize, false); } function onWindowResize() { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); } function animate() { requestAnimationFrame(animate); var delta = clock.getDelta() * spawnerOptions.timeScale; tick += delta; if (tick < 0) tick = 0; if (delta > 0) { options.position.x = Math.sin(tick * spawnerOptions.horizontalSpeed) * 50; options.position.y = Math.sin(tick * spawnerOptions.verticalSpeed) * 6; options.position.z = Math.sin(tick * spawnerOptions.horizontalSpeed + spawnerOptions.verticalSpeed) * 2; pointLight.position.x = options.position.x; pointLight.position.y = options.position.y; pointLight.position.z = options.position.z; for (var x = 0; x < spawnerOptions.spawnRate * delta; x++) { particleSystem.spawnParticle(options); } } particleSystem.update(tick); render(); } function render() { renderer.render(scene, camera); } function createText() { } function ajaxSendMail(f) { var data; var name = f.name.value; var mail = f.mail.value; var mess = f.comment.value; new Ajax.Request("../contact.php", { method: "post", parameters: "name=" + name + "&mail=" + mail + "&mess=" + mess, onSuccess:function(httpObj) { data = httpObj.responseText.evalJSON(); if(data.res == "OK") { $("error").innerHTML = ""; $("contents").innerHTML = ""; $("complete").innerHTML = data.msg; }else{ $("complete").innerHTML = ""; $("error").innerHTML = data.msg; } }, onFailure:function(httpObj) { } }); }