๐Ÿ’ก

FdF ๋ณธ๋ฌธ

42

FdF

์•„์˜ณ์ด 2021. 11. 30. 21:36

๊ณผ์ œ ์„ค๋ช…

- ์ฃผ์–ด์ง„ fdfํŒŒ์ผ ํŒŒ์‹ฑํ•˜๊ณ  ์ž…๋ ฅ๋ฐ›์•„ isometric projection ์„ ์‚ฌ์šฉํ•ด window์— ํ‘œํ˜„ํ•˜๊ธฐ

์‚ฌ์ „ ์ง€์‹

- MiniLibx

minilibx๋Š” 42์—์„œ ํ•™์ƒ๋“ค์„ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ๊ฐ„๋‹จํ•œ ์œˆ๋„์šฐ ์ธํ„ฐํŽ˜์ด์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค

์ž˜ ์ •๋ฆฌํ•ด์ฃผ์‹  ๋ถ„๋“ค์ด ๊ณ„์„œ์„œ ๋”ฐ๋ผํ•ด๋ณด๋ฉฐ ๊ฐ์„ ์ตํ˜€๋ณด์ž

https://yeosong1.github.io/miniRT%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC

 

miniRT, cub3d [์‹œ์ž‘ํ•˜๊ธฐ ์ „์—] MiniLibX ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ๊ธฐ (man mlx)

๐Ÿ–ฅ 42 ํ•™์Šต ๋…ธํŠธ by yeosong

yeosong1.github.io

https://malbongcode.tistory.com/149

 

cub3d - mlx์‚ฌ์šฉ๋ฒ• ์œ„์ฃผ๋กœ ์ •๋ฆฌํ•˜๊ธฐ (42seoul)

0. ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ - 1์ธ์นญ์œผ๋กœ 3D ๋ฏธ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ (๊ทธ๋ž˜ํ”ฝ ํ”„๋กœ์ ํŠธ) - ์ƒˆ๋กœ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ minilibx์— ๋Œ€ํ•ด์„œ ํ•™์Šตํ•˜๊ธฐ - raycasting์— ๋Œ€ํ•ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ - users.atw.hu/wolf3d/ ์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด๋ณด๊ธฐ -

malbongcode.tistory.com

 

- Isometric projection

๋“ฑ์ถ•ํˆฌ์˜์€ 3์ฐจ์› ๋ฌผ์ฒด๋ฅผ 2์ฐจ์› ์ƒ์— ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์˜ ์ผ์ข…์œผ๋กœ, x, y, z ์„ธ ์ขŒํ‘œ์ถ•์ด ์„œ๋กœ ์ด๋ฃจ๋Š” ๊ฐ๋„๊ฐ€ ๋ชจ๋‘ ๊ฐ™๊ฑฐ๋‚˜ 120๋„๋ฅผ ์ด๋ฃจ๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค๊ณ  ํ•œ๋‹ค

๋“ฑ์ถ•ํˆฌ์˜์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํšŒ์ „๋ณ€ํ•œ ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•ด x์ถ•๊ณผ y์ถ•์˜ ๊ฐ๋„๋ฅผ ํšŒ์ „ ์‹œํ‚จ ํ›„ ๋ฐ”๋€ ์ขŒํ‘œ์˜ ์ ๋“ค์„ ์ด์–ด ์„ ์„ ๊ทธ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค

 

- ์ง์„  ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋“ฑ์ถ•ํˆฌ์˜์„ ํ†ตํ•ด ๊ตฌํ•œ ์ขŒํ‘œ๋“ค์„ ์„ ์œผ๋กœ ์ด์–ด์ฃผ๊ธฐ ์œ„ํ•ด ์ง์„  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ–ˆ๋‹ค

์ง์„  ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” ํฌ๊ฒŒ DDA ์™€ Bresenham ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋Š”๋ฐ DDA๋Š” ์‹ค์ˆ˜ํ˜•์œผ๋กœ ๊ณ„์‚ฐ์„ ํ•˜์ง€๋งŒ Bresenham์€ ์ •์ˆ˜ํ˜•๋งŒ ์‚ฌ์šฉํ•ด ๊ณ„์‚ฐ์„ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ,  Bresenham ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํšจ์œจ์ ์ธ ๋ฉด์—์„œ ๋” ๋น ๋ฅด๊ฒŒ ์ง์„ ์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

