2
0
Эх сурвалжийг харах

Adding oriented param on h3d/col/Polygon.hx

clementlandrin 11 сар өмнө
parent
commit
ae5f306158
1 өөрчлөгдсөн 19 нэмэгдсэн , 11 устгасан
  1. 19 11
      h3d/col/Polygon.hx

+ 19 - 11
h3d/col/Polygon.hx

@@ -26,7 +26,10 @@ class TriPlane extends Collider {
 	var nz : Float;
 	var nz : Float;
 	var d : Float;
 	var d : Float;
 
 
-	public function new() {
+	var oriented : Bool;
+
+	public function new(o = false) {
+		oriented = o;
 	}
 	}
 
 
 	public inline function init( p0 : Point, p1 : Point, p2 : Point ) {
 	public inline function init( p0 : Point, p1 : Point, p2 : Point ) {
@@ -55,7 +58,7 @@ class TriPlane extends Collider {
 	}
 	}
 
 
 	public inline function clone() {
 	public inline function clone() {
-		var clone = new TriPlane();
+		var clone = new TriPlane(oriented);
 		clone.load(this);
 		clone.load(this);
 		if(next != null)
 		if(next != null)
 			clone.next = next.clone();
 			clone.next = next.clone();
@@ -112,11 +115,11 @@ class TriPlane extends Collider {
 
 
 	inline public function rayIntersection( r : Ray, bestMatch : Bool ) @:privateAccess {
 	inline public function rayIntersection( r : Ray, bestMatch : Bool ) @:privateAccess {
 		var dr = r.lx * nx + r.ly * ny + r.lz * nz;
 		var dr = r.lx * nx + r.ly * ny + r.lz * nz;
-		if( dr >= 0 ) // backface culling
+		if( dr >= 0 && oriented ) // backface culling
 			return -1.;
 			return -1.;
 		var nd = d - (r.px * nx + r.py * ny + r.pz * nz);
 		var nd = d - (r.px * nx + r.py * ny + r.pz * nz);
 		var k = nd / dr;
 		var k = nd / dr;
-		if( k < 0 )
+		if( k < 0 && oriented )
 			return -1;
 			return -1;
 		var px = r.px + r.lx * k;
 		var px = r.px + r.lx * k;
 		var py = r.py + r.ly * k;
 		var py = r.py + r.ly * k;
@@ -166,15 +169,17 @@ class TriPlane extends Collider {
 class Polygon extends Collider {
 class Polygon extends Collider {
 
 
 	var triPlanes : TriPlane;
 	var triPlanes : TriPlane;
+	var oriented : Bool;
 
 
-	public function new() {
+	public function new(o = false) {
+		oriented = o;
 	}
 	}
 
 
 	public function addBuffers( vertexes : haxe.ds.Vector<hxd.impl.Float32>, indexes : haxe.ds.Vector<Int>, stride = 3 ) {
 	public function addBuffers( vertexes : haxe.ds.Vector<hxd.impl.Float32>, indexes : haxe.ds.Vector<Int>, stride = 3 ) {
 		for(i in 0...Std.int(indexes.length / 3)) {
 		for(i in 0...Std.int(indexes.length / 3)) {
 			var k = i * 3;
 			var k = i * 3;
 
 
-			var t = new TriPlane();
+			var t = new TriPlane(oriented);
 
 
 			var i0 = indexes[k] * stride;
 			var i0 = indexes[k] * stride;
 			var i1 = indexes[k + 1] * stride;
 			var i1 = indexes[k + 1] * stride;
@@ -197,7 +202,7 @@ class Polygon extends Collider {
 	}
 	}
 
 
 	public function clone() : h3d.col.Polygon {
 	public function clone() : h3d.col.Polygon {
-		var clone = new h3d.col.Polygon();
+		var clone = new h3d.col.Polygon(oriented);
 		clone.triPlanes = triPlanes.clone();
 		clone.triPlanes = triPlanes.clone();
 		return clone;
 		return clone;
 	}
 	}
@@ -290,18 +295,21 @@ class Polygon extends Collider {
 		}
 		}
 		var prim = new h3d.prim.Polygon(points);
 		var prim = new h3d.prim.Polygon(points);
 		prim.addNormals();
 		prim.addNormals();
-		return new h3d.scene.Mesh(prim);
+		var mesh = new h3d.scene.Mesh(prim);
+		if ( !oriented )
+			mesh.material.mainPass.culling = None;
+		return mesh;
 	}
 	}
 	#end
 	#end
 
 
-	public static function fromPolygon2D( p : h2d.col.Polygon, z = 0. ) {
+	public static function fromPolygon2D( p : h2d.col.Polygon, z = 0., oriented = true ) {
 		var pout = new Polygon();
 		var pout = new Polygon();
 		if( p.isConvex() ) {
 		if( p.isConvex() ) {
 			var p0 = p[0];
 			var p0 = p[0];
 			for( i in 0...p.length-2 ) {
 			for( i in 0...p.length-2 ) {
 				var p1 = p[i+1];
 				var p1 = p[i+1];
 				var p2 = p[i+2];
 				var p2 = p[i+2];
-				var t = new TriPlane();
+				var t = new TriPlane(oriented);
 				t.init(
 				t.init(
 					new h3d.col.Point(p0.x, p0.y, z),
 					new h3d.col.Point(p0.x, p0.y, z),
 					new h3d.col.Point(p1.x, p1.y, z),
 					new h3d.col.Point(p1.x, p1.y, z),
@@ -316,7 +324,7 @@ class Polygon extends Collider {
 				var p0 = p[idx[i*3]];
 				var p0 = p[idx[i*3]];
 				var p1 = p[idx[i*3+1]];
 				var p1 = p[idx[i*3+1]];
 				var p2 = p[idx[i*3+2]];
 				var p2 = p[idx[i*3+2]];
-				var t = new TriPlane();
+				var t = new TriPlane(oriented);
 				t.init(
 				t.init(
 					new h3d.col.Point(p0.x, p0.y, z),
 					new h3d.col.Point(p0.x, p0.y, z),
 					new h3d.col.Point(p1.x, p1.y, z),
 					new h3d.col.Point(p1.x, p1.y, z),