// Задача: Направете топка да се върти в кръг // около пилон var renderer = new THREE.WebGLRenderer({antialias: true}); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( drawFrame ); document.body.appendChild( renderer.domElement ); // включваме генерирането на меки сенки renderer.shadowMap.enabled = true; renderer.shadowMap.type = THREE.PCFSoftShadowMap; var scene = new THREE.Scene(); scene.background = new THREE.Color( 'dimgray' ); var aspect = window.innerWidth/window.innerHeight; var camera = new THREE.PerspectiveCamera( 30, aspect ); camera.position.set( 0, 80, 250 ); camera.lookAt( new THREE.Vector3( 0, 20, 0 )); // координати на пилон var xp = 40*Math.random(); var yp = 20+40*Math.random(); var zp = 40*Math.random(); // създаване на топка var ball = new THREE.Mesh( new THREE.SphereGeometry( 6, 32, 32 ), new THREE.MeshPhongMaterial( {color: 'goldenrod', shininess: 60, specular: 'white'} ) ); ball.castShadow = true; scene.add( ball ); // създаване на земята var ground = new THREE.Mesh( new THREE.BoxGeometry( 200, 2, 140 ), new THREE.MeshPhongMaterial( {color: 'steelblue', shininess: 60, specular: 'white'} ) ); ground.position.y = -1; ground.receiveShadow = true; scene.add( ground ); // създаване на пилон var material = new THREE.MeshPhongMaterial( {color: 'steelblue', shininess: 100, specular: 'white'} ); scene.add( futuristicPillar( xp, zp, yp, material ) ); // светлина var light = new THREE.PointLight(); light.position.set( 0, 50, 0 ); light.castShadow = true; scene.add( light ); scene.add( new THREE.AmbientLight( 'white', 0.7 ) ); var clock = new THREE.Clock(); var rotationTime = 5; var rotationDiam = 20; function drawFrame() { var t = clock.getElapsedTime(); // движение в кръг - може би тук да се допише? ball.position.x = Math.sin(Math.PI * 2 * (t % rotationTime) / rotationTime) * rotationDiam + xp; ball.position.z = Math.cos(Math.PI * 2 * (t % rotationTime) / rotationTime) * rotationDiam + zp; ball.position.y = Math.sin(Math.PI * 2 * (t % rotationTime) / rotationTime + Math.PI / 4) * rotationDiam + yp; scene.rotation.y += 0.002; renderer.render( scene, camera ); }