Bresenham ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์›๋ฆฌ๋Š” ๊ธฐ์šธ๊ธฐ๋ฅผ ์ด์šฉํ•ด ์ค‘๋‹จ์ ์„ ๊ตฌํ•˜๊ณ  ์ฐ๊ณ ์žํ•˜๋Š” ์ขŒํ‘œ๊ฐ€ ์ค‘๋‹จ์  ์œ„์— ์žˆ๋Š”์ง€ ์•„๋ž˜์— ์žˆ๋Š”์ง€๋ฅผ ํŒ๋ณ„ํ•˜์—ฌ ์ง์„ ์„ ๊ทธ๋ฆฌ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค

 

fdf

- ์ฒ˜์Œ์œผ๋กœ ํ•˜๋Š” ๊ทธ๋ž˜ํ”ฝ ๊ณผ์ œ์˜€๊ธฐ ๋•Œ๋ฌธ์— mlx๋ฅผ ์ฒ˜์Œ ์ ‘ํ•ด ๊ฒ์„ ๋จน์—ˆ์ง€๋งŒ ์ž˜ ์ •๋ฆฌํ•ด์ฃผ์‹  ๋ถ„๋“ค์ด ๊ณ„์…”์„œ ๋„์›€์ด ๋งŽ์ด ๋ฌ๋‹ค

- ๋ฌธ๊ณผ์ƒ์˜ ๋‡Œ๋กœ๋Š” ์ดํ•ดํ•˜๊ธฐ ํž˜๋“  ์ˆ˜ํ•™์ ์ธ ๋‚ด์šฉ๋“ค์ด ์•„์‰ฌ์› ...์ง€๋งŒ ๊ฒฐ๊ณผ๋ฌผ์ด ๋ˆˆ์— ๋ณด์ด๋Š” ๊ณผ์ œ๋ผ ๋‚˜๋ฆ„ ์žฌ๋ฏธ์žˆ์—ˆ๋‹ค

- ์ „์ฒด์ ์ธ ํ๋ฆ„์€

mlx ์—ฐ์Šต -> ๋งต ํŒŒ์‹ฑ -> ๋“ฑ์ถ•ํˆฌ์˜ -> ๋งต์˜ ํฌ๊ธฐ์— ๋”ฐ๋ฅธ ๋น„์œจ ์กฐ์ • -> ์ง์„ ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

๊ฐ„๋žตํ•œ ๋ฉ”์ธํŒŒ์ผ

int	main(int argc, char **argv)
{
	t_mlx		*mlx;
	t_map		map;
	t_bresenham	b;

	// ์—๋Ÿฌ ์ฒ˜๋ฆฌ
	if (argc == 1)
		ft_error("Error: no input\n");
	else if (argc > 2)
		ft_error("Error: too many input\n");
	mlx = ft_init();
	if (mlx == NULL)
		ft_error("Error: mlx_init error");
	
    // ๋งต ํŒŒ์‹ฑ
	read_map(&map, argv[1]);
	mlx->map = ↦
	
    // ๋“ฑ์ถ•ํˆฌ์˜
	iso_projection(mlx, mlx->map);
	size_control(mlx, mlx->map);
	
    // ์ง์„  ์•Œ๊ณ ๋ฆฌ์ฆ˜
	draw(mlx, &b);
	mlx_put_image_to_window(mlx->mlx, mlx->window, mlx->image->image, 0, 0);
	ft_free(mlx);
    
    // ์ด๋ฒคํŠธ ๊ด€๋ฆฌ
	mlx_key_hook(mlx->window, key_control, mlx);
	mlx_loop(mlx->mlx);
	return (0);
}

 

'42' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

push_swap  (0) 2021.07.15
Born2beroot  (2) 2021.06.04
ft_printf  (0) 2021.05.30
get_next_line  (0) 2021.05.13