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

Sunbeams

This project uses three.js. Make your choice and press reset.

  • intersections between sunbeams and ground

code

///////////////////////////////////
// ADD BUILDING /////////////
  /* construct building */
  var building = new THREE.Object3D();
  for ( var i = 0; i < xSize; i++ ) {
    for ( var j = 0; j < ySize; j++ ) {
      for ( var k = 0; k < zSize; k++ ) {
        /* cube */
        var mGeometry = new THREE.BoxGeometry( boxSize, boxSize, boxSize );
        var mMaterial = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
        var cube = new THREE.Mesh( mGeometry, mMaterial );
        /* edges */
        var mEdges = new THREE.EdgesGeometry( mGeometry );
        var mLine = new THREE.LineSegments( mEdges, new THREE.LineBasicMaterial( { color: 0x0000ff } ) );
        cube.add ( mLine );
        //cube.userData = "isBuilding";
        /* change position */
        cube.position.x = ( i * boxSize ) - ((( xSize - 1 ) / 2 ) * boxSize );
        cube.position.z = ( j * boxSize ) - ((( ySize - 1 ) / 2 ) * boxSize );
        cube.position.y = ( k * boxSize ) + ( boxSize / 2 );
        building.add ( cube );
      }
    }
  }
  scene.add ( building );

///////////////////////////////////
// CALCULATE INTERSECTION
  /* midpoint of sun */
  var Sx = sphere.position.x
  var Sy = sphere.position.y
  var Sz = sphere.position.z
  /* the normal of the plane */
  var Ex = pNormal.x
  var Ey = pNormal.y
  var Ez = pNormal.z
  for (var i = 0; i < building.children.length; i++) {
    /* midpoint of cubes */
    var Mx = building.children[i].position.x
    var My = building.children[i].position.y
    var Mz = building.children[i].position.z
    /* line: Sx + (Mx -Sx) * t; Sy + (My -Sy) * t; Sz + (Mz -Sz) * t;
       plane: normal and pt (0,0,0) */
    var t = ( - Ex * Sx - Ey * Sy - Ez * Sz ) / (Ex * Mx - Ex * Sx + Ey * My - Ey * Sy + Ez * Mz - Ez * Sz )
    var ptX = Sx + ( Mx - Sx ) * t
    var ptY = Sy + ( My - Sy ) * t
    var ptZ = Sz + ( Mz - Sz ) * t
    /* intersection point as sphere */
    var iGeometry = new THREE.SphereGeometry( boxSize, 16, 16 );
    var iMaterial = new THREE.MeshBasicMaterial( {color: 0x0fff00} );
    var intersPt = new THREE.Mesh( iGeometry, iMaterial );
    /* change position */
    intersPt.position.x = ptX;
    intersPt.position.y = ptY;
    intersPt.position.z = ptZ;
    scene.add( intersPt );

    /* show sunlines */
    var midPointSphere = sphere.position
    var midPointMesh = intersPt.position
    var dirGeometry = new THREE.Geometry();
    dirGeometry.vertices.push( midPointSphere, midPointMesh );
    var dirMaterial = new THREE.LineBasicMaterial({ color: 0x0f00ff });
    var dirLine  = new THREE.Line( dirGeometry, dirMaterial );
    scene.add( dirLine );
    if (program.get('showSunLines') == true) {
      dirLine.visible = true
    } else {
      dirLine.visible = false
    }
  }