diff --git a/index.html b/index.html
index 357a0be..fbaa14b 100644
--- a/index.html
+++ b/index.html
@@ -27,7 +27,6 @@ var bbox = "" + position[0]
+ "," + (position[0]+0.001)
+ "," + (position[1]+0.001)
var queryOSM = `https://overpass-api.de/api/interpreter?data=[out:json];nwr(${bbox});out;`
-console.log( bbox )
// format https://overpass-api.de/output_formats.html#json
// bounding box https://dev.overpass-api.de/overpass-doc/en/full_data/bbox.html
// testing https://overpass-turbo.eu
@@ -35,7 +34,7 @@ fetch(queryOSM).then(response => response.json()).then(data => fromOSMTo3DElemen
// fetch flood data of target location (should be only 2 available) as timeseries
var queryCEREMA = "https://cerema.fr/api/"+position
-fetch(queryCEREMA).then(response => response.json()).then(data => console.log(data) )
+//fetch(queryCEREMA).then(response => response.json()).then(data => console.log(data) )
// animate water based on flood data
@@ -56,12 +55,13 @@ function fromOSMTo3DElements( josm ){
var houses = josm.elements.filter( e => (e.type == "node" && e.tags && e.tags["addr:housenumber"]))
// does not give a polygon, might need further requests. Might also not be the right way.
addHouses( houses )
- console.log( ways.length, houses.length )
}
function addHouses( houses ){
houses.map( h => {
var el = document.createElement("a-box")
+ // simplification, for a proper polygon see past work
+ // https://glitch.com/edit/#!/ar-room?path=README.md
el.setAttribute("position",
(((h.lat*1000)-(Math.round(h.lat*1000)))*10).toFixed(3)
+ " 0 "
@@ -75,6 +75,85 @@ function geolocalized( pos ){
console.log( pos.coords )
}
+function addWall(a, b, h, el){
+ var geometry = new THREE.BufferGeometry();
+ // create a simple rectangle shape. We duplicate the top left and bottom right
+ // vertices because each vertex needs to appear once per triangle.
+ var vertices = new Float32Array( [
+ a.x, a.y, a.z,
+ a.x, a.y+h, a.z,
+ b.x, b.y, b.z,
+
+ a.x, a.y+h, a.z,
+ b.x, b.y+h, b.z,
+ b.x, b.y, b.z,
+ ] );
+
+ // itemSize = 3 because there are 3 values (components) per vertex
+ geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
+ var material = new THREE.MeshBasicMaterial( { color: 0xffffff, opacity: 0.5, transparent: true, side: THREE.DoubleSide } );
+ var mesh = new THREE.Mesh( geometry, material );
+ var entity = document.createElement("a-entity");
+ entity.object3D.add( mesh );
+ el.appendChild( entity );
+
+}
+
+function addFloorFan(a, b, c, el){
+ var geometry = new THREE.BufferGeometry();
+ var vertices = new Float32Array( [
+ a.x, a.y, a.z,
+ b.x, b.y, b.z,
+ c.x, c.y, c.z,
+ ] );
+
+ // itemSize = 3 because there are 3 values (components) per vertex
+ geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
+ var material = new THREE.MeshBasicMaterial( { color: 0xffffff, opacity: 0.5, transparent: true, side: THREE.DoubleSide } );
+ var mesh = new THREE.Mesh( geometry, material );
+ var entity = document.createElement("a-entity");
+ entity.object3D.add( mesh );
+ el.appendChild( entity );
+}
+
+function make3DFloor(points, el){ // assumes an array of threejs Vector3, not AFRAME elements anymore
+ var entity = document.createElement("a-entity")
+ var centroid = getCentroid( points )
+ entity.id = "roomcentroid"
+ entity.setAttribute("position", centroid)
+ el.appendChild( entity )
+
+ points.map( (e,i,arr) => {
+ (i==arr.length-1) ? addFloorFan(arr[0], e, centroid, el) : addFloorFan(e, arr[i+1], centroid, el)
+ })
+
+}
+
+function getCentroid(points){
+ var centroid = new THREE.Vector3(0,0,0);
+ // can probably be simplied now that we rely on threejs vectors rather than AFrame elements
+ for (var e of points) {
+ centroid.add( e );
+ }
+ centroid.divideScalar(points.length);
+ return centroid;
+}
+
+AFRAME.registerComponent('procgen', {
+ init: function () {
+ var el = this.el
+ var a = new THREE.Vector3(1,0,1)
+ var b = new THREE.Vector3(-1,0,1)
+ var c = new THREE.Vector3(-1,0,-1)
+ var d = new THREE.Vector3(0,0,-2)
+ var e = new THREE.Vector3(1,0,-1)
+ var poly = [a,b,c,d,e]
+ var h = 2
+ poly.map( (e,i,arr) => { (i==arr.length-1) ? addWall(arr[0], e, h, el) : addWall(e, arr[i+1], h, el) })
+ make3DFloor( poly, el )
+ }
+});
+
@@ -82,6 +161,8 @@ function geolocalized( pos ){
+
+