fireball/src/world.js
2018-12-28 23:04:00 +03:30

131 lines
2.9 KiB
JavaScript

const camera = new WHS.PerspectiveCamera({ // Apply a camera.
position: {
x: 0,
y: 40,
z: 100,
},
far: 1e5,
aspect: window.innerWidth / window.innerHeight,
});
const app = new WHS.App([
new WHS.ElementModule(), // Apply to DOM.
new WHS.SceneModule(), // Create a new THREE.Scene and set it to app.
new WHS.DefineModule('camera', camera),
new PHYSICS.WorldModule({
gravity: new THREE.Vector3(0, -100, 0),
ammo: 'http://localhost:8080/lib/ammo.js',
}),
new WHS.RenderingModule({ bgColor: 0x162129 }), // Apply THREE.WebGLRenderer
new WHS.ResizeModule(), // Make it resizable.
new WHS.FogModule({
color: 0x660000,
density: 1e-4
}, 'exp2'),
]);
app.camera = camera;
app.physics = app.modules[3];
let ground;
(function groundinit() {
const WIDTH = 500;
const SIZE = 1e5;
ground = new WHS.Plane({
geometry: {
width: WIDTH,
height: SIZE,
},
position: {
x: 0,
y: -10,
},
rotation: new THREE.Euler(-Math.PI / 2,0,0),
modules: [
new WHS.TextureModule({
url: 'assets/textures/metal.png',
repeat: new THREE.Vector2(2, SIZE / 200)
}),
new PHYSICS.PlaneModule({
mass: 0,
restitution: 0,
}),
],
material: new THREE.MeshPhongMaterial({ color: 0xffffff })
});
ground.SIZE = SIZE;
ground.addTo(app);
}());
(function lava() {
const size = 1e5;
const lava = new WHS.Plane({
geometry: {
width: size,
height: size,
},
position: {
x: 0,
y: 0,
z: -300,
},
//rotation: new THREE.Euler(-Math.PI / 2, 0, 0),
modules: [
new WHS.TextureModule({
url: 'assets/textures/lava.jpg',
repeat: new THREE.Vector2(size / 200, size / 200)
}),
],
material: new THREE.MeshPhongMaterial({
color: 0xffffff,
}),
});
//lava.addTo(app);
//console.log(lava);
ground.add(lava);
}());
(function sky() {
const sky = new THREE.Sky();
sky.scale.setScalar(450000);
const uniforms = sky.material.uniforms;
uniforms.turbidity.value = 10;
uniforms.rayleigh.value = 2;
uniforms.luminance.value = 1;
uniforms.mieCoefficient.value = 0.005;
uniforms.mieDirectionalG.value = 0.8;
sunSphere = new THREE.Mesh(
new THREE.SphereBufferGeometry( 20000, 16, 8 ),
new THREE.MeshBasicMaterial( { color: 0xffffff } )
);
sunSphere.position.y = 10000;
var distance = 400000;
const inclination = 0.5;
const azimuth = 0.25;
var theta = Math.PI * ( inclination - 0.5 );
var phi = 2 * Math.PI * ( azimuth - 0.5 );
sunSphere.position.x = distance * Math.cos( phi );
sunSphere.position.y = distance * Math.sin( phi ) * Math.sin( theta );
sunSphere.position.z = distance * Math.sin( phi ) * Math.cos( theta );
uniforms.sunPosition.value.copy( sunSphere.position );
const sk = WHS.MeshComponent.create(sky.geometry, { material: sky.material });
const scene = app.getScene();
scene.add(sky);
scene.add(sunSphere);
}());