// Задача: Направете топката да се движи по // оста X, като рикошира от двата края 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( 'skyblue' ); var aspect = window.innerWidth/window.innerHeight; var camera = new THREE.PerspectiveCamera( 30, aspect ); camera.position.set( 0, 120, 200 ); camera.lookAt( new THREE.Vector3( 0, -10, 0 ) ); // топчето за движене var ball = new THREE.Mesh( new THREE.SphereGeometry( 5, 32, 32 ), new THREE.MeshPhongMaterial( {color: 'orange', shininess: 10, specular: 'white', emissive: 'firebrick'} ) ); ball.castShadow = true; scene.add( ball ); // платформата var ground = new THREE.Mesh( new THREE.BoxGeometry( 160.2, 2.2, 10.2 ), new THREE.MeshPhongMaterial( {color: 'slateblue', shininess: 2, specular: 'white'} ) ); ground.position.y = -6; ground.receiveShadow = true; scene.add( ground ); // стъкленият корпус var glass = new THREE.Mesh( new THREE.BoxGeometry( 160, 10, 10 ), new THREE.MeshPhongMaterial( {color: 'azure', opacity: 0.2, transparent: true, shininess: 50, specular: 0x8080ff, side:THREE.BackSide} ) ); glass.receiveShadow = true; scene.add( glass ); // бялата рамка на стъкления корпус var frame = new THREE.BoxHelper( glass ); frame.material.color.set( 'white' ); scene.add( frame ); // светлина var light = new THREE.PointLight( 'white', 0.5 ); light.position.set( 0, 100, 0 ); light.castShadow = false; scene.add( light ); // и още една var light = new THREE.PointLight(); light.position.set( 0, 20, 0 ); light.castShadow = true; scene.add( light ); var movementV = new THREE.Vector3(1,0,0); function drawFrame() { scene.rotation.y += 0.001; if (Math.abs(ball.position.x) + 5 >= 80) movementV.multiplyScalar(-1); ball.position.add(movementV); renderer.render( scene, camera ); }