gtx_transform2.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #include <glm/glm.hpp>
  2. #include <glm/gtc/epsilon.hpp>
  3. #define GLM_ENABLE_EXPERIMENTAL
  4. #include <glm/gtx/transform2.hpp>
  5. static int test_reflect2D()
  6. {
  7. int Error = 0;
  8. {
  9. const glm::mat3 m3(
  10. 1, 0, 0,
  11. 0, 1, 0,
  12. 1, 2, 1
  13. );
  14. const glm::mat3 eam3(
  15. 1, 0, 0,
  16. 0, -1, 0,
  17. 1, 2, 1
  18. );
  19. const glm::mat3 am3 = glm::reflect2D(
  20. m3,
  21. glm::vec2(0, 1),
  22. static_cast<glm::mat3::row_type::value_type>(0)
  23. );
  24. Error += glm::all(glm::bvec3(
  25. glm::all(glm::epsilonEqual(eam3[0], am3[0], glm::epsilon<float>())),
  26. glm::all(glm::epsilonEqual(eam3[1], am3[1], glm::epsilon<float>())),
  27. glm::all(glm::epsilonEqual(eam3[2], am3[2], glm::epsilon<float>())))) ? 0 : 1;
  28. }
  29. {
  30. const glm::mat3 m3(
  31. 1, 0, 0,
  32. 0, 1, 0,
  33. 1, 2, 1
  34. );
  35. const glm::mat3 eam3(
  36. 0, 1, 0,
  37. 1, 0, 0,
  38. 1, 2, 1
  39. );
  40. const glm::mat3 am3 = glm::reflect2D(
  41. m3,
  42. glm::vec2(-0.70710678, 0.70710678),
  43. static_cast<glm::mat3::row_type::value_type>(0)
  44. );
  45. Error += glm::all(glm::bvec3(
  46. glm::all(glm::epsilonEqual(eam3[0], am3[0], glm::epsilon<float>())),
  47. glm::all(glm::epsilonEqual(eam3[1], am3[1], glm::epsilon<float>())),
  48. glm::all(glm::epsilonEqual(eam3[2], am3[2], glm::epsilon<float>())))) ? 0 : 1;
  49. }
  50. return Error;
  51. }
  52. static int test_reflect3D()
  53. {
  54. int Error = 0;
  55. {
  56. const glm::mat4 m4(
  57. 1, 0, 0, 0,
  58. 0, 1, 0, 0,
  59. 0, 0, 1, 0,
  60. 0, 0, 0, 1
  61. );
  62. const glm::mat4 eam4(
  63. 1, 0, 0, 0,
  64. 0, -1, 0, 0,
  65. 0, 0, 1, 0,
  66. 0, -2, 0, 1
  67. );
  68. const glm::mat4 am4 = glm::reflect3D(
  69. m4,
  70. glm::vec3(0, 1, 0),
  71. static_cast<glm::mat4::row_type::value_type>(1)
  72. );
  73. Error += glm::all(glm::bvec4(
  74. glm::all(glm::epsilonEqual(eam4[0], am4[0], glm::epsilon<float>())),
  75. glm::all(glm::epsilonEqual(eam4[1], am4[1], glm::epsilon<float>())),
  76. glm::all(glm::epsilonEqual(eam4[2], am4[2], glm::epsilon<float>())),
  77. glm::all(glm::epsilonEqual(eam4[3], am4[3], glm::epsilon<float>())))) ? 0 : 1;
  78. }
  79. {
  80. const glm::mat4 m4(
  81. 1, 0, 0, 0,
  82. 0, 1, 0, 0,
  83. 0, 0, 1, 0,
  84. 0, 0, 0, 1
  85. );
  86. const glm::mat4 eam4(
  87. 0, 1, 0, 0,
  88. 1, 0, 0, 0,
  89. 0, 0, 1, 0,
  90. 0, 0, 0, 1
  91. );
  92. const glm::mat4 am4 = glm::reflect3D(
  93. m4,
  94. glm::vec3(-0.70710678, 0.70710678, 0.0),
  95. static_cast<glm::mat4::row_type::value_type>(0)
  96. );
  97. Error += glm::all(glm::bvec4(
  98. glm::all(glm::epsilonEqual(eam4[0], am4[0], glm::epsilon<float>())),
  99. glm::all(glm::epsilonEqual(eam4[1], am4[1], glm::epsilon<float>())),
  100. glm::all(glm::epsilonEqual(eam4[2], am4[2], glm::epsilon<float>())),
  101. glm::all(glm::epsilonEqual(eam4[3], am4[3], glm::epsilon<float>())))) ? 0 : 1;
  102. }
  103. return Error;
  104. }
  105. int main()
  106. {
  107. int Error = 0;
  108. Error += test_reflect2D();
  109. Error += test_reflect3D();
  110. return Error;
  111. }