function init(undefined){ "use strict"; var HEIGHT = window.innerHeight; var WIDTH = window.innerWidth; var aspectRatio = WIDTH / HEIGHT; var renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setSize( WIDTH, HEIGHT ); renderer.setClearColor( 0x000000 ); renderer.shadowMap.enabled = true; document.body.appendChild( renderer.domElement ); var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera( 75, aspectRatio, 0.1, 100000 ); camera.position.x = 20 camera.position.y = 200; camera.position.z = 200; camera.lookAt( scene.position ); var controls = new THREE.TrackballControls( camera, renderer.domElement ); controls.rotateSpeed = 5.0; controls.panSpeed = 1.0; var textureLoader = new THREE.TextureLoader(); var skyGeometry = new THREE.SphereGeometry(1000, 25, 25); var skyMaterial = new THREE.MeshBasicMaterial( { color: 0xffffff } ); var skyTexture= textureLoader.load( 'space2.png' ); skyTexture.wrapS = skyTexture.wrapT = THREE.RepeatWrapping; skyTexture.repeat.set( 10, 10 ); skyMaterial.map = skyTexture; var skyMesh = new THREE.Mesh(skyGeometry, skyMaterial); skyMesh.material.side = THREE.BackSide; scene.add(skyMesh); var groundGeometry = new THREE.PlaneGeometry(1024, 1024); var groundMaterial = new THREE.MeshPhongMaterial( { color: 0xffffff } ); var groundMesh = new THREE.Mesh( groundGeometry, groundMaterial ); groundMesh.rotation.x=radian(-90); groundMesh.receiveShadow=true; groundMesh.material.side = THREE.DoubleSide; groundMaterial.map = textureLoader.load( 'marstex2.jpg' ); scene.add( groundMesh ); var h=60; var boxGeometry = new THREE.BoxGeometry( 6, 6, 6 ); var boxMaterial = new THREE.MeshPhongMaterial( { color: 0x00ff00, shininess: 80, specular: 0xffffff, metal: true, side: THREE.FrontSide } ); var boxMesh = new THREE.Mesh( boxGeometry, boxMaterial ); boxMesh.receiveShadow=true; boxMesh.castShadow = true; boxMesh.position.x=0; boxMesh.position.y=-h; boxMesh.position.z=0; var wireGeometry = new THREE.ConeGeometry( 30, -h, 8 ); var wireMaterial = new THREE.MeshBasicMaterial( { color: 0xff0000 , wireframe:true} ); var wireMesh = new THREE.Mesh( wireGeometry, wireMaterial ); wireMesh.castShadow = true; wireMesh.receiveShadow=true; wireMesh.position.x=0; wireMesh.position.y=-h/2; wireMesh.position.z=0; var coneGeometry = new THREE.ConeGeometry( 30, 10, 32 ); coneGeometry.applyMatrix( new THREE.Matrix4().makeTranslation( 0, 5, 0 ) ); var coneMaterial = new THREE.MeshPhongMaterial( { color: 0x0000ff } ); var coneMesh = new THREE.Mesh( coneGeometry, coneMaterial ); coneMesh.castShadow = true; coneMesh.receiveShadow=true; coneMesh.position.x=0; coneMesh.position.y=0; coneMesh.position.z=0; coneMesh.add( boxMesh ); coneMesh.add( wireMesh ); scene.add( coneMesh ); var ambientLight = new THREE.AmbientLight( 0x708090, 0.5 ); scene.add( ambientLight ); var spotLight = new THREE.SpotLight( 0xffffff, 1 ); spotLight.position.set( -1000,1000,0 ); spotLight.angle = radian(11.25); spotLight.distance = 2000; spotLight.castShadow = true; spotLight.penumbra = 0.8; scene.add( spotLight ); var axesHelper = new THREE.AxesHelper( 12 ); scene.add( axesHelper ); window.addEventListener( 'resize', handleWindowResize, false ); render(); function radian(fok){ return fok * Math.PI / 180; } function handleWindowResize() { HEIGHT = window.innerHeight; WIDTH = window.innerWidth; renderer.setSize( WIDTH, HEIGHT ); aspectRatio = WIDTH / HEIGHT; camera.aspect = aspectRatio; camera.updateProjectionMatrix(); } var omega=Math.sqrt(h/10)/1000; function render() { requestAnimationFrame( render ); var t = new Date().getTime(); var q = (t/100)%300; coneMesh.rotation.z=radian(4)*Math.cos(omega*t); coneMesh.rotation.x=radian(4)*Math.cos(omega*t*1.01234566); coneMesh.position.y=h+300-q; controls.update(); renderer.render( scene, camera ); } }