gtx_quaternion.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include <glm/gtc/epsilon.hpp>
  2. #include <glm/gtc/type_ptr.hpp>
  3. #include <glm/gtc/matrix_transform.hpp>
  4. #include <glm/gtx/transform.hpp>
  5. #include <glm/gtx/quaternion.hpp>
  6. #include <glm/gtx/compatibility.hpp>
  7. #include <glm/ext.hpp>
  8. int test_quat_fastMix()
  9. {
  10. int Error = 0;
  11. glm::quat A = glm::angleAxis(0.0f, glm::vec3(0, 0, 1));
  12. glm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));
  13. glm::quat C = glm::fastMix(A, B, 0.5f);
  14. glm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));
  15. Error += glm::epsilonEqual(C.x, D.x, 0.01f) ? 0 : 1;
  16. Error += glm::epsilonEqual(C.y, D.y, 0.01f) ? 0 : 1;
  17. Error += glm::epsilonEqual(C.z, D.z, 0.01f) ? 0 : 1;
  18. Error += glm::epsilonEqual(C.w, D.w, 0.01f) ? 0 : 1;
  19. return Error;
  20. }
  21. int test_quat_shortMix()
  22. {
  23. int Error(0);
  24. glm::quat A = glm::angleAxis(0.0f, glm::vec3(0, 0, 1));
  25. glm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));
  26. glm::quat C = glm::shortMix(A, B, 0.5f);
  27. glm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));
  28. Error += glm::epsilonEqual(C.x, D.x, 0.01f) ? 0 : 1;
  29. Error += glm::epsilonEqual(C.y, D.y, 0.01f) ? 0 : 1;
  30. Error += glm::epsilonEqual(C.z, D.z, 0.01f) ? 0 : 1;
  31. Error += glm::epsilonEqual(C.w, D.w, 0.01f) ? 0 : 1;
  32. return Error;
  33. }
  34. int test_orientation()
  35. {
  36. int Error(0);
  37. {
  38. glm::quat q(1.0f, 0.0f, 0.0f, 1.0f);
  39. float p = glm::roll(q);
  40. }
  41. {
  42. glm::quat q(1.0f, 0.0f, 0.0f, 1.0f);
  43. float p = glm::pitch(q);
  44. }
  45. {
  46. glm::quat q(1.0f, 0.0f, 0.0f, 1.0f);
  47. float p = glm::yaw(q);
  48. }
  49. return Error;
  50. }
  51. int test_rotation()
  52. {
  53. int Error(0);
  54. glm::vec3 v(1, 0, 0);
  55. glm::vec3 u(0, 1, 0);
  56. glm::quat Rotation = glm::rotation(v, u);
  57. float Angle = glm::angle(Rotation);
  58. Error += glm::abs(Angle - glm::pi<float>() * 0.5f) < glm::epsilon<float>() ? 0 : 1;
  59. return Error;
  60. }
  61. int test_log()
  62. {
  63. int Error(0);
  64. glm::quat q;
  65. glm::quat p = glm::log(q);
  66. glm::quat r = glm::exp(p);
  67. return Error;
  68. }
  69. int main()
  70. {
  71. int Error(0);
  72. Error += test_log();
  73. Error += test_rotation();
  74. Error += test_quat_fastMix();
  75. Error += test_quat_shortMix();
  76. return Error;
  77. }