Visual representation of adjacencies

eCAADe SIGraDi 2019 - Architecture in the Age of the 4th Industrial Revolution. (paper & talk)
W Lorenz, G. Wurzer. This paper is based on the assumption that a key challenge of good design is spatial organisation as a result of functional requirements. The authors present a new NetLogo application that assists designers to understand the proposed functional relationships (of spaces) by visualizing them graphically. ...

kleines Entwerfen customized bricks

digitales Entwerfen
G. Wurzer, W.E. Lorenz, S. Swoboda. Nach positiver Absolvierung der Lehrveranstaltung sind Studierende in der Lage algorithmisch zu Denken. Durch das Präzisieren der Problemstellung sind die Studierenden in der Lage den sinnvollen Einsatz von Algorithmen im Planungsprozess gedanklich zu erfassen. ...

Bridgemagazine Webpage

Webdesign für das bridgmagazin – Medieninhaber (Herausgeber) und Verleger: Österreichischer Bridgesportverband (ÖBV) | Audio Video Werbe-GmbH.

Stegreifentwerfen Hot Wood follow up

follow up "Würschtlstand"
W.E. Lorenz, G. Wurzer, S. Swoboda. Nach positiver Absolvierung der Lehrveranstaltung sind Studierende in der Lage algorithmisch zu Denken. Konkret erlangen sie die Fähigkeit jene Teile des Entwurfsprozesses zu erkennen, die ausprogrammiert zu schnelleren und allenfalls besseren Lösungen führen. Dabei greifen die Studierenden auf die Ergebnisse des kleinen Entwerfens "Hot Wood" aus dem Sommersemester 2019 zurück. ...

 

"Sun Shots"

This project uses three.js. Make your choice and press reset. Or press play button and change settings.

  • a source creates point
  • the point move away from source
  • intersections with ground or buildings are highlighted

code

///////////////////////////////////
// ADD BUILDINGS ////////////

  /* construct buildings */
  var buildings = new THREE.Object3D();
  /* building1 */
  var mGeometry = new THREE.BoxGeometry( bWidth, bHeight, bDepth );
  var mMaterial = new THREE.MeshLambertMaterial( { color: 0xffff00 } );
  var building1 = new THREE.Mesh( mGeometry, mMaterial );
  /* edges */
  var mEdges = new THREE.EdgesGeometry( mGeometry );
  var mLine = new THREE.LineSegments( mEdges, new THREE.LineBasicMaterial( { color: 0x0000ff } ) );
  building1.add ( mLine );
  /* change position */
  building1.position.x = - bWidth * 2 ;
  building1.position.y = bHeight / 2 ;
  building1.position.z = bDepth * 3 ;
  buildings.add ( building1 );

///////////////////////////////////
// SHADOWS //////////////////

  /* 1. tell the renderer that you want shadows */
  renderer.shadowMap.enabled = true;
  renderer.shadowMap.type = THREE.PCFSoftShadowMap;
  renderer.shadowMapSoft = true;
  for (var i = 0; i < buildings.children.length; i++) {
    /* 2. enable objects to cast shadows */
    buildings.children[i].castShadow = true;
    /* 3. enable objects to receive shadows */
    buildings.children[i].receiveShadow = true;
  }
  /* 3. enable objects to receive shadows */
  ground.receiveShadow = true;
  /* 4. enable a light source to cast shadows (directional or spotlight only) */
  light1 = new THREE.PointLight( 0xff0000, 1, 100 );
  light1.position.set( sunSphere.position.x, sunSphere.position.y, sunSphere.position.z );
  light1.castShadow = true;
  scene.add( light1 );

///////////////////////////////////// INTERSECTIONS ///////////

  var numPts = sunPoints.children.length;
  /* move */
  for (var i = 0; i < numPts; i++) {
      sunPoints.children[i].translateX ( sunPoints.children[i].userData.direction.x * step )
      sunPoints.children[i].translateY ( sunPoints.children[i].userData.direction.y * step )
      sunPoints.children[i].translateZ ( sunPoints.children[i].userData.direction.z * step )

      if (( getDistance( sunPoints.children[i], sunSphere ) > maxradius ) || ( sunPoints.children[i].position.y > sunSphere.position.y ) || ( sunPoints.children[i].position.y < (-2 * step) )) {
      sunPoints.children[i].userData.delete = true;
    } else {
      var bounding_sp = new THREE.Box3().setFromObject(sunPoints.children[i]);
      var ground_bounding = new THREE.Box3().setFromObject(ground);
        var intersectGround = ground_bounding.intersectsBox(bounding_sp);
      /* intersection of "sun points" with ground */
        if ( intersectGround == true ){
          sunPoints.children[i].userData.intersects = true;
        } else {
           /* intersection of "sun points" with buildings */
          for (var j = 0; j < buildings.children.length; j++) {
          var building_bounding = new THREE.Box3().setFromObject(buildings.children[j]);
          var intersectBuilding = building_bounding.intersectsBox(bounding_sp);
              if ( intersectBuilding == true ){
                  sunPoints.children[i].userData.intersects = true;
              } else {
            sunPoints.children[i].userData.delete = false;
          }
          }
        }
      }
  }