|
@@ -9,10 +9,81 @@
|
|
|
|
|
|
|
|
#include <glm/glm.hpp>
|
|
#include <glm/glm.hpp>
|
|
|
#include <glm/gtc/quaternion.hpp>
|
|
#include <glm/gtc/quaternion.hpp>
|
|
|
|
|
+#include <glm/gtx/epsilon.hpp>
|
|
|
|
|
+
|
|
|
|
|
+int test_quat_type()
|
|
|
|
|
+{
|
|
|
|
|
+ glm::quat A;
|
|
|
|
|
+ glm::dquat B;
|
|
|
|
|
+
|
|
|
|
|
+ return 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+int test_quat_slerp()
|
|
|
|
|
+{
|
|
|
|
|
+ int Error = 0;
|
|
|
|
|
+
|
|
|
|
|
+ glm::quat A(0.0f, glm::vec3(0, 0, 1));
|
|
|
|
|
+ glm::quat B(90.0f, glm::vec3(0, 0, 1));
|
|
|
|
|
+ glm::quat C = glm::mix(A, B, 0.5f);
|
|
|
|
|
+
|
|
|
|
|
+ Error += C != glm::quat(45.f, glm::vec3(0, 0, 1)) ? 0 : 1;
|
|
|
|
|
+
|
|
|
|
|
+ return Error;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+int test_quat_length()
|
|
|
|
|
+{
|
|
|
|
|
+ int Error = 0;
|
|
|
|
|
+
|
|
|
|
|
+ float A = glm::length(glm::quat(45.0f, glm::vec3(0, 0, 1)));
|
|
|
|
|
+ Error += A == 1.0f ? 0 : 1;
|
|
|
|
|
+ float B = glm::length(glm::quat(90.0f, glm::vec3(0, 0, 2)));
|
|
|
|
|
+ Error += B == 2.0f ? 0 : 1;
|
|
|
|
|
+
|
|
|
|
|
+ return Error;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+int test_quat_normalize()
|
|
|
|
|
+{
|
|
|
|
|
+ int Error = 0;
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ glm::quat Q(45.0f, glm::vec3(0, 0, 1));
|
|
|
|
|
+ glm::quat N = glm::normalize(Q);
|
|
|
|
|
+ float L = glm::length(N);
|
|
|
|
|
+ Error += L == 1.0f ? 0 : 1;
|
|
|
|
|
+ float A = glm::angle(N);
|
|
|
|
|
+ Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ glm::quat Q(45.0f, glm::vec3(0, 0, 2));
|
|
|
|
|
+ glm::quat N = glm::normalize(Q);
|
|
|
|
|
+ float L = glm::length(N);
|
|
|
|
|
+ Error += L == 1.0f ? 0 : 1;
|
|
|
|
|
+ float A = glm::angle(N);
|
|
|
|
|
+ Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ glm::quat Q(45.0f, glm::vec3(1, 2, 3));
|
|
|
|
|
+ glm::quat N = glm::normalize(Q);
|
|
|
|
|
+ float L = glm::length(N);
|
|
|
|
|
+ Error += L == 1.0f ? 0 : 1;
|
|
|
|
|
+ float A = glm::angle(N);
|
|
|
|
|
+ Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return Error;
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
int main()
|
|
int main()
|
|
|
{
|
|
{
|
|
|
int Error = 0;
|
|
int Error = 0;
|
|
|
|
|
+
|
|
|
|
|
+ Error += test_quat_type();
|
|
|
|
|
+ Error += test_quat_slerp();
|
|
|
|
|
+ Error += test_quat_length();
|
|
|
|
|
+ Error += test_quat_normalize();
|
|
|
|
|
|
|
|
return Error;
|
|
return Error;
|
|
|
}
|
|
}
|