Explorar o código

added getBounds (require setting offset)

Nicolas Cannasse %!s(int64=6) %!d(string=hai) anos
pai
achega
d5833c8f1c
Modificáronse 1 ficheiros con 19 adicións e 0 borrados
  1. 19 0
      h3d/prim/Instanced.hx

+ 19 - 0
h3d/prim/Instanced.hx

@@ -3,8 +3,13 @@ package h3d.prim;
 class Instanced extends MeshPrimitive {
 
 	public var commands : h3d.impl.InstanceBuffer;
+	public var offset : h3d.col.Sphere;
+	var baseBounds : h3d.col.Bounds;
+	var tmpBounds : h3d.col.Bounds;
 
 	public function new() {
+		offset = new h3d.col.Sphere();
+		tmpBounds = new h3d.col.Bounds();
 	}
 
 	public function setMesh( m : MeshPrimitive ) {
@@ -12,6 +17,7 @@ class Instanced extends MeshPrimitive {
 		if( m.buffer == null ) m.alloc(engine);
 		buffer = m.buffer;
 		indexes = m.indexes;
+		baseBounds = m.getBounds();
 		if( indexes == null ) indexes = engine.mem.triIndexes;
 		for( bid in m.bufferCache.keys() ) {
 			var b = m.bufferCache.get(bid);
@@ -19,6 +25,19 @@ class Instanced extends MeshPrimitive {
 		}
 	}
 
+	override function getBounds():h3d.col.Bounds {
+		tmpBounds.load(baseBounds);
+		var r = offset.r;
+		tmpBounds.offset(offset.x, offset.y, offset.z);
+		tmpBounds.xMin -= r;
+		tmpBounds.yMin -= r;
+		tmpBounds.zMin -= r;
+		tmpBounds.xMax += r;
+		tmpBounds.yMax += r;
+		tmpBounds.zMax += r;
+		return tmpBounds;
+	}
+
 	// make public
 	public override function addBuffer( name, buffer, offset = 0 ) {
 		super.addBuffer(name, buffer, offset);