Stegreifentwerfen "gesteckt nicht geschraubt 2.0"

digitales Stegreifentwerfen
G. Wurzer, W.E. Lorenz, S. Swoboda. Im Zuge der Lehrveranstaltung wird die Digitalisierung vom Entwurfsprozess bis zur Produktion an Hand einer selbsttragenden Holzstruktur untersucht: vom Stadtmöbel über die Skulptur zur Brücke. ...

dap – digital architecture and planning

TU Wien | dap – digital architecture and planning
Logo und CI Entwicklung (Logo, Briefpapier, Visitenkarte)

SimAUD 2020:
Proceedings

2020 Proceedings of the Symposium on Simulation for Architecture and Urban Design
A. Chronis, G. Wurzer, W.E. Lorenz, C.M. Herr, U. Pont, D. Cupkova, G. Wainer (ed.)
SimAUD, Vienna (online), 2020, ISBN: 978-1-56555-371-2; 622 pages
zu den Proceedings

"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;
          }
          }
        }
      }
  }