gtx_spline.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #include <glm/vec2.hpp>
  2. #include <glm/vec3.hpp>
  3. #include <glm/vec4.hpp>
  4. #include <glm/ext/vector_relational.hpp>
  5. #include <glm/ext/scalar_constants.hpp>
  6. #define GLM_ENABLE_EXPERIMENTAL
  7. #include <glm/gtx/spline.hpp>
  8. namespace catmullRom
  9. {
  10. static int test()
  11. {
  12. int Error = 0;
  13. glm::vec2 Result2 = glm::catmullRom(
  14. glm::vec2(0.0f, 0.0f),
  15. glm::vec2(1.0f, 0.0f),
  16. glm::vec2(1.0f, 1.0f),
  17. glm::vec2(0.0f, 1.0f), 0.5f);
  18. Error += glm::all(glm::equal(Result2, glm::vec2(1.125f, 0.5f), glm::epsilon<float>())) ? 0 : 1;
  19. glm::vec3 Result3 = glm::catmullRom(
  20. glm::vec3(0.0f, 0.0f, 0.0f),
  21. glm::vec3(1.0f, 0.0f, 0.0f),
  22. glm::vec3(1.0f, 1.0f, 0.0f),
  23. glm::vec3(0.0f, 1.0f, 0.0f), 0.5f);
  24. Error += glm::all(glm::equal(Result3, glm::vec3(1.125f, 0.5f, 0.0f), glm::epsilon<float>())) ? 0 : 1;
  25. glm::vec4 Result4 = glm::catmullRom(
  26. glm::vec4(0.0f, 0.0f, 0.0f, 1.0f),
  27. glm::vec4(1.0f, 0.0f, 0.0f, 1.0f),
  28. glm::vec4(1.0f, 1.0f, 0.0f, 1.0f),
  29. glm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);
  30. Error += glm::all(glm::equal(Result4, glm::vec4(1.125f, 0.5f, 0.0f, 1.0f), glm::epsilon<float>())) ? 0 : 1;
  31. return Error;
  32. }
  33. }//catmullRom
  34. namespace hermite
  35. {
  36. static int test()
  37. {
  38. int Error = 0;
  39. glm::vec2 Result2 = glm::hermite(
  40. glm::vec2(0.0f, 0.0f),
  41. glm::vec2(1.0f, 0.0f),
  42. glm::vec2(1.0f, 1.0f),
  43. glm::vec2(0.0f, 1.0f), 0.5f);
  44. Error += glm::all(glm::equal(Result2, glm::vec2(0.625f, 0.375f), glm::epsilon<float>())) ? 0 : 1;
  45. glm::vec3 Result3 = glm::hermite(
  46. glm::vec3(0.0f, 0.0f, 0.0f),
  47. glm::vec3(1.0f, 0.0f, 0.0f),
  48. glm::vec3(1.0f, 1.0f, 0.0f),
  49. glm::vec3(0.0f, 1.0f, 0.0f), 0.5f);
  50. Error += glm::all(glm::equal(Result3, glm::vec3(0.625f, 0.375f, 0.0f), glm::epsilon<float>())) ? 0 : 1;
  51. glm::vec4 Result4 = glm::hermite(
  52. glm::vec4(0.0f, 0.0f, 0.0f, 1.0f),
  53. glm::vec4(1.0f, 0.0f, 0.0f, 1.0f),
  54. glm::vec4(1.0f, 1.0f, 0.0f, 1.0f),
  55. glm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);
  56. Error += glm::all(glm::equal(Result4, glm::vec4(0.625f, 0.375f, 0.0f, 1.0f), glm::epsilon<float>())) ? 0 : 1;
  57. return Error;
  58. }
  59. }//catmullRom
  60. namespace cubic
  61. {
  62. static int test()
  63. {
  64. int Error = 0;
  65. glm::vec2 Result2 = glm::cubic(
  66. glm::vec2(0.0f, 0.0f),
  67. glm::vec2(1.0f, 0.0f),
  68. glm::vec2(1.0f, 1.0f),
  69. glm::vec2(0.0f, 1.0f), 0.5f);
  70. Error += glm::all(glm::equal(Result2, glm::vec2(0.75f, 1.5f), glm::epsilon<float>())) ? 0 : 1;
  71. glm::vec3 Result3 = glm::cubic(
  72. glm::vec3(0.0f, 0.0f, 0.0f),
  73. glm::vec3(1.0f, 0.0f, 0.0f),
  74. glm::vec3(1.0f, 1.0f, 0.0f),
  75. glm::vec3(0.0f, 1.0f, 0.0f), 0.5f);
  76. Error += glm::all(glm::equal(Result3, glm::vec3(0.75f, 1.5f, 0.0f), glm::epsilon<float>())) ? 0 : 1;
  77. glm::vec4 Result4 = glm::cubic(
  78. glm::vec4(0.0f, 0.0f, 0.0f, 1.0f),
  79. glm::vec4(1.0f, 0.0f, 0.0f, 1.0f),
  80. glm::vec4(1.0f, 1.0f, 0.0f, 1.0f),
  81. glm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);
  82. Error += glm::all(glm::equal(Result4, glm::vec4(0.75f, 1.5f, 0.0f, 1.875f), glm::epsilon<float>())) ? 0 : 1;
  83. return Error;
  84. }
  85. }//catmullRom
  86. int main()
  87. {
  88. int Error(0);
  89. Error += catmullRom::test();
  90. Error += hermite::test();
  91. Error += cubic::test();
  92. return Error;
  93. }