Converters.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #ifndef ANKI_PHYSICS_CONVERTORS_H
  2. #define ANKI_PHYSICS_CONVERTORS_H
  3. #include "anki/Math.h"
  4. #include <btBulletCollisionCommon.h>
  5. #include <btBulletDynamicsCommon.h>
  6. namespace anki {
  7. //==============================================================================
  8. // Bullet to AnKi =
  9. //==============================================================================
  10. inline Vec3 toAnki(const btVector3& v)
  11. {
  12. return Vec3(v.x(), v.y(), v.z());
  13. }
  14. inline Vec4 toAnki(const btVector4& v)
  15. {
  16. return Vec4(v.x(), v.y(), v.z(), v.w());
  17. }
  18. inline Mat3 toAnki(const btMatrix3x3& m)
  19. {
  20. Mat3 m3;
  21. m3.setRows(toAnki(m[0]), toAnki(m[1]), toAnki(m[2]));
  22. return m3;
  23. }
  24. inline Quat toAnki(const btQuaternion& q)
  25. {
  26. return Quat(q.x(), q.y(), q.z(), q.w());
  27. }
  28. inline Transform toAnki(const btTransform& t)
  29. {
  30. Transform out;
  31. out.setRotation(toAnki(t.getBasis()));
  32. out.setOrigin(toAnki(t.getOrigin()));
  33. out.setScale(1.0);
  34. return out;
  35. }
  36. //==============================================================================
  37. // AnKi to Bullet =
  38. //==============================================================================
  39. inline btVector3 toBt(const Vec3& v)
  40. {
  41. return btVector3(v.x(), v.y(), v.z());
  42. }
  43. inline btVector4 toBt(const Vec4& v)
  44. {
  45. return btVector4(v.x(), v.y(), v.z(), v.w());
  46. }
  47. inline btMatrix3x3 toBt(const Mat3 m)
  48. {
  49. btMatrix3x3 r;
  50. r[0] = toBt(m.getRow(0));
  51. r[1] = toBt(m.getRow(1));
  52. r[2] = toBt(m.getRow(2));
  53. return r;
  54. }
  55. inline btTransform toBt(const Mat4& m)
  56. {
  57. btTransform r;
  58. r.setFromOpenGLMatrix(&(m.getTransposed())[0]);
  59. return r;
  60. }
  61. inline btQuaternion toBt(const Quat& q)
  62. {
  63. return btQuaternion(q.x(), q.y(), q.z(), q.w());
  64. }
  65. inline btTransform toBt(const Transform& trf)
  66. {
  67. btTransform r;
  68. r.setOrigin(toBt(trf.getOrigin()));
  69. r.setBasis(toBt(trf.getRotation()));
  70. return r;
  71. }
  72. } // end namespace anki
  73. #endif