var camera, scene, renderer, particles, geometry, materials = [], parameters, i, h, color;
var mouseX = 0, mouseY = 0;
var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2;
container = document.createElement( 'div' );
document.body.appendChild( container );
camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 3000 );
camera.position.z = 1000;
scene = new THREE.Scene();
scene.fog = new THREE.FogExp2( 0x220018, 0.0007 );
geometry = new THREE.Geometry();
for ( i = 0; i < 50000; i ++ ) {
var vertex = new THREE.Vector3();
vertex.x = Math.random() * 200 - 100;
vertex.y = Math.random() * 2000 - 1000;
vertex.z = Math.random() * 200 - 100;
geometry.vertices.push( vertex );
for ( i = 0; i < parameters.length; i ++ ) {
materials[i] = new THREE.PointCloudMaterial( { size: size } );
particles = new THREE.PointCloud( geometry, materials[i]);
particles.rotation.x = Math.random() * 5
particles.rotation.y = Math.random() * 5;
particles.rotation.z = Math.random() * 5;
renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild( renderer.domElement );
document.addEventListener( 'mousemove', onDocumentMouseMove, false );
document.addEventListener( 'touchstart', onDocumentTouchStart, false );
document.addEventListener( 'touchmove', onDocumentTouchMove, false );
window.addEventListener( 'resize', onWindowResize, false );
function onWindowResize() {
windowHalfX = window.innerWidth / 2;
windowHalfY = window.innerHeight / 2;
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );
function onDocumentMouseMove( event ) {
mouseX = event.clientX - windowHalfX;
mouseY = event.clientY - windowHalfY;
function onDocumentTouchStart( event ) {
if ( event.touches.length === 1 ) {
mouseX = event.touches[ 0 ].pageX - windowHalfX;
mouseY = event.touches[ 0 ].pageY - windowHalfY;
function onDocumentTouchMove( event ) {
if ( event.touches.length === 1 ) {
mouseX = event.touches[ 0 ].pageX - windowHalfX;
mouseY = event.touches[ 0 ].pageY - windowHalfY;
requestAnimationFrame( animate );
camera.position.x += ( mouseX - camera.position.x ) * 1;
camera.position.z += ( - mouseY - camera.position.y ) * 0.05;
if(camera.position.z > 2500){
camera.position.z = 2500;
if(camera.position.z < -2500){
camera.position.z = -2500;
camera.lookAt( scene.position );
renderer.render( scene, camera );