main.c
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* main.c :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: gychoi <gychoi@student.42seoul.kr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2023/04/27 17:42:54 by gychoi #+# #+# */ 9 /* Updated: 2023/05/28 22:58:16 by gychoi ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include "header.h" 14 15 t_scene *scene_init(void) 16 { 17 t_scene *scene; 18 t_object *world; 19 t_object *lights; 20 double ka; 21 22 scene = malloc(sizeof(t_scene)); 23 if (!scene) 24 return (NULL); 25 scene->canvas = canvas(SCREEN_WIDTH, SCREEN_HEIGHT); 26 scene->camera = camera(scene->canvas, point3(0, 0, 0)); 27 world = object(SP, sphere(point3(-2, 0, -5), 2), color3(0.5, 0, 0)); 28 oadd(&world, object(SP, sphere(point3(2, 0, -5), 2), color3(0, 0.5, 0))); 29 oadd(&world, object(SP, sphere(point3(0, -1000, 0), 995), color3(1, 1, 1))); 30 scene->world = world; 31 lights = object(LIGHT_POINT, light_point(point3(0, 20, 0), color3(1, 1, 1), 0.5), color3(0, 0, 0)); 32 scene->light = lights; 33 ka = 0.1; 34 scene->ambient = vmul_d(color3(1, 1, 1), ka); 35 return (scene); 36 } 37 38 int main(void) 39 { 40 void *mlx_ptr; 41 void *win_ptr; 42 t_vars vars; 43 t_data image; 44 45 double u; 46 double v; 47 t_color3 pixel_color; 48 t_scene *scene; 49 int anti; 50 51 vars.mlx = mlx_init(); 52 vars.win = mlx_new_window(vars.mlx, SCREEN_WIDTH, SCREEN_HEIGHT, "test"); 53 image.img = mlx_new_image(vars.mlx, SCREEN_WIDTH, SCREEN_HEIGHT); 54 image.addr = mlx_get_data_addr(image.img, &image.bpp, &image.length, &image.endian); 55 56 scene = scene_init(); 57 anti = 10; 58 for (int j = 0; j < scene->canvas.height; j++) 59 { 60 for (int i = 0; i < scene->canvas.width; i++) 61 { 62 pixel_color = color3(0, 0, 0); 63 for (int s = 0; s < anti; s++) 64 { 65 u = ((double)i + rand_num(anti)) / (scene->canvas.width - 1); 66 v = 1 - ((double)j + rand_num(anti)) / (scene->canvas.height - 1); 67 scene->ray = ray_primary(scene->camera, u, v); 68 pixel_color = vadd_v(pixel_color, ray_color(scene)); 69 } 70 my_mlx_pixel_put(&image, i, j, trgb_anti(&pixel_color, anti, 0)); 71 } 72 } 73 mlx_put_image_to_window(vars.mlx, vars.win, image.img, 0, 0); 74 mlx_key_hook(vars.win, key_hook, &vars); 75 mlx_hook(vars.win, 17, 0, exit_hook, 0); 76 mlx_loop(vars.mlx); 77 return (0); 78 }