Fork Heaps on GitHub
Menu

Example PointLights

«    »

Point based lights moving between cuboids (use mouse keys to move camera)

import hxd.Math;

class PointLights extends hxd.App {

  var time : Float = 0.;
  var lights : Array<h3d.scene.fwd.PointLight>;
  var dir : h3d.scene.fwd.DirLight;

  override function init() {
    var prim = new h3d.prim.Cube();
    prim.translate( -0.5, -0.5, -0.5);
    prim.addNormals();
    for( i in 0...100 ) {
      var b = new h3d.scene.Mesh(prim, s3d);
      b.x = Math.srand() * 3;
      b.y = Math.srand() * 3;
      b.z = Math.srand() * 2 - 0.5;
      b.scaleX = b.scaleY = Math.random() * 0.5 + 0.2;
      var k = 1.;
      b.material.color.setColor(0xFFFFFF);
      b.material.shadows = false;
    }

    var sphere = new h3d.prim.GeoSphere(4);

    lights = [];
    var colors = [0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0xFF00FF, 0xFFFF00, 0x00FFFF];
    for( c in colors ) {
      for( i in 0...3 ) {
        var l = new h3d.scene.fwd.PointLight(s3d);
        l.x = Math.srand() * 3;
        l.y = Math.srand() * 3;
        l.z = Math.srand() * 2 - 0.5;
        l.color.setColor(c);
        l.params.y = 3;
        lights.push(l);
        var p = new h3d.scene.Mesh(sphere, l);
        p.scale(0.03);
        p.material.shadows = false;
        p.material.mainPass.enableLights = false;
        p.material.color.setColor(0xFF000000 | c);
      }
    }
    s3d.camera.zNear = 2;


    dir = new h3d.scene.fwd.DirLight(new h3d.Vector(0.2, 0.3, -1), s3d);
    dir.color.set(0.1, 0.1, 0.1);

    cast(s3d.lightSystem,h3d.scene.fwd.LightSystem).ambientLight.set(0, 0, 0);

    s3d.camera.pos.set(5, 1, 3);
    new h3d.scene.CameraController(s3d).loadFromCamera();
  }

  override function update( dt : Float ) {
    time += 0.12 * dt;

    var a = [0.4, 0.2, 0.5, 0.8, 1.2, 0.5, 0.7];
    for( i in 0...lights.length ) {
      var l = lights[i];
      var t = time * 5 + i;
      l.x = Math.cos(t * a[i%a.length]) * 3;
      l.y = Math.sin(t * a[(i + 3) % a.length]) * 3;
      l.z = Math.cos(t * a[(i + 4) % a.length]) * Math.sin(t * a[(i + 6) % a.length]) * 2 - 0.5;
    }

    dir.setDirection(new h3d.Vector(Math.cos(time * 0.3) * 0.2, Math.sin(time * 0.35) * 0.3 + 0.3, -1));

  }

  static function main() {
    new PointLights();
  }

}

View source on Github Open in new tab