瀏覽代碼

added pbr DirLight

ncannasse 7 年之前
父節點
當前提交
a3c9b18503
共有 4 個文件被更改,包括 48 次插入12 次删除
  1. 31 0
      h3d/scene/pbr/DirLight.hx
  2. 15 0
      h3d/scene/pbr/Light.hx
  3. 2 1
      h3d/scene/pbr/LightSystem.hx
  4. 0 11
      h3d/scene/pbr/PointLight.hx

+ 31 - 0
h3d/scene/pbr/DirLight.hx

@@ -0,0 +1,31 @@
+package h3d.scene.pbr;
+
+class DirLight extends Light {
+
+	var pbr : h3d.shader.pbr.Light.DirLight;
+	public var direction : h3d.Vector;
+
+	public function new(?direction, ?parent) {
+		pbr = new h3d.shader.pbr.Light.DirLight();
+		super(pbr,parent);
+		this.direction = direction == null ? new h3d.Vector(0,0,-1) : direction;
+	}
+
+	override function get_isSun() {
+		return pbr.isSun;
+	}
+
+	override function set_isSun(b:Bool) {
+		return pbr.isSun = b;
+	}
+
+	override function emit(ctx:RenderContext) {
+		pbr.lightColor.load(_color);
+		pbr.lightColor.scale3(power * power);
+		pbr.lightDir.load(direction);
+		pbr.lightDir.scale3(-1);
+		pbr.lightDir.normalize();
+		super.emit(ctx);
+	}
+
+}

+ 15 - 0
h3d/scene/pbr/Light.hx

@@ -2,9 +2,24 @@ package h3d.scene.pbr;
 
 class Light extends h3d.scene.Light {
 
+	var _color : h3d.Vector;
 	var primitive : h3d.prim.Primitive;
+	@:s public var power : Float = 1.;
 	public var isSun(get,set) : Bool;
 
+	function new(shader,?parent) {
+		super(shader,parent);
+		_color = new h3d.Vector(1,1,1,1);
+	}
+
+	override function get_color() {
+		return _color;
+	}
+
+	override function set_color(v:h3d.Vector) {
+		return _color = v;
+	}
+
 	function get_isSun() {
 		return false;
 	}

+ 2 - 1
h3d/scene/pbr/LightSystem.hx

@@ -18,6 +18,7 @@ class LightSystem extends h3d.scene.LightSystem {
 		if( lightPass == null ) {
 			initDone = true;
 			lightPass = new h3d.pass.ScreenFx(r.pbrProps);
+			lightPass.addShader(new h3d.shader.ScreenShader());
 			lightPass.addShader(r.pbrDirect);
 			@:privateAccess lightPass.pass.setBlendMode(Add);
 		}
@@ -29,7 +30,7 @@ class LightSystem extends h3d.scene.LightSystem {
 		while( light != null ) {
 			if( light != shadowLight ) {
 				var light = Std.instance(light, h3d.scene.pbr.Light);
-				if( light != null /*&& light.primitive == null*/ ) {
+				if( light != null && light.primitive == null ) {
 					lightPass.addShader(light.shader);
 					lightPass.render();
 					lightPass.removeShader(light.shader);

+ 0 - 11
h3d/scene/pbr/PointLight.hx

@@ -2,9 +2,7 @@ package h3d.scene.pbr;
 
 class PointLight extends Light {
 
-	var _color : h3d.Vector;
 	var pbr : h3d.shader.pbr.Light.PointLight;
-	@:s public var power : Float = 1.;
 	public var size : Float;
 	/**
 		Alias for uniform scale.
@@ -15,18 +13,9 @@ class PointLight extends Light {
 		pbr = new h3d.shader.pbr.Light.PointLight();
 		super(pbr,parent);
 		range = 10;
-		_color = new h3d.Vector(1,1,1,1);
 		primitive = h3d.prim.Sphere.defaultUnitSphere();
 	}
 
-	override function get_color() {
-		return _color;
-	}
-
-	override function set_color(v:h3d.Vector) {
-		return _color = v;
-	}
-
 	function get_range() {
 		return cullingDistance;
 	}