@@ -859,7 +859,7 @@ class HMDOut extends BaseLibrary {
859859 return { lodLevel : - 1 , modelName : null };
860860 }
861861
862- function buildGeomCollider ( vbuf : FloatBuffer , ibufs : Array <Array <Int >>, dataOut : haxe.io. BytesOutput ) : MeshCollider {
862+ function buildGeomCollider ( targetModel : Model , colliderModel : Model , vbuf : FloatBuffer , ibufs : Array <Array <Int >>, dataOut : haxe.io. BytesOutput ) : MeshCollider {
863863 var vertexCount = Std .int (vbuf .length / 3 );
864864 var indexCount = 0 ;
865865 for ( idx in ibufs ) {
@@ -879,10 +879,16 @@ class HMDOut extends BaseLibrary {
879879 collider .vertexPosition = dataOut .length ;
880880 collider .vertexCount = vertexCount ;
881881 collider .indexCount = indexCount ;
882+ var mat = colliderModel .position .toMatrix ();
883+ var invTargetModelMat = targetModel .position .toMatrix ().getInverse ();
884+ mat .multiply (mat , invTargetModelMat );
885+ var tmpVec = new h3d. Vector ();
882886 iterVertex (function (x , y , z ) {
883- dataOut .writeFloat (x );
884- dataOut .writeFloat (y );
885- dataOut .writeFloat (z );
887+ tmpVec .set (x , y , z );
888+ tmpVec .transform (mat );
889+ dataOut .writeFloat (tmpVec .x );
890+ dataOut .writeFloat (tmpVec .y );
891+ dataOut .writeFloat (tmpVec .z );
886892 });
887893
888894 var is32 = vertexCount > 0x10000 ;
@@ -901,8 +907,7 @@ class HMDOut extends BaseLibrary {
901907 return collider ;
902908 }
903909
904-
905- function buildAutoColliders ( d : hxd.fmt.hmd. Data , vbuf : FloatBuffer , ibufs : Array <Array <Int >>, mids : Array <Int >, bounds : h3d.col. Bounds , generateCollides : CollideParams , dataOut : haxe.io. BytesOutput ) : ConvexHullsCollider {
910+ function buildAutoColliders ( targetModel : Model , colliderModel : Model , d : hxd.fmt.hmd. Data , vbuf : FloatBuffer , ibufs : Array <Array <Int >>, mids : Array <Int >, bounds : h3d.col. Bounds , generateCollides : CollideParams , dataOut : haxe.io. BytesOutput ) : ConvexHullsCollider {
906911 // Format data for our convex hull algorithm
907912 var vertices : Array <Float > = [];
908913 var indexes : Array <Int > = [];
@@ -912,13 +917,19 @@ class HMDOut extends BaseLibrary {
912917 for (idx in ibufs )
913918 indexCount + = idx == null ? 0 : idx .length ;
914919
920+ var mat = colliderModel .position .toMatrix ();
921+ var invTargetModelMat = targetModel .position .toMatrix ().getInverse ();
922+ mat .multiply (mat , invTargetModelMat );
923+ var tmpVec = new h3d. Vector ();
915924 for (i in 0 ... vertexCount ) {
916925 var x = vbuf [i * 3 ];
917926 var y = vbuf [i * 3 + 1 ];
918927 var z = vbuf [i * 3 + 2 ];
919- vertices .push (x );
920- vertices .push (y );
921- vertices .push (z );
928+ tmpVec .set (x , y , z );
929+ tmpVec .transform (mat );
930+ vertices .push (tmpVec .x );
931+ vertices .push (tmpVec .y );
932+ vertices .push (tmpVec .z );
922933 }
923934
924935 for ( idx => ibuf in ibufs ) {
@@ -1432,12 +1443,12 @@ class HMDOut extends BaseLibrary {
14321443 var collider : Collider = switch (colliderType ) {
14331444 case Empty :
14341445 new EmptyCollider ();
1435- case ConvexHulls (model ):
1436- var gdataCol = hgeomCol .get (model .geometry );
1437- buildAutoColliders (d , gdataCol .vbuf , gdataCol .ibufs , gdataCol .mids , d .geometries [model .geometry ].bounds , params , dataOut );
1438- case Mesh (model ):
1439- var gdataCol = hgeomCol .get (model .geometry );
1440- buildGeomCollider (gdataCol .vbuf , gdataCol .ibufs , dataOut );
1446+ case ConvexHulls (colliderModel ):
1447+ var gdataCol = hgeomCol .get (colliderModel .geometry );
1448+ buildAutoColliders (model , colliderModel , d , gdataCol .vbuf , gdataCol .ibufs , gdataCol .mids , d .geometries [model .geometry ].bounds , params , dataOut );
1449+ case Mesh (colliderModel ):
1450+ var gdataCol = hgeomCol .get (colliderModel .geometry );
1451+ buildGeomCollider (model , colliderModel , gdataCol .vbuf , gdataCol .ibufs , dataOut );
14411452 case Shapes :
14421453 buildShapeColliders (params .shapes );
14431454 case null :
0 commit comments