Matrix Physx 3.4(Linux)问题,自定义矩阵转换为PxTransform

Matrix Physx 3.4(Linux)问题,自定义矩阵转换为PxTransform,matrix,transform,coordinate-systems,physx,Matrix,Transform,Coordinate Systems,Physx,我正在尝试使用Physx 3.4对光线跟踪场景(使用Embree API创建)中显示的对象运行模拟。其思想是在模拟的每一步检索参与者的变换矩阵,直到参与者睡觉 但是,当我创建一个演员时,我在将原始矩阵(从我的3D场景,行大调和右撇子)发送到PxTransform(或PxMat44,列大调和左撇子)并通过反向操作检索它时遇到了问题 现在,我只是调用这些自定义转换函数在我的场景坐标系和Physx坐标系之间来回转换: PxTransform Cfloat44ToPxTransform(Cfloat44

我正在尝试使用Physx 3.4对光线跟踪场景(使用Embree API创建)中显示的对象运行模拟。其思想是在模拟的每一步检索参与者的变换矩阵,直到参与者睡觉

但是,当我创建一个演员时,我在将原始矩阵(从我的3D场景,行大调和右撇子)发送到PxTransform(或PxMat44,列大调和左撇子)并通过反向操作检索它时遇到了问题

现在,我只是调用这些自定义转换函数在我的场景坐标系和Physx坐标系之间来回转换:

PxTransform Cfloat44ToPxTransform(Cfloat44& m)
{
Cfloat4 scale = m.getscale();

Cfloat44 am = Cfloat44(1/scale.x,0.0,0.0,0.0,
                     0.0,1/scale.y,0.0,0.0,
                     0.0,0.0,1/scale.z,0.0,
                     0.0,0.0,0.0,1.0) * m;

Cfloat44 tr(1,0,0,0,
            0,1,0,0,
            0,0,-1,0,
            0,0,0,1);

Cfloat4 pos = am.v[3];
Cfloat44 pm = am * tr;
pm.v[3] = pos;

PxMat44 mat(pm.f);

return PxTransform(mat);
}

Cfloat44 transformToCfloat44(const PxTransform& transform, Cfloat4 &scale)
{
PxMat44 m = PxMat44(transform);

Cfloat44 cMatrix(m[0][0],m[0][1],m[0][2],m[0][3],
                 m[1][0],m[1][1],m[1][2],m[1][3],
                 m[2][0],m[2][1],m[2][2],m[2][3],
                 m[3][0],m[3][1],m[3][2],m[3][3]);

Cfloat44 tr(1,0,0,0,
            0,1,0,0,
            0,0,-1,0,
            0,0,0,1);

Cfloat4 pos = cMatrix.v[3];
Cfloat44 pm = cMatrix * tr;
pm.v[3] = pos;

pm = Cfloat44(scale.x,0.0,0.0,0.0,
             0.0,scale.y,0.0,0.0,
             0.0,0.0,scale.z,0.0,
             0.0,0.0,0.0,1.0) * pm;

return pm;
}
Cfloat44和Cfloat4分别对应于(4,4)矩阵和(4,)向量

我在创建PxRigidStatic和PxRigidDynamic角色时使用这些转换函数。我只检索PxDynamic actor矩阵来显示3D场景中的相关对象

当我在3D场景中显示模拟时,我可以看出有些地方不对劲,特别是当涉及到PxRigidStatic和PxRigidDynamic之间的碰撞时(重叠、奇怪行为等)

我猜我的坐标系转换有问题,但我似乎不知道它是什么

有人知道这里的错误吗