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  }