|
@@ -3,8 +3,13 @@ package h3d.prim;
|
|
class Instanced extends MeshPrimitive {
|
|
class Instanced extends MeshPrimitive {
|
|
|
|
|
|
public var commands : h3d.impl.InstanceBuffer;
|
|
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() {
|
|
public function new() {
|
|
|
|
+ offset = new h3d.col.Sphere();
|
|
|
|
+ tmpBounds = new h3d.col.Bounds();
|
|
}
|
|
}
|
|
|
|
|
|
public function setMesh( m : MeshPrimitive ) {
|
|
public function setMesh( m : MeshPrimitive ) {
|
|
@@ -12,6 +17,7 @@ class Instanced extends MeshPrimitive {
|
|
if( m.buffer == null ) m.alloc(engine);
|
|
if( m.buffer == null ) m.alloc(engine);
|
|
buffer = m.buffer;
|
|
buffer = m.buffer;
|
|
indexes = m.indexes;
|
|
indexes = m.indexes;
|
|
|
|
+ baseBounds = m.getBounds();
|
|
if( indexes == null ) indexes = engine.mem.triIndexes;
|
|
if( indexes == null ) indexes = engine.mem.triIndexes;
|
|
for( bid in m.bufferCache.keys() ) {
|
|
for( bid in m.bufferCache.keys() ) {
|
|
var b = m.bufferCache.get(bid);
|
|
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
|
|
// make public
|
|
public override function addBuffer( name, buffer, offset = 0 ) {
|
|
public override function addBuffer( name, buffer, offset = 0 ) {
|
|
super.addBuffer(name, buffer, offset);
|
|
super.addBuffer(name, buffer, offset);
|