int main (int argc, char *argv[]) { Vector3f colour_yellow = {{0.8f, 0.8f, 0.1f}}; Material* mat_yellow = MaterialCreate("yellow", colour_yellow); Vector3f plane1_dir = {{0.0f, 0.0f, 1.0f}}; Primative* plane1 = PrimativeCreatePlane(&plane1_dir, 0.0f, mat_yellow); Vector3f ray_dir = {{0.0f,2.0f,-1.0f}}; ray_dir = Vector3fNormalize(&ray_dir); Vector3f ray_or = {{0.0f, 0.0f, 2.0f}}; Ray* r = RayCreate(ray_or, ray_dir); IntersectPoint* ip = PrimativeIntersect(plane1, r); int ip_type = IntersectPointGetType(ip); float ip_dist = IntersectPointGetDistance(ip); Vector3f* ip_pos = IntersectPointGetPos(ip); printf("iptype = %d\n", ip_type); printf("ipdistance = %f\n", ip_dist); printf("ip position: \n"); Vector3fPrint(ip_pos); return 0; }
void test_basic_quaternion_to_eulers(void) { Vector3F eulers; Quaternion q = { 1, 0, 0, 0 }; QuaternionToEulers(&q, &eulers); Vector3fPrint(&eulers); assert(eulers.a == 0); assert(eulers.b == 0); assert(eulers.c == 0); q.a = -0.0; q.b = 1.0; QuaternionToEulers(&q, &eulers); Vector3fPrint(&eulers); assert(NearEqual(eulers.a, PI, 0.001)); assert(eulers.b == 0); assert(eulers.c == 0); q.a = 0.707141; q.b = 0.7073; QuaternionToEulers(&q, &eulers); Vector3fPrint(&eulers); assert(NearEqual(eulers.a, PI_DIV_2, 0.001)); assert(eulers.b == 0); assert(eulers.c == 0); q.c = q.b; q.b = 0; QuaternionToEulers(&q, &eulers); Vector3fPrint(&eulers); assert(eulers.a == 0); assert(NearEqual(eulers.b, PI_DIV_2, 0.001)); assert(eulers.c == 0); q.d = q.c; q.c = 0; QuaternionToEulers(&q, &eulers); Vector3fPrint(&eulers); assert(eulers.a == 0); assert(eulers.b == 0); assert(NearEqual(eulers.c, PI_DIV_2, 0.001)); }
void test_quaternion_lerp(void) { Quaternion a, b, c; QuaternionZero(&a); Vector3F eulers = {.1, 0, 0}; QuaternionFromEulers(&eulers, &b); QuaternionLerp(&a, &b, .2, &c); QuaternionToEulers(&c, &eulers); Vector3fPrint(&eulers); assert(NearEqual(eulers.a, 0.02, 0.001)); assert(eulers.b == 0); assert(eulers.c == 0); }
void test_quaternion_difference(void) { Quaternion a, b, c; Vector3F eulers; eulers.a = 1; eulers.b = 0; eulers.c = 0; QuaternionFromEulers(&eulers, &a); eulers.a = .5; eulers.b = 0; eulers.c = 0; QuaternionFromEulers(&eulers, &b); QuaternionDifference(&a, &b, &c); QuaternionToEulers(&c, &eulers); Vector3fPrint(&eulers); assert(NearEqual(eulers.a, 0.5, 0.001)); assert(eulers.b == 0); assert(eulers.c == 0); }