Exemple #1
0
void test_cast_ray(void){
   struct sphere s[2];
   struct color c1 = create_color(1,0,.3);
   s[0] = create_sphere(create_point(1.4,2.6,0), 2, c1);
   s[1] = create_sphere(create_point(4.5, 5, 0), 1,c1);

   struct ray r = create_ray(create_point(0,0,0), 
                             create_vector(1.4,2.6,0));

   struct ray r2 = create_ray(create_point(-123.2,-4,-.3),
                             create_vector(1.3,-2.9,-.3));

   struct ray r3 = create_ray(create_point(-4.5,-4.3,0),
                             create_vector(-23,-100,-100));

   checkit_int(cast_ray(r,s,2).r, 1);
   checkit_int(cast_ray(r,s,2).g, 0);
   checkit_int(cast_ray(r,s,2).b, .3);

   checkit_int(cast_ray(r2,s,2).r, 1);
   checkit_int(cast_ray(r2,s,2).g, 1);
   checkit_int(cast_ray(r2,s,2).b, 1);

   checkit_int(cast_ray(r3,s,2).r, 1);
   checkit_int(cast_ray(r3,s,2).g, 1);
   checkit_int(cast_ray(r3,s,2).b, 1);

}
Exemple #2
0
void test_sphere_intersection_point(void){

   struct ray r = create_ray(create_point(0,0,0),create_vector(1.3,0,0));
   struct sphere s = create_sphere(create_point(2.5,0,0),1.2);
   struct maybe_point test = sphere_intersection_point(r,s);
   checkit_double(test.p.x,1.3);
   checkit_double(test.p.y,0);
   checkit_double(test.p.z,0);
   checkit_int(test.isPoint,1);
   
   struct ray r2 = create_ray(create_point(-2.4,-2.9,-4.4),create_vector(-1,0,0));
   struct sphere s2 = create_sphere(create_point(2.3,5.7,8.2),1);
   struct maybe_point test2 = sphere_intersection_point(r2,s2);
   checkit_int(test2.isPoint,0);
   
   
   struct ray r3 = create_ray(create_point(-4.3,0,4.7),create_vector(3.5,0,0));
   struct sphere s3 = create_sphere(create_point(2.1,0,0),4.7);
   struct maybe_point test3 = sphere_intersection_point(r3,s3);
   checkit_int(test3.isPoint,1); 
   

   struct ray r4 = create_ray(create_point(1.2,-5.4,4.2),create_vector(1.1,1.2,1.3));
   struct sphere s4 = create_sphere(create_point(4.7,6.4,2.2),13.5);
   struct maybe_point test4 = sphere_intersection_point(r4,s4);
   checkit_double(test4.p.x,9.871860);
   checkit_double(test4.p.y,4.060210);
   checkit_double(test4.p.z,14.448561);
   checkit_int(test4.isPoint,1);
}
Exemple #3
0
void test_find_intersection_points(void){
   struct sphere s1 = create_sphere(create_point(4.2,0,0),1.3);
   struct sphere s2 = create_sphere(create_point(2.6,0,0),5.4);
   struct ray r = create_ray(create_point(-23.2,0,0),create_vector(.2,0,0));
   struct sphere spheres[2] = {s1,s2};
   struct sphere hit[2];
   struct point pts[2];
   checkit_int(find_intersection_points(spheres,2,r,hit,pts),2);
   checkit_double(pts[0].x, 2.9);
   checkit_double(pts[0].y, 0);
   checkit_double(pts[0].z, 0);
   checkit_double(pts[1].x, -2.8);
   checkit_double(pts[1].y, 0);
   checkit_double(pts[1].z, 0);
   checkit_double(hit[0].center.x, 4.2);
   checkit_double(hit[0].center.y, 0);
   checkit_double(hit[0].center.z, 0);
   checkit_double(hit[0].radius, 1.3);
   checkit_double(hit[1].center.x, 2.6);
   checkit_double(hit[1].center.y, 0);
   checkit_double(hit[1].center.z, 0);
   checkit_double(hit[1].radius, 5.4);

   struct sphere s3 = create_sphere(create_point(4.5,1.4,3.2),1.8);
   struct sphere s4 = create_sphere(create_point(2,4.3,5.4),3.2);
   struct sphere s5 = create_sphere(create_point(2.9,3.4,2.1),2.3);
   struct ray r2 = create_ray(create_point(1,1.3,.5),create_vector(1.3,1.4,1.8));
   struct sphere spheres2[3] = {s3,s4,s5};
   struct sphere hit2[3];
   struct point pts2[3];
   checkit_int(find_intersection_points(spheres2,3,r2,hit2,pts2),2);

   checkit_double(pts2[0].x, 2.489528);
   checkit_double(pts2[0].y, 2.904107);
   checkit_double(pts2[0].z, 2.562423);  
   checkit_double(pts2[1].x, 1.492227);
   checkit_double(pts2[1].y, 1.830091);
   checkit_double(pts2[1].z, 1.181545);

   checkit_double(hit2[0].center.x, 2);
   checkit_double(hit2[0].center.y, 4.3);
   checkit_double(hit2[0].center.z, 5.4);
   checkit_double(hit2[0].radius, 3.2);
   checkit_double(hit2[1].center.x, 2.9);
   checkit_double(hit2[1].center.y, 3.4);
   checkit_double(hit2[1].center.z, 2.1);
   checkit_double(hit2[1].radius, 2.3);

}
Exemple #4
0
void test_create_ray(void){
   struct ray r = create_ray(create_point(2.3,4.3,2.1),create_vector(2.5,3.5,4.5));
   checkit_double(r.p.x, 2.3);
   checkit_double(r.p.y, 4.3);
   checkit_double(r.p.z, 2.1);
   checkit_double(r.dir.x,2.5);
   checkit_double(r.dir.y,3.5);
   checkit_double(r.dir.z,4.5);
   
   struct ray r2 = create_ray(create_point(3.4,4.5,2.5),create_vector(1.1,4.1,5.1));
   checkit_double(r2.p.x, 3.4);
   checkit_double(r2.p.y, 4.5);
   checkit_double(r2.p.z, 2.5);
   checkit_double(r2.dir.x,1.1);
   checkit_double(r2.dir.y,4.1);
   checkit_double(r2.dir.z,5.1);
}
Exemple #5
0
int		button_pess(int button, int x, int y, t_env *e)
{
	t_vect	ray;

	(void)button;
	e->test = 1;
	create_ray(e, &ray, x, y);
	cast_ray(e, &ray, x, y);
	e->test = 0;
	return (1);
}