This repository has been archived on 2026-10-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2020-07-04 12:46:04 +02:00

152 lines
4.7 KiB
JavaScript

/* global THREE, window, document, $ */
(function () {
'use strict';
$(document).ready(function() {
var cubes = [];
var floors = [];
var bboxes = [];
var scene = new THREE.Scene();
var sceneWidth = 1000;
var sceneHeight = 1000;
//var smallestSize = Math.min(window.innerWidth, window.innerHeight);
//var sceneWidth = smallestSize;
//var sceneHeight = smallestSize;
var effectFXAA;
var composer;
var camera = new THREE.PerspectiveCamera( 75, sceneHeight / sceneWidth, 0.1, 2500 );
var renderer = new THREE.WebGLRenderer({ alpha: true, antialias: true });
renderer.setSize(sceneWidth, sceneHeight);
document.getElementById('map').appendChild( renderer.domElement );
// material
var green_color = 0x00ff00;
var red_color = 0xcb3626;
var orange_color = 0xf58220;
var material = new THREE.LineBasicMaterial( { color: green_color, opacity: 0.3, blending: THREE.AdditiveBlending, transparent: true } );
var red_material = new THREE.MeshBasicMaterial( { color: red_color, opacity: 1, blending: THREE.AdditiveBlending, transparent: true } );
// rooms
var floor_height = 100;
var axis = new THREE.Vector3(0, 0.5, 0);//tilted a bit on x and y - feel free to plug your different axis here
function render() {
var i = 0;
var rad = 0;
var radIncrement = 0.001;
window.requestAnimationFrame(render);
var brand = scene.getObjectByName('brand');
for(i=0; i<scene.children.length; i++) {
var f = scene.children[i];
//in your update/draw function
rad -= radIncrement;
brand.rotateOnAxis(axis,rad);
}
//for(i=0; i<bboxes.length; i++) {
// bboxes[i].update();
//}
renderer.render(scene, camera);
//renderer.clear();
//composer.render();
}
function add_rooms(rooms, floor) {
var i = 0;
var cube;
var floor_container = new THREE.Object3D();
for(i=0; i<rooms.length; i++) {
var room = rooms[i];
// geometry
var geometry = new THREE.BoxGeometry(room.dimensions.width, room.dimensions.height, floor_height);
// KAK ?
if(floor === 4 && typeof room.number === "object" && (room.number.indexOf("428") > -1 || room.number.indexOf("429") > -1) ) {
cube = new THREE.Mesh( geometry, red_material );
} else {
cube = new THREE.Mesh( geometry, material );
}
cube.position.x = room.position.x + room.dimensions.width / 2;
cube.position.y = room.position.y * -1 - room.dimensions.height / 2; // Why flipped?
cube.position.z = floor_height * floor;
cube.name = room.number;
cubes.push(cube);
floor_container.add( cube );
}
scene.add(floor_container);
floor_container.rotation.z = -90 * (Math.PI / 180);
// DEBUG rotation around center
var bbox = new THREE.BoundingBoxHelper( floor_container, red_color);
bboxes[floor] = bbox;
scene.add(bbox);
}
function drawText() {
var shape = new THREE.TextGeometry("Chateau Neuf", {font: 'helvetiker'});
var wrapper = new THREE.MeshBasicMaterial({color: orange_color});
var words = new THREE.Mesh(shape, wrapper);
words.position.set(-600, -200, 450);
words.rotation.x = 90 * (Math.PI / 180);
words.name = 'brand';
scene.add(words);
}
function onRoomData(data) {
drawText();
var rooms = data.rooms;
var floor = parseInt(rooms[0].number[0], 10);
add_rooms(rooms, floor);
add_rooms(rooms, floor -1); // FIXME: play
camera.position.z = 1100;
camera.position.x = -700;
camera.position.y = -1500;
camera.rotation.x = 55 * (Math.PI / 180);
//camera.lookAt(scene.position);
/* FX */
var renderModel = new THREE.RenderPass( scene, camera );
var effectBloom = new THREE.BloomPass( 1.1 );
var effectCopy = new THREE.ShaderPass( THREE.CopyShader );
effectFXAA = new THREE.ShaderPass( THREE.FXAAShader );
var width = window.innerWidth || 2;
var height = window.innerHeight || 2;
effectFXAA.uniforms.resolution.value.set( 1 / width, 1 / height );
effectCopy.renderToScreen = true;
composer = new THREE.EffectComposer( renderer );
composer.addPass( renderModel );
composer.addPass( effectFXAA );
composer.addPass( effectBloom );
composer.addPass( effectCopy );
render();
}
// load rooms
$.getJSON("/rooms.json", onRoomData);
});
}());