Bladeren bron

- SceneEditor: revert selection shapes from Sphere to Boxes, perf gain not worth accuracy loss
- MeshGenerator: partial fix for selection shape

trethaller 5 jaren geleden
bovenliggende
commit
5a9b0802c3
2 gewijzigde bestanden met toevoegingen van 9 en 6 verwijderingen
  1. 4 3
      hide/comp/SceneEditor.hx
  2. 5 3
      hrt/prefab/l3d/MeshGenerator.hx

+ 4 - 3
hide/comp/SceneEditor.hx

@@ -588,7 +588,7 @@ class SceneEditor {
 		var meshes = context.shared.getObjects(elt, h3d.scene.Mesh);
 		var meshes = context.shared.getObjects(elt, h3d.scene.Mesh);
 		var invRootMat = local3d.getAbsPos().clone();
 		var invRootMat = local3d.getAbsPos().clone();
 		invRootMat.invert();
 		invRootMat.invert();
-		var bounds = new h3d.col.Sphere();
+		var bounds = new h3d.col.Bounds();
 		for(mesh in meshes) {
 		for(mesh in meshes) {
 			if(mesh.ignoreCollide)
 			if(mesh.ignoreCollide)
 				continue;
 				continue;
@@ -603,8 +603,9 @@ class SceneEditor {
 
 
 			var localMat = mesh.getAbsPos().clone();
 			var localMat = mesh.getAbsPos().clone();
 			localMat.multiply(localMat, invRootMat);
 			localMat.multiply(localMat, invRootMat);
-			var lb = mesh.primitive.getBounds().toSphere();
-			bounds.r = hxd.Math.max(bounds.r, lb.r + localMat.getPosition().length());
+			var lb = mesh.primitive.getBounds().clone();
+			lb.transform(localMat);
+			bounds.add(lb);
 		}
 		}
 		var meshCollider = new h3d.col.Collider.GroupCollider([for(m in meshes) {
 		var meshCollider = new h3d.col.Collider.GroupCollider([for(m in meshes) {
 			var c : h3d.col.Collider = try m.getGlobalCollider() catch(e: Dynamic) null;
 			var c : h3d.col.Collider = try m.getGlobalCollider() catch(e: Dynamic) null;

+ 5 - 3
hrt/prefab/l3d/MeshGenerator.hx

@@ -104,7 +104,7 @@ class MeshGeneratorRoot extends h3d.scene.Object {
 	}
 	}
 
 
 	override function syncRec( ctx ) {
 	override function syncRec( ctx ) {
-		if( posChanged ) 
+		if( posChanged )
 			super.syncRec(ctx);
 			super.syncRec(ctx);
 	}
 	}
 }
 }
@@ -175,10 +175,12 @@ class MeshGenerator extends Object3D {
 		#if editor
 		#if editor
 		// Only one CullingCollider for performance
 		// Only one CullingCollider for performance
 		var rootPos = rootObject.getAbsPos().getPosition();
 		var rootPos = rootObject.getAbsPos().getPosition();
-		var mainCullingCollider = new h3d.col.Sphere(rootPos.x, rootPos.y, rootPos.z, 0.0);
+		var sphere = new h3d.col.Sphere();
+		var mainCullingCollider = new h3d.col.ObjectCollider(rootObject, sphere);
 		for( m in ctx.local3d.findAll(o -> Std.downcast(o, h3d.scene.Mesh)) ) {
 		for( m in ctx.local3d.findAll(o -> Std.downcast(o, h3d.scene.Mesh)) ) {
 			m.cullingCollider = mainCullingCollider;
 			m.cullingCollider = mainCullingCollider;
-			mainCullingCollider.r = hxd.Math.max(mainCullingCollider.r, m.primitive.getBounds().toSphere().r + m.getAbsPos().getPosition().sub(rootPos).length());
+			// TODO: doesn't take scale into account
+			sphere.r = hxd.Math.max(sphere.r, m.primitive.getBounds().toSphere().r + m.getAbsPos().getPosition().sub(rootPos).length());
 		}
 		}
 		#end
 		#end
 	}
 	}