Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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));
}
Exemplo n.º 4
0
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));
}
Exemplo n.º 5
0
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);
}
Exemplo n.º 6
0
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);
}
Exemplo n.º 7
0
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);
}
Exemplo n.º 8
0
Arquivo: sea.c Projeto: RicoP/Corange
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;
    }

}
Exemplo n.º 9
0
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;
}
Exemplo n.º 10
0
Arquivo: sea.c Projeto: RicoP/Corange
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);

}
Exemplo n.º 11
0
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);
}