1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
// Задача: направете движещите се сфери да са
// малки лампи (точкови източници на светлина),
// като светят със съответния цвят на сферата
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 );
}
|