Matrix Physx 3.4(Linux)问题,自定义矩阵转换为PxTransform
我正在尝试使用Physx 3.4对光线跟踪场景(使用Embree API创建)中显示的对象运行模拟。其思想是在模拟的每一步检索参与者的变换矩阵,直到参与者睡觉 但是,当我创建一个演员时,我在将原始矩阵(从我的3D场景,行大调和右撇子)发送到PxTransform(或PxMat44,列大调和左撇子)并通过反向操作检索它时遇到了问题 现在,我只是调用这些自定义转换函数在我的场景坐标系和Physx坐标系之间来回转换: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
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之间的碰撞时(重叠、奇怪行为等)
我猜我的坐标系转换有问题,但我似乎不知道它是什么
有人知道这里的错误吗