-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoutdoor.js
107 lines (80 loc) · 3.33 KB
/
outdoor.js
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
function createSkybox(dim) {
/* Questa funzione crea e restituisce una skybox per rappresentare l'orizzonte */
var imagePrefix = "images/textures/skybox/skybox-";
var directions = ["xpos", "xneg", "ypos", "yneg", "zpos", "zneg"];
var imageSuffix = ".jpg";
var skyGeometry = new THREE.BoxGeometry( dim, dim, dim );
var materialArray = [];
for (var i = 0; i < 6; i++) {
materialArray.push( new THREE.MeshBasicMaterial({
map: THREE.ImageUtils.loadTexture( imagePrefix + directions[i] + imageSuffix ),
side: THREE.BackSide,
fog: false
}));
}
var skyMaterial = new THREE.MeshFaceMaterial( materialArray );
var skyBox = new THREE.Mesh( skyGeometry, skyMaterial );
return skyBox;
}
function createNightDayCycle() {
/* Questa funzione utilizza la libreria threex.daynight per realizzare un ciclo giorno/notte.
* In particolare verranno restituiti tutti gli oggetti da aggiungere alla scena */
/* Il codice che segue è rielaborato da https://github.com/jeromeetienne/threex.daynight/blob/master/examples/basic.html */
var onRenderFcts= []; // Questo array contiene le funzioni che andranno aggiornate all'interno del renderer
var result = {onRenderFcts: onRenderFcts}; // Oggetto che contiene i valori da restituire
var sunAngle = Math.PI/4;
result.sunAngle = sunAngle;
onRenderFcts.push(function(step){
sunAngle+= step
});
// Cielo stellato
var starField = new THREEx.DayNight.StarField();
starField.object3d.material.fog = false;
onRenderFcts.push(starField.update);
result.starField = starField.object3d;
// Sole
var sunSphere = new THREEx.DayNight.SunSphere();
onRenderFcts.push(sunSphere.update);
result.sunSphere = sunSphere.object3d;
// Directional Light per simulare il sole
var sunLight = new THREEx.DayNight.SunLight();
onRenderFcts.push(sunLight.update);
result.sunLight = sunLight.object3d;
/* Aggiungo una flare light per rendere più realistico il sole */
var textureFlare0 = THREE.ImageUtils.loadTexture("images/textures/lensflare0.png");
var flareColor = new THREE.Color(0xffaacc);
var lensFlare = new THREE.LensFlare(textureFlare0, 350, 0.0, THREE.AdditiveBlending, flareColor);
lensFlare.update = function() {
lensFlare.position = result.sunSphere.position;
}
onRenderFcts.push(lensFlare.update);
result.lensFlare = lensFlare;
return result;
}
function createGround(groundDimension) {
/* Questa funzione crea il terreno su cui poggia l'abitazione sfruttando la libreria threex.grass */
var result = new THREE.Object3D();
// Creo il piano con l'erba
var textureUrl = 'images/textures/ground/grasslight-small.jpg';
var normalUrl = 'images/textures/ground/grasslight-smallNormal.png';
var texture = THREE.ImageUtils.loadTexture(textureUrl);
var normal = THREE.ImageUtils.loadTexture(normalUrl);
texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping;
texture.repeat.x = 10;
texture.repeat.y = 10;
normal.wrapS = THREE.RepeatWrapping;
normal.wrapT = THREE.RepeatWrapping;
normal.repeat.x = 10;
normal.repeat.y = 10;
//normal.normalScale.set(3,3);
var groundGeometry = new THREE.BoxGeometry(groundDimension, groundDimension,2.4);
var groundMaterial = new THREE.MeshPhongMaterial({
map : texture,
normalMap: normal,
emissive: 'green',
side: THREE.DoubleSide
});
var ground = new THREE.Mesh(groundGeometry, groundMaterial);
return ground;
}