浏览代码

fix bugs with isAbsoluteShape with several shapes, force bestMatch with several overlapping shapes

Nicolas Cannasse 10 月之前
父节点
当前提交
17344ee1e9
共有 2 个文件被更改,包括 7 次插入5 次删除
  1. 1 1
      h3d/scene/Interactive.hx
  2. 6 4
      h3d/scene/Scene.hx

+ 1 - 1
h3d/scene/Interactive.hx

@@ -48,7 +48,7 @@ class Interactive extends Object implements hxd.SceneEvents.Interactive {
 	public var showDebug(get, set) : Bool;
 
 	/**
-	 *  Tells if our shape is in absolute space (for example ObjectCollider) or relative to the interactive transform.
+	 *  Tells if our shapes are in absolute space (for example ObjectCollider) or relative to the interactive transform.
 	 */
 	public var isAbsoluteShape : Bool = false;
 

+ 6 - 4
h3d/scene/Scene.hx

@@ -189,9 +189,10 @@ class Scene extends Object implements h3d.IDrawable implements hxd.SceneEvents.I
 					var wfactor = 0.;
 
 					// adjust result with better precision
-					if( i.preciseShape != null ) {
-						r.transform(m);
-						var hit = i.preciseShape.rayIntersection(r, i.bestMatch);
+					if( i.preciseShape != null || !i.bestMatch ) {
+						if( !i.isAbsoluteShape )
+							r.transform(m);
+						var hit = (i.preciseShape ?? i.shape).rayIntersection(r, true);
 						if( hit > 0 ) {
 							var hitPoint = r.getPoint(hit);
 							i.hitPoint.x = hitPoint.x;
@@ -204,7 +205,8 @@ class Scene extends Object implements h3d.IDrawable implements hxd.SceneEvents.I
 
 					var p = i.hitPoint.clone();
 					p.w = 1;
-					p.transform3x4(i.absPos);
+					if( !i.isAbsoluteShape )
+						p.transform3x4(i.absPos);
 					p.project(camera.m);
 					i.hitPoint.w = p.z + wfactor;
 				}