int main() { printf("%s\n", "testing sl_cons"); sphere *s1 = sphere_new(vec_new(0.0, 0.0, 0.0), 10.0, rgb_new(0.5, 0.5, 0.5)); sphere *s2 = sphere_new(vec_new(1.0, 1.0, 1.0), 5.0, rgb_new(0.1, 0.1, 0.1)); sphere *s3 = sphere_new(vec_new(100.0, 100.0, 100.0), 100.0, rgb_new(0, 0, 0)); sphere_list *sl = sl_cons(s1, sl_cons(s2, sl_cons(s3, NULL))); sl_print(sl); printf("%s\n", "testing sl_singleton"); sphere_list *sl2 = sl_singleton(sphere_dup(s1)); sl_print(sl2); sphere_list *sl3 = sl_cons(sphere_dup(s2), sl_singleton(sphere_dup(s1))); sl_print(sl3); printf("%s\n", "testing sl_dup"); sphere_list *sl4 = sl_dup(sl); sl_print(sl4); printf("%s\n", "FOR VALGRIND TESTING"); sl_free(sl); sl_free(sl2); sl_free(sl3); sl_free(sl4); }
void setUpReference() { // Light lights[numLights++] = light_new(point_new(3, 5, -15), 0); // Reflective material color_t color = rgb(0, 0, 0); material_t refl = material_new(color, 1); // Red material color = rgb(255, 0, 0); material_t red = material_new(color, 0); // Blue material color = rgb(0, 0, 255); material_t blue = material_new(color, 0); // White material color = rgb(255, 255, 255); material_t white = material_new(color, 0); // Spheres point_t s = point_new(0, 0, -16); spheres[numSpheres++] = sphere_new(s, 2, refl); s = point_new(3, -1, -14); spheres[numSpheres++] = sphere_new(s, 1, refl); s = point_new(-3, -1, -14); spheres[numSpheres++] = sphere_new(s, 1, red); // Back blue wall point_t a = point_new(-8, -2, -20); point_t b = point_new(8, -2, -20); point_t c = point_new(8, 10, -20); triangles[numTriangles++] = triangle_new3(a, b, c, blue); a = point_new(-8, -2, -20); b = point_new(8, 10, -20); c = point_new(-8, 10, -20); triangles[numTriangles++] = triangle_new3(a, b, c, blue); // White floor a = point_new(-8, -2, -20); b = point_new(8, -2, -10); c = point_new(8, -2, -20); triangles[numTriangles++] = triangle_new3(a, b, c, white); a = point_new(-8, -2, -20); b = point_new(-8, -2, -10); c = point_new(8, -2, -10); triangles[numTriangles++] = triangle_new3(a, b, c, white); // Right red wall a = point_new(8, -2, -20); b = point_new(8, -2, -10); c = point_new(8, 10, -20); triangles[numTriangles++] = triangle_new3(a, b, c, red); }
void test_construct(void** state) { // Create spheres with inward/outward normals. point_t origin = {0.0, 0.0, 0.0}; sp_func_t* s1 = sphere_new(&origin, 1.0, INWARD_NORMAL); assert_true(sp_func_num_comp(s1) == 1); assert_true(sp_func_has_deriv(s1, 1)); sp_func_t* s2 = sphere_new(&origin, 1.0, OUTWARD_NORMAL); assert_true(sp_func_num_comp(s2) == 1); assert_true(sp_func_has_deriv(s2, 1)); }
void test_construct(void** state) { // Create two spheres with inward normals. point_t x1 = {-0.5, 0.0, 0.0}, x2 = {0.5, 0.0, 0.0}; sp_func_t* s1 = sphere_new(&x1, 0.25, INWARD_NORMAL); sp_func_t* s2 = sphere_new(&x2, 0.25, INWARD_NORMAL); // Now construct their union. sp_func_t* u = union_new2(s1, s2); assert_true(sp_func_num_comp(u) == 1); assert_true(sp_func_has_deriv(u, 1)); }
int main() { printf("%s\n", "testing sphere_new"); sphere *s1 = sphere_new(vec_new(0.0, 0.0, 0.0), 10.0, rgb_new(0.5, 0.5, 0.5)); sphere *s2 = sphere_new(vec_new(1.0, 1.0, 1.0), 10.0, rgb_new(0.2, 0.3, 0.4)); sphere_print(s1); sphere_print(s2); printf("%s\n", "testing sphere_dup"); sphere *s3 = sphere_dup(s1); sphere *s4 = sphere_dup(s2); sphere_free(s1); sphere_free(s2); sphere_print(s3); sphere_print(s4); s1 = sphere_dup(s3); s2 = sphere_dup(s4); printf("%s\n", "testing sphere_tos"); char *p = sphere_tos(s3); char *p2 = sphere_tos(s4); printf("%s\n", p); printf("%s\n", p2); }
void test_plot(void** state) { // Create a text file containing an Octave script that can be run to // visualize this plot. point_t x1 = {-0.5, 0.0, 0.0}, x2 = {0.5, 0.0, 0.0}; sp_func_t* s1 = sphere_new(&x1, 0.25, INWARD_NORMAL); sp_func_t* s2 = sphere_new(&x2, 0.25, INWARD_NORMAL); sp_func_t* u = union_new2(s1, s2); bbox_t bbox = {.x1 = -2.0, .x2 = 2.0, .y1 = -2.0, .y2 = 2.0, .z1 = -2.0, .z2 = 2.0}; generate_octave_script_for_surface(u, 40, &bbox, "test_union.m"); } int main(int argc, char* argv[]) { polymec_init(argc, argv); const struct CMUnitTest tests[] = { cmocka_unit_test(test_construct), cmocka_unit_test(test_plot) }; return cmocka_run_group_tests(tests, NULL, NULL); }
void test_plot(void** state) { // Create a text file containing an Octave script that can be run to // visualize this plot. point_t origin = {0.0, 0.0, 0.0}; sp_func_t* s = sphere_new(&origin, 0.5, OUTWARD_NORMAL); bbox_t bbox = {.x1 = -1.0, .x2 = 1.0, .y1 = -1.0, .y2 = 1.0, .z1 = -1.0, .z2 = 1.0}; generate_octave_script_for_surface(s, 20, &bbox, "test_sphere.m"); } int main(int argc, char* argv[]) { polymec_init(argc, argv); const struct CMUnitTest tests[] = { cmocka_unit_test(test_construct), cmocka_unit_test(test_plot) }; return cmocka_run_group_tests(tests, NULL, NULL); }
void sea_event(SDL_Event event) { camera* cam = entity_get("camera"); light* sun = entity_get("sun"); switch(event.type) { case SDL_KEYUP: if (event.key.keysym.sym == SDLK_SPACE) { char ball_name[20]; sprintf(ball_name, "ball_%i", ball_count); ball_count++; physics_object* ball = entity_new(ball_name, physics_object); ball->renderable = asset_get("./resources/ball.obj"); ball->collision_body = collision_body_new_sphere(sphere_new(v3_zero(), 1)); ball->position = cam->position; ball->scale = v3(0.5, 0.5, 0.5); ball->velocity = v3_mul(v3_normalize(v3_sub(cam->target, cam->position)), 75); } case SDL_MOUSEBUTTONDOWN: if (event.button.button == SDL_BUTTON_WHEELUP) { cam->position = v3_sub(cam->position, v3_normalize(cam->position)); } if (event.button.button == SDL_BUTTON_WHEELDOWN) { cam->position = v3_add(cam->position, v3_normalize(cam->position)); } break; case SDL_MOUSEMOTION: mouse_x = event.motion.xrel; mouse_y = event.motion.yrel; break; } }
Object initPlayer(Map room) { Object playerObj = object_init(object_new(), "@", (mapVec){3, 1, 0}, (mapVec){1, 1, 0}, room ); Sensor leftEye = sensor_init(sensor_new(), "left_eye", frustum_init(frustum_new(), mapvec_zero, (mapVec){1, -1, 0}, 1, 2, 0, 10 ) ); Sensor rightEye = sensor_init(sensor_new(), "right_eye", frustum_init(frustum_new(), mapvec_zero, (mapVec){1, 1, 0}, 1, 2, 0, 10 ) ); Sensor basicSense = sensor_init(sensor_new(), "basic_sense", sphere_init(sphere_new(), mapvec_zero, 2 ) ); object_add_sensor(playerObj, leftEye); object_add_sensor(playerObj, rightEye); object_add_sensor(playerObj, basicSense); map_add_object(room, playerObj); return playerObj; }
void sea_init() { graphics_viewport_set_dimensions(1280, 720); graphics_viewport_set_title("Sea"); camera* cam = entity_new("camera", camera); cam->position = v3(50.0, 50.0, 50.0); cam->target = v3(0, 5, 0); cam->near_clip = 0.1; light* sun = entity_new("sun", light); light_set_type(sun, light_type_spot); sun->position = v3(20,23,16); sun->ambient_color = v3(0.5, 0.5, 0.5); sun->diffuse_color = v3(1.0, 0.894, 0.811); sun->specular_color = v3_mul(v3(1.0, 0.894, 0.811), 4); sun->power = 5; light* backlight = entity_new("backlight", light); light_set_type(backlight, light_type_point); backlight->position = v3(-22,10,-13); backlight->ambient_color = v3(0.2, 0.2, 0.2); backlight->diffuse_color = v3(0.729, 0.729, 1.0); backlight->specular_color = v3_mul(v3(0.729, 0.729, 1.0), 1); backlight->power = 2; shadow_mapper_init(sun); forward_renderer_init(); forward_renderer_set_camera(cam); forward_renderer_set_shadow_light(sun); forward_renderer_set_shadow_texture( shadow_mapper_depth_texture() ); forward_renderer_add_light(sun); forward_renderer_add_light(backlight); load_folder("./resources/"); texture* noise1 = asset_get("./resources/noise1.dds"); texture* noise2 = asset_get("./resources/noise2.dds"); texture* noise3 = asset_get("./resources/noise3.dds"); texture* noise4 = asset_get("./resources/noise4.dds"); texture* noise5 = asset_get("./resources/noise5.dds"); texture* skydome_tex = asset_get("./resources/skybox_cloud_10.dds"); texture* water_calm = asset_get("./resources/water_calm.dds"); texture* water_foam = asset_get("./resources/water_foam.dds"); material* seaplane_mat = asset_get("./resources/seaplane.mat"); material_set_property(seaplane_mat, "tex_noise1", noise1, mat_type_texture); material_set_property(seaplane_mat, "tex_noise2", noise2, mat_type_texture); material_set_property(seaplane_mat, "tex_noise3", noise3, mat_type_texture); material_set_property(seaplane_mat, "tex_noise4", noise4, mat_type_texture); material_set_property(seaplane_mat, "tex_noise5", noise5, mat_type_texture); material_set_property(seaplane_mat, "tex_skybox", skydome_tex, mat_type_texture); material_set_property(seaplane_mat, "tex_calm_water", water_calm, mat_type_texture); material_set_property(seaplane_mat, "tex_foam_water", water_foam, mat_type_texture); renderable* r_seaplane = asset_get("./resources/seaplane.obj"); renderable_set_material(r_seaplane, seaplane_mat); static_object* s_seaplane = entity_new("seaplane", static_object); s_seaplane->renderable = r_seaplane; s_seaplane->scale = v3(3,1,3); static_object* skydome = entity_new("skydome", static_object); skydome->renderable = asset_get("./resources/skydome.obj"); renderable_set_material(skydome->renderable, asset_get("./resources/skydome.mat")); skydome->position = v3(0, -512, 0); skydome->scale = v3(1024, 1024, 1024); load_folder("./resources/corvette/"); renderable* r_corvette = asset_get("./resources/corvette/corvette.obj"); multi_material* m_corvette = asset_get("./resources/corvette/corvette.mmat"); renderable_set_multi_material(r_corvette, m_corvette); static_object* s_corvette = entity_new("corvette", static_object); s_corvette->renderable = r_corvette; s_corvette->collision_body = collision_body_new_mesh(asset_get("./resources/corvette/corvette.col")); s_corvette->scale = v3(1.5, 1.5, 1.5); s_corvette->position = v3(0, 0.5, 0); static_object* center_sphere = entity_new("center_sphere", static_object); center_sphere->position = v3(0, 5, 0); center_sphere->renderable = asset_get("./resources/ball.obj"); center_sphere->collision_body = collision_body_new_sphere(sphere_new(v3_zero(), 1.0f)); ui_button* framerate = ui_elem_new("framerate", ui_button); ui_button_move(framerate, v2(10,10)); ui_button_resize(framerate, v2(30,25)); ui_button_set_label(framerate, "FRAMERATE"); ui_button_disable(framerate); }
void setUpCustom() { // Light lights[numLights++] = light_new(point_new(0, 2, -6), 0.5); // Reflective material color_t color = rgb(0, 0, 0); material_t refl = material_new(color, 1); // Red material color = rgb(231, 76, 60); material_t red = material_new(color, 0); // Green material color = rgb(46, 204, 113); material_t green = material_new(color, 0); // Purple material color = rgb(155, 89, 182); material_t purple = material_new(color, 0); // White material color = rgb(255, 255, 255); material_t white = material_new(color, 0); // Spheres point_t s = point_new(-1, -1, -8); spheres[numSpheres++] = sphere_new(s, 1, refl); s = point_new(1, -1, -7); spheres[numSpheres++] = sphere_new(s, 1, purple); // White back wall point_t a = point_new(-2.5, -2, -10); point_t b = point_new(2.5, -2, -10); point_t c = point_new(-2.5, 2, -10); triangles[numTriangles++] = triangle_new3(a, b, c, white); a = point_new(2.5, -2, -10); b = point_new(2.5, 2, -10); c = point_new(-2.5, 2, -10); triangles[numTriangles++] = triangle_new3(a, b, c, white); // White ceiling (it has a hole in it...) a = point_new(-2.5, 2, -2); b = point_new(2.5, 2, -2); c = point_new(2.5, 2, -5.5); triangles[numTriangles++] = triangle_new3(a, b, c, white); a = point_new(-2.5, 2, -2); b = point_new(2.5, 2, -5.5); c = point_new(-2.5, 2, -5.5); triangles[numTriangles++] = triangle_new3(a, b, c, white); a = point_new(-2.5, 2, -10); b = point_new(2.5, 2, -6.5); c = point_new(-2.5, 2, -6.5); triangles[numTriangles++] = triangle_new3(a, b, c, white); a = point_new(-2.5, 2, -10); b = point_new(2.5, 2, -10); c = point_new(2.5, 2, -6.5); triangles[numTriangles++] = triangle_new3(a, b, c, white); a = point_new(-2.5, 2, -6.5); b = point_new(-0.5, 2, -6.5); c = point_new(-0.5, 2, -5.5); triangles[numTriangles++] = triangle_new3(a, b, c, white); a = point_new(-2.5, 2, -6.5); b = point_new(-0.5, 2, -5.5); c = point_new(-2.5, 2, -5.5); triangles[numTriangles++] = triangle_new3(a, b, c, white); a = point_new(0.5, 2, -6.5); b = point_new(2.5, 2, -6.5); c = point_new(2.5, 2, -5.5); triangles[numTriangles++] = triangle_new3(a, b, c, white); a = point_new(0.5, 2, -6.5); b = point_new(2.5, 2, -5.5); c = point_new(0.5, 2, -5.5); triangles[numTriangles++] = triangle_new3(a, b, c, white); // White floor a = point_new(-2.5, -2, -2); b = point_new(2.5, -2, -2); c = point_new(2.5, -2, -10); triangles[numTriangles++] = triangle_new3(a, b, c, white); a = point_new(-2.5, -2, -2); b = point_new(2.5, -2, -10); c = point_new(-2.5, -2, -10); triangles[numTriangles++] = triangle_new3(a, b, c, white); // Red left wall a = point_new(-2.5, -2, -2); b = point_new(-2.5, -2, -10); c = point_new(-2.5, 2, -10); triangles[numTriangles++] = triangle_new3(a, b, c, red); a = point_new(-2.5, -2, -2); b = point_new(-2.5, 2, -10); c = point_new(-2.5, 2, -2); triangles[numTriangles++] = triangle_new3(a, b, c, red); // Green right wall a = point_new(2.5, -2, -2); b = point_new(2.5, -2, -10); c = point_new(2.5, 2, -10); triangles[numTriangles++] = triangle_new3(a, b, c, green); a = point_new(2.5, -2, -2); b = point_new(2.5, 2, -10); c = point_new(2.5, 2, -2); triangles[numTriangles++] = triangle_new3(a, b, c, green); }