CharacterDemo Matrix problem

Mr.Newb
Posts: 9
Joined: Sat Nov 10, 2007 7:28 am

CharacterDemo Matrix problem

Post by Mr.Newb »

I am having a problem converting the CharacterDemo to DirectX. I've gotten everything to work fine...Except for reversed z axis. [Kept CharacterController code the same]

[left-hand coordsys]
Character facing forward along z axis + add 1 to gForward = character goes backward.
Character facing backwards along z axis + add 1 to gBackward = character goes forward.
character facing forward / between x and z axis + add 1 to gForward = character goes backwards \ between z and x axis.
etc
Works perfectly when character facing along x axis. <-->

Am I doing this right?

Code: Select all

btTransform characterWorldTrans;
wrapperclass->m_character->getRigidBody()->getMotionState()->getWorldTransform(characterWorldTrans);
D3DXMATRIX world = wrapperclass->XConvertBulletTransform(&characterWorldTrans);
object->SetObjectTranslation(world);

-----------
D3DXMATRIX wrapperclass::XConvertBulletTransform( btTransform *bulletTransformMatrix )
{
   D3DXMATRIX world;
   btVector3 R = bulletTransformMatrix->getBasis().getColumn(0);
   btVector3 U = bulletTransformMatrix->getBasis().getColumn(1);
   btVector3 L = bulletTransformMatrix->getBasis().getColumn(2);
   btVector3 P = bulletTransformMatrix->getOrigin();

   D3DXVECTOR3 vR, vU, vL, vP;
   vR.x = R.x();vR.y = R.y();vR.z = R.z();
   vU.x = U.x();vU.y = U.y();vU.z = U.z();
   vL.x = L.x();vL.y = L.y();vL.z = L.z();
   vP.x = P.x();vP.y = P.y();vP.z = P.z();

   XPrepareMatrixFromRULP( world, &vR, &vU, &vL, &vP );
   return world;
}

void wrapperclass::XPrepareMatrixFromRULP( D3DXMATRIX &matOutput, D3DXVECTOR3 *R, D3DXVECTOR3 *U, D3DXVECTOR3 *L, D3DXVECTOR3 *P )
{
      matOutput._11 = R->x;matOutput._12 = R->y;matOutput._13 = R->z;matOutput._14 = 0.f;
      matOutput._21 = U->x;matOutput._22 = U->y;matOutput._23 = U->z;matOutput._24 = 0.f;
      matOutput._31 = L->x;matOutput._32 = L->y;matOutput._33 = L->z;matOutput._34 = 0.f;
      matOutput._41 = P->x;matOutput._42 = P->y;matOutput._43 = P->z;matOutput._44 = 1.f;
}