// Задача: направете движещите се сфери да са // малки лампи (точкови източници на светлина), // като светят със съответния цвят на сферата var renderer = new THREE.WebGLRenderer(); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( drawFrame ); document.body.appendChild( renderer.domElement ); var scene = new THREE.Scene(); var aspect = window.innerWidth/window.innerHeight; var camera = new THREE.PerspectiveCamera( 30, aspect ); camera.position.set( 12, 14, 30 ); camera.lookAt( new THREE.Vector3() ); // широка платформа-зема, която ще бъде осветявана var geometry = new THREE.BoxGeometry( 20, 1, 20 ); var material = new THREE.MeshPhongMaterial(); scene.add( new THREE.Mesh( geometry, material ) ); // списък с цветове var colors = ['red','blue','yellow']; // създаване на сфери var balls=[]; var geometry = new THREE.SphereGeometry( 1, 16, 16 ); for (var i=0; i<3; i++) { // създаване на 3 сфери със съответен цвят var material = new THREE.MeshPhongMaterial( {color: colors[i]} ); balls[i] = new THREE.Mesh( geometry, material ); scene.add( balls[i] ); } // обща светлина отгоре - да бъде премахната, // но да се сложат три цветни светлини от // трите сфери // var light = new THREE.PointLight(); // light.position.set( 0, 10, 0 ); // scene.add( light ); for (var i = 0; i < balls.length; i++) balls[i].add(new THREE.PointLight(colors[i])); var t=0; function drawFrame() { // въртене на сцената, за да не е скучно scene.rotation.y += 0.001; // псевдотаймер за движение на сферите t += 0.005; // движение на едната сфера balls[0].position.x = 10*Math.cos(2.5*t); balls[0].position.y = 2.5+1*Math.sin(2.4*t); balls[0].position.z = 10*Math.cos(1.9*t);; // движение на другата balls[1].position.x = 10*Math.cos(2.1*t); balls[1].position.y = 2.5+1*Math.cos(2.5*t); balls[1].position.z = 10*Math.sin(2.2*t);; // движение и на третата balls[2].position.x = 10*Math.sin(1.8*t); balls[2].position.y = 2.5+1*Math.sin(2.6*t); balls[2].position.z = 10*Math.cos(2.6*t);; renderer.render( scene, camera ); }