Skip to content

Commit 08ed451

Browse files
committed
Colliders: bake inv default transform inside collider
1 parent c2a3779 commit 08ed451

File tree

2 files changed

+27
-16
lines changed

2 files changed

+27
-16
lines changed

hxd/fmt/fbx/HMDOut.hx

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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:

hxd/fmt/hmd/Data.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ class Animation {
546546

547547
class Data {
548548

549-
public static inline var CURRENT_VERSION = 4;
549+
public static inline var CURRENT_VERSION = 5;
550550

551551
public var version : Int;
552552
public var props : Properties;

0 commit comments

Comments
 (0)