Platformer in OpenGL
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

200 lines
5.2 KiB

5 years ago
  1. #include <glm/geometric.hpp>
  2. #include <glm/trigonometric.hpp>
  3. #include <glm/ext/scalar_relational.hpp>
  4. #include <glm/ext/vector_relational.hpp>
  5. #include <glm/ext/vector_float1.hpp>
  6. #include <glm/ext/vector_float2.hpp>
  7. #include <glm/ext/vector_float3.hpp>
  8. #include <glm/ext/vector_float4.hpp>
  9. #include <glm/ext/vector_double2.hpp>
  10. #include <glm/ext/vector_double3.hpp>
  11. #include <glm/ext/vector_double4.hpp>
  12. #include <limits>
  13. namespace length
  14. {
  15. int test()
  16. {
  17. float Length1 = glm::length(glm::vec1(1));
  18. float Length2 = glm::length(glm::vec2(1, 0));
  19. float Length3 = glm::length(glm::vec3(1, 0, 0));
  20. float Length4 = glm::length(glm::vec4(1, 0, 0, 0));
  21. int Error = 0;
  22. Error += glm::abs(Length1 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
  23. Error += glm::abs(Length2 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
  24. Error += glm::abs(Length3 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
  25. Error += glm::abs(Length4 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
  26. return Error;
  27. }
  28. }//namespace length
  29. namespace distance
  30. {
  31. int test()
  32. {
  33. float Distance1 = glm::distance(glm::vec1(1), glm::vec1(1));
  34. float Distance2 = glm::distance(glm::vec2(1, 0), glm::vec2(1, 0));
  35. float Distance3 = glm::distance(glm::vec3(1, 0, 0), glm::vec3(1, 0, 0));
  36. float Distance4 = glm::distance(glm::vec4(1, 0, 0, 0), glm::vec4(1, 0, 0, 0));
  37. int Error = 0;
  38. Error += glm::abs(Distance1) < std::numeric_limits<float>::epsilon() ? 0 : 1;
  39. Error += glm::abs(Distance2) < std::numeric_limits<float>::epsilon() ? 0 : 1;
  40. Error += glm::abs(Distance3) < std::numeric_limits<float>::epsilon() ? 0 : 1;
  41. Error += glm::abs(Distance4) < std::numeric_limits<float>::epsilon() ? 0 : 1;
  42. return Error;
  43. }
  44. }//namespace distance
  45. namespace dot
  46. {
  47. int test()
  48. {
  49. float Dot1 = glm::dot(glm::vec1(1), glm::vec1(1));
  50. float Dot2 = glm::dot(glm::vec2(1), glm::vec2(1));
  51. float Dot3 = glm::dot(glm::vec3(1), glm::vec3(1));
  52. float Dot4 = glm::dot(glm::vec4(1), glm::vec4(1));
  53. int Error = 0;
  54. Error += glm::abs(Dot1 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
  55. Error += glm::abs(Dot2 - 2.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
  56. Error += glm::abs(Dot3 - 3.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
  57. Error += glm::abs(Dot4 - 4.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
  58. return Error;
  59. }
  60. }//namespace dot
  61. namespace cross
  62. {
  63. int test()
  64. {
  65. glm::vec3 Cross1 = glm::cross(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0));
  66. glm::vec3 Cross2 = glm::cross(glm::vec3(0, 1, 0), glm::vec3(1, 0, 0));
  67. int Error = 0;
  68. Error += glm::all(glm::lessThan(glm::abs(Cross1 - glm::vec3(0, 0, 1)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;
  69. Error += glm::all(glm::lessThan(glm::abs(Cross2 - glm::vec3(0, 0,-1)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;
  70. return Error;
  71. }
  72. }//namespace cross
  73. namespace normalize
  74. {
  75. int test()
  76. {
  77. glm::vec3 Normalize1 = glm::normalize(glm::vec3(1, 0, 0));
  78. glm::vec3 Normalize2 = glm::normalize(glm::vec3(2, 0, 0));
  79. glm::vec3 Normalize3 = glm::normalize(glm::vec3(-0.6, 0.7, -0.5));
  80. glm::vec3 ro = glm::vec3(glm::cos(5.f) * 3.f, 2.f, glm::sin(5.f) * 3.f);
  81. glm::vec3 w = glm::normalize(glm::vec3(0, -0.2f, 0) - ro);
  82. glm::vec3 u = glm::normalize(glm::cross(w, glm::vec3(0, 1, 0)));
  83. glm::vec3 v = glm::cross(u, w);
  84. int Error = 0;
  85. Error += glm::all(glm::lessThan(glm::abs(Normalize1 - glm::vec3(1, 0, 0)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;
  86. Error += glm::all(glm::lessThan(glm::abs(Normalize2 - glm::vec3(1, 0, 0)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;
  87. return Error;
  88. }
  89. }//namespace normalize
  90. namespace faceforward
  91. {
  92. int test()
  93. {
  94. int Error = 0;
  95. {
  96. glm::vec3 N(0.0f, 0.0f, 1.0f);
  97. glm::vec3 I(1.0f, 0.0f, 1.0f);
  98. glm::vec3 Nref(0.0f, 0.0f, 1.0f);
  99. glm::vec3 F = glm::faceforward(N, I, Nref);
  100. }
  101. return Error;
  102. }
  103. }//namespace faceforward
  104. namespace reflect
  105. {
  106. int test()
  107. {
  108. int Error = 0;
  109. {
  110. glm::vec2 A(1.0f,-1.0f);
  111. glm::vec2 B(0.0f, 1.0f);
  112. glm::vec2 C = glm::reflect(A, B);
  113. Error += glm::all(glm::equal(C, glm::vec2(1.0, 1.0), 0.0001f)) ? 0 : 1;
  114. }
  115. {
  116. glm::dvec2 A(1.0f,-1.0f);
  117. glm::dvec2 B(0.0f, 1.0f);
  118. glm::dvec2 C = glm::reflect(A, B);
  119. Error += glm::all(glm::equal(C, glm::dvec2(1.0, 1.0), 0.0001)) ? 0 : 1;
  120. }
  121. return Error;
  122. }
  123. }//namespace reflect
  124. namespace refract
  125. {
  126. int test()
  127. {
  128. int Error = 0;
  129. {
  130. float A(-1.0f);
  131. float B(1.0f);
  132. float C = glm::refract(A, B, 0.5f);
  133. Error += glm::equal(C, -1.0f, 0.0001f) ? 0 : 1;
  134. }
  135. {
  136. glm::vec2 A(0.0f,-1.0f);
  137. glm::vec2 B(0.0f, 1.0f);
  138. glm::vec2 C = glm::refract(A, B, 0.5f);
  139. Error += glm::all(glm::equal(C, glm::vec2(0.0, -1.0), 0.0001f)) ? 0 : 1;
  140. }
  141. {
  142. glm::dvec2 A(0.0f,-1.0f);
  143. glm::dvec2 B(0.0f, 1.0f);
  144. glm::dvec2 C = glm::refract(A, B, 0.5);
  145. Error += glm::all(glm::equal(C, glm::dvec2(0.0, -1.0), 0.0001)) ? 0 : 1;
  146. }
  147. return Error;
  148. }
  149. }//namespace refract
  150. int main()
  151. {
  152. int Error(0);
  153. Error += length::test();
  154. Error += distance::test();
  155. Error += dot::test();
  156. Error += cross::test();
  157. Error += normalize::test();
  158. Error += faceforward::test();
  159. Error += reflect::test();
  160. Error += refract::test();
  161. return Error;
  162. }