gtx_matrix_operation.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #define GLM_ENABLE_EXPERIMENTAL
  2. #include <glm/glm.hpp>
  3. #include <glm/gtc/epsilon.hpp>
  4. #include <glm/gtx/matrix_operation.hpp>
  5. #include <limits>
  6. static int test_adjugate()
  7. {
  8. int Error = 0;
  9. const float epsilon = std::numeric_limits<float>::epsilon();
  10. // mat2
  11. const glm::mat2 m2(
  12. 2, 3,
  13. 1, 5
  14. );
  15. const glm::mat2 eam2(
  16. 5, -3,
  17. -1, 2
  18. );
  19. const glm::mat2 am2 = glm::adjugate(m2);
  20. Error += glm::all(glm::bvec2(
  21. glm::all(glm::epsilonEqual(am2[0], eam2[0], epsilon)),
  22. glm::all(glm::epsilonEqual(am2[1], eam2[1], epsilon))
  23. )) ? 0 : 1;
  24. // mat3
  25. const glm::mat3 m3(
  26. 2, 3, 3,
  27. 1, 5, 4,
  28. 4, 6, 8
  29. );
  30. const glm::mat3 eam3(
  31. 16, -6, -3,
  32. 8, 4, -5,
  33. -14, 0, 7
  34. );
  35. const glm::mat3 am3 = glm::adjugate(m3);
  36. Error += glm::all(glm::bvec3(
  37. glm::all(glm::epsilonEqual(am3[0], eam3[0], epsilon)),
  38. glm::all(glm::epsilonEqual(am3[1], eam3[1], epsilon)),
  39. glm::all(glm::epsilonEqual(am3[2], eam3[2], epsilon))
  40. )) ? 0 : 1;
  41. // mat4
  42. const glm::mat4 m4(
  43. 2, 3, 3, 1,
  44. 1, 5, 4, 3,
  45. 4, 6, 8, 5,
  46. -2, -3, -3, 4
  47. );
  48. const glm::mat4 eam4(
  49. 97, -30, -15, 17,
  50. 45, 20, -25, 5,
  51. -91, 0, 35, -21,
  52. 14, 0, 0, 14
  53. );
  54. const glm::mat4 am4 = glm::adjugate(m4);
  55. Error += glm::all(glm::bvec4(
  56. glm::all(glm::epsilonEqual(am4[0], eam4[0], epsilon)),
  57. glm::all(glm::epsilonEqual(am4[1], eam4[1], epsilon)),
  58. glm::all(glm::epsilonEqual(am4[2], eam4[2], epsilon)),
  59. glm::all(glm::epsilonEqual(am4[3], eam4[3], epsilon))
  60. )) ? 0 : 1;
  61. return Error;
  62. }
  63. int main()
  64. {
  65. int Error = 0;
  66. Error += test_adjugate();
  67. return Error;
  68. }