๐ก
FdF ๋ณธ๋ฌธ
๊ณผ์ ์ค๋ช
- ์ฃผ์ด์ง 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 |