|
@@ -1,69 +1,65 @@
|
|
|
#include "../Tests.h"
|
|
|
#include "core/Frustum.h"
|
|
|
-
|
|
|
-#define CV3(a, b, c) (&(CoreVector3){{a, b, c}})
|
|
|
+#include "core/ToString.h"
|
|
|
|
|
|
static void testToString() {
|
|
|
- CoreFrustum f;
|
|
|
- coreInitFrustum(&f, 60.0f, 0.1f, 1000.0f);
|
|
|
- char buffer[128];
|
|
|
- coreToStringFrustum(&f, buffer, sizeof(buffer));
|
|
|
- CORE_TEST_STRING("(tan = 0.577, nearClip = 0.100, farClip = 1000.000)",
|
|
|
- buffer);
|
|
|
+ Frustum f;
|
|
|
+ initFrustum(&f, 60.0f, 0.1f, 1000.0f);
|
|
|
+ TEST_FLOAT(0.577f, f.tan, 0.01f);
|
|
|
+ TEST_FLOAT(0.100f, f.nearClip, 0.01f);
|
|
|
+ TEST_FLOAT(1000.0f, f.farClip, 0.01f);
|
|
|
}
|
|
|
|
|
|
static void testPointIsInside() {
|
|
|
- CoreIntVector2 size = {{200, 100}};
|
|
|
- CoreFrustum f;
|
|
|
- coreInitFrustum(&f, 60.0f, 0.1f, 1000.0f);
|
|
|
- coreUpdateFrustumPlanes(&f, CV3(0, 0, 0), CV3(1, 0, 0), CV3(0, 1, 0),
|
|
|
- CV3(0, 0, 1), &size);
|
|
|
+ Frustum f;
|
|
|
+ initFrustum(&f, 60.0f, 0.1f, 1000.0f);
|
|
|
+ updateFrustumPlanes(&f, &V(0, 0, 0), &V(1, 0, 0), &V(0, 1, 0), &V(0, 0, 1),
|
|
|
+ &IV(200, 100));
|
|
|
|
|
|
- CORE_TEST_TRUE(coreIsInsideFrustum(&f, CV3(0, 0, 5)));
|
|
|
- CORE_TEST_FALSE(coreIsInsideFrustum(&f, CV3(0, 0, 1004)));
|
|
|
- CORE_TEST_FALSE(coreIsInsideFrustum(&f, CV3(0, 0, -5)));
|
|
|
- CORE_TEST_FALSE(coreIsInsideFrustum(&f, CV3(0, 50, 5)));
|
|
|
- CORE_TEST_FALSE(coreIsInsideFrustum(&f, CV3(0, -50, 5)));
|
|
|
- CORE_TEST_FALSE(coreIsInsideFrustum(&f, CV3(50, 0, 5)));
|
|
|
- CORE_TEST_FALSE(coreIsInsideFrustum(&f, CV3(-50, 0, 5)));
|
|
|
+ TEST_TRUE(isInsideFrustum(&f, &V(0, 0, 5)));
|
|
|
+ TEST_FALSE(isInsideFrustum(&f, &V(0, 0, 1004)));
|
|
|
+ TEST_FALSE(isInsideFrustum(&f, &V(0, 0, -5)));
|
|
|
+ TEST_FALSE(isInsideFrustum(&f, &V(0, 50, 5)));
|
|
|
+ TEST_FALSE(isInsideFrustum(&f, &V(0, -50, 5)));
|
|
|
+ TEST_FALSE(isInsideFrustum(&f, &V(50, 0, 5)));
|
|
|
+ TEST_FALSE(isInsideFrustum(&f, &V(-50, 0, 5)));
|
|
|
}
|
|
|
|
|
|
static void testSphereIsInside() {
|
|
|
- CoreIntVector2 size = {{200, 100}};
|
|
|
- CoreFrustum f;
|
|
|
- coreInitFrustum(&f, 60.0f, 0.1f, 1000.0f);
|
|
|
- coreUpdateFrustumPlanes(&f, CV3(0, 0, 0), CV3(1, 0, 0), CV3(0, 1, 0),
|
|
|
- CV3(0, 0, 1), &size);
|
|
|
+ IntVector2 size = {{200, 100}};
|
|
|
+ Frustum f;
|
|
|
+ initFrustum(&f, 60.0f, 0.1f, 1000.0f);
|
|
|
+ updateFrustumPlanes(&f, &V(0, 0, 0), &V(1, 0, 0), &V(0, 1, 0), &V(0, 0, 1),
|
|
|
+ &size);
|
|
|
|
|
|
- CORE_TEST_TRUE(coreIsInsideFrustumRadius(&f, CV3(0, 0, 5), 3));
|
|
|
- CORE_TEST_FALSE(coreIsInsideFrustumRadius(&f, CV3(0, 0, 1004), 3));
|
|
|
- CORE_TEST_FALSE(coreIsInsideFrustumRadius(&f, CV3(0, 0, -5), 3));
|
|
|
- CORE_TEST_FALSE(coreIsInsideFrustumRadius(&f, CV3(0, 50, 5), 3));
|
|
|
- CORE_TEST_FALSE(coreIsInsideFrustumRadius(&f, CV3(0, -50, 5), 3));
|
|
|
- CORE_TEST_FALSE(coreIsInsideFrustumRadius(&f, CV3(50, 0, 5), 3));
|
|
|
- CORE_TEST_FALSE(coreIsInsideFrustumRadius(&f, CV3(-50, 0, 5), 3));
|
|
|
+ TEST_TRUE(isInsideFrustumRadius(&f, &V(0, 0, 5), 3));
|
|
|
+ TEST_FALSE(isInsideFrustumRadius(&f, &V(0, 0, 1004), 3));
|
|
|
+ TEST_FALSE(isInsideFrustumRadius(&f, &V(0, 0, -5), 3));
|
|
|
+ TEST_FALSE(isInsideFrustumRadius(&f, &V(0, 50, 5), 3));
|
|
|
+ TEST_FALSE(isInsideFrustumRadius(&f, &V(0, -50, 5), 3));
|
|
|
+ TEST_FALSE(isInsideFrustumRadius(&f, &V(50, 0, 5), 3));
|
|
|
+ TEST_FALSE(isInsideFrustumRadius(&f, &V(-50, 0, 5), 3));
|
|
|
|
|
|
- CORE_TEST_TRUE(coreIsInsideFrustumRadius(&f, CV3(0, 0, 5), 3));
|
|
|
- CORE_TEST_TRUE(coreIsInsideFrustumRadius(&f, CV3(0, 0, 1004), 50));
|
|
|
- CORE_TEST_TRUE(coreIsInsideFrustumRadius(&f, CV3(0, 0, -5), 50));
|
|
|
- CORE_TEST_TRUE(coreIsInsideFrustumRadius(&f, CV3(0, 50, 5), 50));
|
|
|
- CORE_TEST_TRUE(coreIsInsideFrustumRadius(&f, CV3(0, -50, 5), 50));
|
|
|
- CORE_TEST_TRUE(coreIsInsideFrustumRadius(&f, CV3(50, 0, 5), 50));
|
|
|
- CORE_TEST_TRUE(coreIsInsideFrustumRadius(&f, CV3(-50, 0, 5), 50));
|
|
|
+ TEST_TRUE(isInsideFrustumRadius(&f, &V(0, 0, 5), 3));
|
|
|
+ TEST_TRUE(isInsideFrustumRadius(&f, &V(0, 0, 1004), 50));
|
|
|
+ TEST_TRUE(isInsideFrustumRadius(&f, &V(0, 0, -5), 50));
|
|
|
+ TEST_TRUE(isInsideFrustumRadius(&f, &V(0, 50, 5), 50));
|
|
|
+ TEST_TRUE(isInsideFrustumRadius(&f, &V(0, -50, 5), 50));
|
|
|
+ TEST_TRUE(isInsideFrustumRadius(&f, &V(50, 0, 5), 50));
|
|
|
+ TEST_TRUE(isInsideFrustumRadius(&f, &V(-50, 0, 5), 50));
|
|
|
}
|
|
|
|
|
|
static void testUpdateProjection() {
|
|
|
- CoreFrustum f;
|
|
|
- coreInitFrustum(&f, 60.0f, 0.1f, 1000.0f);
|
|
|
- const CoreMatrix* m =
|
|
|
- coreUpdateProjection(&f, &(CoreIntVector2){{400, 300}});
|
|
|
+ Frustum f;
|
|
|
+ initFrustum(&f, 60.0f, 0.1f, 1000.0f);
|
|
|
+ const Matrix* m = updateProjection(&f, &IV(400, 300));
|
|
|
char buffer[128];
|
|
|
- coreToStringMatrix(m, buffer, sizeof(buffer));
|
|
|
- CORE_TEST_STRING("[[1.299, 0.000, 0.000, 0.000], "
|
|
|
- "[0.000, 1.732, 0.000, 0.000], "
|
|
|
- "[0.000, 0.000, -1.000, -0.200], "
|
|
|
- "[0.000, 0.000, -1.000, 0.000]]",
|
|
|
- buffer);
|
|
|
+ toString(m, buffer, sizeof(buffer));
|
|
|
+ TEST_STRING("[[1.299, 0.000, 0.000, 0.000], "
|
|
|
+ "[0.000, 1.732, 0.000, 0.000], "
|
|
|
+ "[0.000, 0.000, -1.000, -0.200], "
|
|
|
+ "[0.000, 0.000, -1.000, 0.000]]",
|
|
|
+ buffer);
|
|
|
}
|
|
|
|
|
|
void testFrustum() {
|