Summary Files Commits Branches @commit @diff @stats
path: root / Year 2 / Computer Graphics Fundamentals / 07-Practice-21.11.2022 / 03.js
blob: 4a7272be6df23eaff92a6e56a7bbdbf033458694 (plain) (blame)
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
73
74
75
76
// Задача: Направете топка да се върти в кръг
// около пилон


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 );
}