miniLibX๋ฅผ ์ฌ์ฉํ ๋์ ์ฒซ RayCaster
์์ฝ: ์ด ํ๋ก์ ํธ๋ ์ต์ด์ FPS์ด์ ์ธ๊ณ์ ์ผ๋ก ์ ๋ช ํ 90๋ ๋ ๊ฒ์์ผ๋ก๋ถํฐ ์๊ฐ์ ์ป์์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ฅผ ์ํํจ์ผ๋ก์จ ์ฌ๋ฌ๋ถ์ ray-casting์ ์ธ๊ณ๋ฅผ ํํํ ๊ฒ์ ๋๋ค. ์ฌ๋ฌ๋ถ์ ๋ชฉํ๋ ๋ฏธ๋ก ์์์ ์ค์ค๋ก์ ๊ธธ์ ์ฐพ์ ์ญ๋์ ์ธ ๋ทฐ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค.
์ด๋ฒ ํ๋ก์ ํธ์ ๋ชฉํ๋ ์ด์ ์ ์งํํ๋ ์ด๋ฌํ ํ๋ก์ ํธ์ ๋น์ทํฉ๋๋ค : ์๊ฒฉํจ, C์ธ์ด ์ฌ์ฉํ๊ธฐ, ๊ธฐ๋ณธ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉํ๊ธฐ, ์ ๋ณด ๊ฒ์ ๋ฑ
๊ทธ๋ํฝ ๋์์ธ ํ๋ก์ ํธ๋ก์, cub3D๋ ์ฐฝ, ์์, ์ด๋ฒคํธ, ๋ชจ์ ์ฑ์ฐ๊ธฐ ๋ฑ๊ณผ ๊ฐ์ ๋ถ์ผ์์ ์ฌ๋ฌ๋ถ์ ๋ฅ๋ ฅ ํฅ์์ ๋์ธ ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, cub3D๋ ์ฌ๋ฏธ์๊ณ ์ค์ฉ์ ์ธ ์ํ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ ์ดํด ์์ด๋ ํ๊ตฌํ ์ ์๊ฒ ๋๋ ๋ฐ์ด๋ ๋์ดํฐ๊ฐ ๋ฉ๋๋ค.
์ธํฐ๋ท์์ ์ฐพ์ ์ ์๋ ์๋ง์ ๋ฌธ์๋ค์๊ฒ ๋์์ ๋ฐ์ผ๋ฉด, ์ฌ๋ฌ๋ถ์ ์ํ์ ๋๊ตฌ์ผ์ ์ฐ์ํ๊ณ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํ ์ ์์ต๋๋ค.
ํ๋ก๊ทธ๋จ ์ด๋ฆ | cub3D |
---|---|
์ ์ถํ ํ์ผ | ๋ชจ๋ ํ์ผ๋ค |
Makefile ๊ท์น | all, clean, fclean, re, bonus |
์ธ์ | *.cub ํ์์ ๋งต |
์ฌ์ฉ๊ฐ๋ฅํ์ธ๋ถ ํจ์ | โข open, close, read, write, printf, malloc, free, perror, strerror, exitโข math ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด์ ๋ชจ๋ ํจ์๋ค (-lm man man 3 math)โข MinilibX ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด์ ๋ชจ๋ ํจ์๋ค |
libft ์ฌ์ฉ์ฌ๋ถ | ์ฌ์ฉ ๊ฐ๋ฅ |
์ค๋ช | ์ฌ๋ฌ๋ถ์ ๋ฏธ๋ก ๋ด๋ถ์ 1์ธ์นญ ๋ทฐ๋ฅผ "ํ์ค์ ์ธ" 3D ๊ทธ๋ํฝ์ผ๋ก ํํํ์ ์ผ ํฉ๋๋ค. ์ด๋ฌํ ํํ์ ์์ ๋งํ Ray-Casting ์๋ฆฌ๋ฅผ ํตํด ์์ฑ๋์ด์ผ ํฉ๋๋ค. |
์ ์ฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ฐ๋์ miniLibX๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. (์ด์์ฒด์ ์์ ์ด์ฉ ๊ฐ๋ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ณผ์ ์์ ์ ๊ณต๋๋ ์์ค ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ ์ผ ํฉ๋๋ค) ๋ง์ฝ ์ ๊ณต๋ฐ์ ์์ค๋ฅผ ์ด์ฉํด ์์ ํ๊ธฐ๋ก ํ๋ค๋ฉด, Libft์ย ๊ณตํต ์ง์นจ๊ณผ ๊ฐ์ ๊ท์น์ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
- ์์ ์ฐฝ ๊ด๋ฆฌ๋ ๋ถ๋๋ฝ๊ฒ ๋์ํ์ฌ์ผ ํฉ๋๋ค. (์ฐฝ ์ต์ํ, ๋ค๋ฅธ ์ฐฝ์ผ๋ก ์ ํ ๋ฑ์ ๋์)
- ๋ฒฝ์ด ์ด๋ ์ชฝ (๋, ์, ๋จ, ๋ถ) ์ ํฅํ๊ณ ์๋์ง์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ๋ฒฝ ํ ์ค์ณ (ํ ์ค์ณ๋ค๋ ์ง์ ๊ณจ๋ผ ์ฌ์ฉํ์ธ์) ๋ฅผ ์ฌ์ฉํ์ฌ์ผ ํฉ๋๋ค.
- ์ฌ๋ฌ๋ถ์ ํ๋ก๊ทธ๋จ์ ๋ฐ๋ฅ๊ณผ ์ฒ์ฅ์ ์์ ์๋ก ๋ค๋ฅด๊ฒ ์ค์ ํ ์ ์์ด์ผ ํฉ๋๋ค.
- ํ๋ก๊ทธ๋จ์ ์ด๋ฏธ์ง๋ฅผ ์ฐฝ์ ํ์ํ๋ฉฐ, ๋ค์ ๊ท์น์ ์ค์ํด์ผ ํฉ๋๋ค.
- ํค๋ณด๋์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ํ์ดํ ํค๋ ์นด๋ฉ๋ผ์ ์์ ์ ํ์ ์ํฌ ์ ์์ด์ผ ํฉ๋๋ค. (์ผ์ชฝ ๋ฐ ์ค๋ฅธ์ชฝ ๋ณด๊ธฐ)
- W, A, S, D ํค๋ ๋งต ๋ด๋ถ์์ ์นด๋ฉ๋ผ๋ฅผ ์ด๋์ํฌ ์ ์์ด์ผ ํฉ๋๋ค. (์บ๋ฆญํฐ์ ์ด๋)
- ESC๋ฅผ ๋๋ฅด๋ฉด ์ฐฝ์ด ๋ซํ๊ณ ํ๋ก๊ทธ๋จ์ด ์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ด์ผ ํฉ๋๋ค.
- ์ฐฝ ์๋จ ํ์์ค์ ์๋ ๋นจ๊ฐ์ ์ญ์๊ฐ๋ฅผ ํด๋ฆญํ๋ฉด ์ฐฝ์ด ๋ซํ๊ณ ํ๋ก๊ทธ๋จ์ด ์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ด์ผ ํฉ๋๋ค.
- minilibX์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ๊ทน ๊ถ์ฅํฉ๋๋ค.
- ์ฌ๋ฌ๋ถ์ ํ๋ก๊ทธ๋จ์ ๋จผ์ .cub ํ์ฅ์๋ฅผ ๊ฐ์ง ์ง๋ ํ์ผ์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ๋ฐ์์์ผ ํฉ๋๋ค.
-
์ง๋๋ ์ค์ง 6๊ฐ์ ๋ฌธ์๋ก๋ง ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค. (๋น ๊ณต๊ฐ์ธ ๊ฒฝ์ฐ 0, ๋ฒฝ์ธ ๊ฒฝ์ฐ 1, ํ๋ ์ด์ด์ ์์ ์์น์ ๊ทธ์ ๋ฐ๋ฅธ ์์ ์ N, S, E, W)
-
๊ฐ๋จํ๊ณ ์ ํจํ ๋งต์ ์์์ ๋๋ค :
111111 100101 102001 1100N1 111111
-
์ง๋๋ ๋ฒฝ์ผ๋ก ๋๋ฌ์์ฌ ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ํ๋ก๊ทธ๋จ์ ์ค๋ฅ๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค
-
์ง๋ ๋ด์ฉ์ ์ ์ธํ๊ณ ๋, ๊ฐ๊ฐ์ ์์๋ค์ ํ๋ ํน์ ๊ทธ ์ด์์ ๋น ์ค๋ก ๋ถ๋ฆฌ๋ ์ ์์ต๋๋ค.
-
์ง๋ ๋ด์ฉ์ด ํญ์ ๋งจ ๋ง์ง๋ง์ ์์ด์ผ ํ๋ค๋ ์ ์ ์ ์ธํ๋ฉด, ๋ค๋ฅธ ์์๋ค์ ์ด๋ค ์์๋ก๋ ํ์ผ ๋ด๋ถ์ ์ ์ฅ๋์ด ์์ ์ ์์ต๋๋ค.
-
์ง๋๋ฅผ ์ ์ธํ๊ณ , ์์์์ ๊ฐ ์ ํ์ ์ ๋ณด๋ ํ๋ ์ด์์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ์ ์์ต๋๋ค.
-
์ง๋๋ ํ์ผ ๋ด์์ ๋ณด์ด๋ ๊ฒ์ฒ๋ผ ๋ถ๋ฌ ์ฌ ์ ์์ด์ผ ํฉ๋๋ค. ๊ณต๋ฐฑ์ ์ง๋์ ์ ํจํ ๋ถ๋ถ์ด๋ฉฐ, ์ฒ๋ฆฌ๋ ์ฌ๋ฌ๋ถ์ ๋ชซ์ ๋๋ค. ์ฌ๋ฌ๋ถ์ ๊ท์น๋๋ก ๋ง๋ค์ด์ง ๋ชจ๋ ์ข ๋ฅ์ ์ง๋๋ฅผ ์ ๋๋ก ๋ถ๋ฌ์ฌ ์ ์์ด์ผ ํฉ๋๋ค.
-
๊ฐ ์์ (์ง๋ ์ ์ธ) ์ ์ฒซ ๋ฒ์งธ ์ ๋ณด๋ (ํ๋ ๋๋ ๋๊ฐ์ ๋ฌธ์๋ก ๊ตฌ์ฑ๋) ์ ํ ์๋ณ์์ด๋ฉฐ, ๊ฐ ๊ฐ์ฒด์ ๋ํ ๋ชจ๋ ๊ตฌ์ฒด์ ์ธ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ ์๊ฒฉํ ๊ท์น์ ๋ฐ๋ฆ ๋๋ค :
-
๋ถ์ชฝ ๋ฒฝ ํ ์ค์ณ :
NO ./path_to_the_north_texture
- identifier: NO
- path to the north texure
- ์ ํ ์๋ณ์ : NO
- ๋ถ์ชฝ ๋ฒฝ ํ ์ค์ณ๊ฐ ๋ด๊ฒจ์๋ ๊ฒฝ๋ก
-
๋จ์ชฝ ๋ฒฝ ํ ์ค์ณ :
SO ./path_to_the_south_texture
- identifier: SO
- path to the south texure
- ์ ํ ์๋ณ์ : SO
- ๋จ์ชฝ ๋ฒฝ ํ ์ค์ณ๊ฐ ๋ด๊ฒจ์๋ ๊ฒฝ๋ก
-
์์ชฝ ๋ฒฝ ํ ์ค์ณ :
WE ./path_to_the_west_texture
- identifier: WE
- path to the west texure
- ์ ํ ์๋ณ์ : WE
- ์์ชฝ ๋ฒฝ ํ ์ค์ณ๊ฐ ๋ด๊ฒจ์๋ ๊ฒฝ๋ก
-
๋์ชฝ ๋ฒฝ ํ ์ค์ณ :
EA ./path_to_the_east_texture
- identifier: EA
- path to the east texure
- ์ ํ ์๋ณ์ : EA
- ๋์ชฝ ๋ฒฝ ํ ์ค์ณ๊ฐ ๋ด๊ฒจ์๋ ๊ฒฝ๋ก
-
๋ฐ๋ฅ ์์ :
F 220,100,0
- identifier: F
- R,G,B colors in range [0,255]: 0, 255, 255
- ์ ํ ์๋ณ์ : F
- [0, 255] ์ฌ์ด์ RGB ์์ : 0, 255, 255
-
์ฒ์ฅ ์์ :
C 225,30,0
- identifier: C
- R,G,B colors in range [0,255]: 0, 255, 255
- ์ ํ ์๋ณ์ : C
- [0, 255] ์ฌ์ด์ RGB ์์ : 0, 255, 255
-
-
ํ์ ๊ตฌํ ํํธ์์ ์ฌ์ฉํ ๊ฐ๋จํ .cub ํ์ผ์ ์:
NO ./path_to_the_north_texture SO ./path_to_the_south_texture WE ./path_to_the_west_texture EA ./path_to_the_east_texture F 220,100,0 C 225,30,0 1111111111111111111111111 1000000000110000000000001 1011000001110000002000001 1001000000000000000000001 111111111011000001110000000000001 100000000011000001110111111111111 11110111111111011100000010001 11110111111111011101010010001 11000000110101011100000010001 10002000000000001100000010001 10000000000000001101010010001 11000001110101011111011110N0111 11110111 1110101 101111010001 11111111 1111111 111111111111
-
If any misconfiguration of any kind is encountered in the file, the program must exit properly and return "Error\n" followed by an explicit error message of your choice.
-
๋งต ํ์ผ์์ ์๋ชป๋ ๊ตฌ์ฑ์ด ๋ฐ๊ฒฌ๋์์ ๊ฒฝ์ฐ, ํ๋ก๊ทธ๋จ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ข ๋ฃํ๊ณ "Error\n" ์ ๋ฐํํ ํ, ์ฌ๋ฌ๋ถ์ด ์ ํ ๋ช ์์ ์ค๋ฅ ๋ฉ์์ง๊ฐ ํ์๋์ด์ผ ํฉ๋๋ค.
-


Figure VI.2: Example of what your project could look like as per the mandatory part. ๊ทธ๋ฆผ VI.2: ํ์ ๊ณผ์ ๋ฅผ ์ํํ๋ค๋ฉด ๊ตฌํ๋์ด์ผ ํ ์์