Selaa lähdekoodia

Add support for polygon

trethaller 7 vuotta sitten
vanhempi
commit
205db65242
4 muutettua tiedostoa jossa 74 lisäystä ja 2 poistoa
  1. 4 0
      hide/Renderer.hx
  2. 1 1
      hide/prefab/Box.hx
  3. 68 0
      hide/prefab/l3d/Polygon.hx
  4. 1 1
      hide/view/l3d/Level3D.hx

+ 4 - 0
hide/Renderer.hx

@@ -9,6 +9,9 @@ class MaterialSetup extends h3d.mat.MaterialSetup {
 class Renderer extends h3d.scene.DefaultRenderer {
 
 	override function render() {
+		renderPass(defaultPass, getSort("ground", true) );
+		clear(null, 1.0);
+
 		if( has("shadow") )
 			renderPass(shadow,get("shadow"));
 
@@ -21,6 +24,7 @@ class Renderer extends h3d.scene.DefaultRenderer {
 		renderPass(defaultPass, getSort("default", true) );
         renderPass(defaultPass, get("outline"));
 		renderPass(defaultPass, get("outlined"));
+		renderPass(defaultPass, getSort("ground_alpha"));
 		renderPass(defaultPass, getSort("alpha") );
 		renderPass(defaultPass, get("additive") );
 		renderPass(defaultPass, getSort("ui", true));

+ 1 - 1
hide/prefab/Box.hx

@@ -19,10 +19,10 @@ class Box extends Object3D {
 		mesh.setPos(-0.5, -0.5, -0.5);
 		var mat = mesh.material;
 		mat.color.setColor(0x60ff00ff);
+		mat.blendMode = Alpha;
 		mat.mainPass.depthWrite = false;
 		mat.mainPass.setPassName("alpha");
 		mat.shadows = false;
-		mat.blendMode = Alpha;
 
 		var wire = new h3d.scene.Box(obj);
 		wire.color = 0;

+ 68 - 0
hide/prefab/l3d/Polygon.hx

@@ -0,0 +1,68 @@
+package hide.prefab.l3d;
+import h3d.col.Point;
+
+class Polygon extends Object3D {
+
+	var data : Array<Float> = null;
+	var mesh : h3d.scene.Mesh = null;
+
+	override function save() {
+		var obj : Dynamic = super.save();
+		obj.data = data;
+		return obj;
+	}
+
+	override function load( obj : Dynamic ) {
+		super.load(obj);
+		data = obj.data;
+	}
+
+	override function makeInstance(ctx:Context):Context {
+		ctx = ctx.clone(this);
+		var points = [];
+		var d = this.data;
+		if(d == null) {
+			d = [-0.5, -0.5,
+				  0.5, -0.5,
+				  0.5,  0.5,
+				 -0.5,  0.5];
+		}
+		var npts = Std.int(d.length / 2);
+		for(i in 0...npts) {
+			var x = d[(i<<1)];
+			var y = d[(i<<1) + 1];
+			var vert = new h2d.col.Point(x, y);
+			points.push(vert);
+		}
+		var poly2d = new h2d.col.Polygon(points);
+		var indices = poly2d.fastTriangulate();
+		var verts = [for(p in points) new h3d.col.Point(p.x, p.y, 0.)];
+		var prim = new h3d.prim.Polygon(verts, cast indices);
+		var n = new h3d.col.Point(0, 0, 1.);
+		prim.normals = [for(p in points) n];
+
+		var obj = new h3d.scene.Object(ctx.local3d);
+		mesh = new h3d.scene.Mesh(prim, obj);
+		var mat = mesh.material;
+		mat.color.setColor(0x40ff00ff);
+		mat.mainPass.culling = None;
+		mat.mainPass.setPassName("ground");
+		mat.mainPass.setBlendMode(Alpha);
+		mat.mainPass.depthWrite = true;
+
+		var alpha = mat.allocPass("ground_alpha");
+		alpha.setBlendMode(Alpha);
+		alpha.depthWrite = false;
+		mat.shadows = false;
+		ctx.local3d = obj;
+		ctx.local3d.name = name;
+		applyPos(ctx.local3d);
+		return ctx;
+	}
+
+	override function getHideProps() {
+		return { icon : "square", name : "Polygon", fileSource : null };
+	}
+
+	static var _ = Library.register("polygon", Polygon);
+}

+ 1 - 1
hide/view/l3d/Level3D.hx

@@ -444,7 +444,7 @@ class Level3D extends FileView {
 
 			var newItems = new Array<hide.comp.ContextMenu.ContextMenuItem>();
 			var allRegs = @:privateAccess hide.prefab.Library.registeredElements;
-			var allowed = ["model", "object", "layer", "box"];
+			var allowed = ["model", "object", "layer", "box", "polygon"];
 			for( ptype in allowed ) {
 				var pcl = allRegs.get(ptype);
 				var props = Type.createEmptyInstance(pcl).getHideProps();