|
@@ -26,7 +26,10 @@ class TriPlane extends Collider {
|
|
|
var nz : 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 ) {
|
|
@@ -55,7 +58,7 @@ class TriPlane extends Collider {
|
|
|
}
|
|
|
|
|
|
public inline function clone() {
|
|
|
- var clone = new TriPlane();
|
|
|
+ var clone = new TriPlane(oriented);
|
|
|
clone.load(this);
|
|
|
if(next != null)
|
|
|
clone.next = next.clone();
|
|
@@ -112,11 +115,11 @@ class TriPlane extends Collider {
|
|
|
|
|
|
inline public function rayIntersection( r : Ray, bestMatch : Bool ) @:privateAccess {
|
|
|
var dr = r.lx * nx + r.ly * ny + r.lz * nz;
|
|
|
- if( dr >= 0 ) // backface culling
|
|
|
+ if( dr >= 0 && oriented ) // backface culling
|
|
|
return -1.;
|
|
|
var nd = d - (r.px * nx + r.py * ny + r.pz * nz);
|
|
|
var k = nd / dr;
|
|
|
- if( k < 0 )
|
|
|
+ if( k < 0 && oriented )
|
|
|
return -1;
|
|
|
var px = r.px + r.lx * k;
|
|
|
var py = r.py + r.ly * k;
|
|
@@ -166,15 +169,17 @@ class TriPlane extends Collider {
|
|
|
class Polygon extends Collider {
|
|
|
|
|
|
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 ) {
|
|
|
for(i in 0...Std.int(indexes.length / 3)) {
|
|
|
var k = i * 3;
|
|
|
|
|
|
- var t = new TriPlane();
|
|
|
+ var t = new TriPlane(oriented);
|
|
|
|
|
|
var i0 = indexes[k] * stride;
|
|
|
var i1 = indexes[k + 1] * stride;
|
|
@@ -197,7 +202,7 @@ class Polygon extends Collider {
|
|
|
}
|
|
|
|
|
|
public function clone() : h3d.col.Polygon {
|
|
|
- var clone = new h3d.col.Polygon();
|
|
|
+ var clone = new h3d.col.Polygon(oriented);
|
|
|
clone.triPlanes = triPlanes.clone();
|
|
|
return clone;
|
|
|
}
|
|
@@ -290,18 +295,21 @@ class Polygon extends Collider {
|
|
|
}
|
|
|
var prim = new h3d.prim.Polygon(points);
|
|
|
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
|
|
|
|
|
|
- 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();
|
|
|
if( p.isConvex() ) {
|
|
|
var p0 = p[0];
|
|
|
for( i in 0...p.length-2 ) {
|
|
|
var p1 = p[i+1];
|
|
|
var p2 = p[i+2];
|
|
|
- var t = new TriPlane();
|
|
|
+ var t = new TriPlane(oriented);
|
|
|
t.init(
|
|
|
new h3d.col.Point(p0.x, p0.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 p1 = p[idx[i*3+1]];
|
|
|
var p2 = p[idx[i*3+2]];
|
|
|
- var t = new TriPlane();
|
|
|
+ var t = new TriPlane(oriented);
|
|
|
t.init(
|
|
|
new h3d.col.Point(p0.x, p0.y, z),
|
|
|
new h3d.col.Point(p1.x, p1.y, z),
|