Skip to content

Files

Latest commit

 

History

History
153 lines (122 loc) ยท 8.18 KB

README.md

File metadata and controls

153 lines (122 loc) ยท 8.18 KB

cub3D

miniLibX๋ฅผ ์‚ฌ์šฉํ•œ ๋‚˜์˜ ์ฒซ RayCaster

์š”์•ฝ: ์ด ํ”„๋กœ์ ํŠธ๋Š” ์ตœ์ดˆ์˜ FPS์ด์ž ์„ธ๊ณ„์ ์œผ๋กœ ์œ ๋ช…ํ•œ 90๋…„๋Œ€ ๊ฒŒ์ž„์œผ๋กœ๋ถ€ํ„ฐ ์˜๊ฐ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ์—ฌ๋Ÿฌ๋ถ„์€ ray-casting์˜ ์„ธ๊ณ„๋ฅผ ํƒํ—˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ชฉํ‘œ๋Š” ๋ฏธ๋กœ ์•ˆ์—์„œ ์Šค์Šค๋กœ์˜ ๊ธธ์„ ์ฐพ์•„ ์—ญ๋™์ ์ธ ๋ทฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Goals

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์˜ ๋ชฉํ‘œ๋Š” ์ด์ „์— ์ง„ํ–‰ํ–ˆ๋˜ ์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค : ์—„๊ฒฉํ•จ, C์–ธ์–ด ์‚ฌ์šฉํ•˜๊ธฐ, ๊ธฐ๋ณธ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉํ•˜๊ธฐ, ์ •๋ณด ๊ฒ€์ƒ‰ ๋“ฑ

๊ทธ๋ž˜ํ”ฝ ๋””์ž์ธ ํ”„๋กœ์ ํŠธ๋กœ์„œ, cub3D๋Š” ์ฐฝ, ์ƒ‰์ƒ, ์ด๋ฒคํŠธ, ๋ชจ์–‘ ์ฑ„์šฐ๊ธฐ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ถ„์•ผ์—์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋Šฅ๋ ฅ ํ–ฅ์ƒ์„ ๋„์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, cub3D๋Š” ์žฌ๋ฏธ์žˆ๊ณ  ์‹ค์šฉ์ ์ธ ์ˆ˜ํ•™์  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์ฒด์ ์ธ ๋‚ด์šฉ ์ดํ•ด ์—†์ด๋„ ํƒ๊ตฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋•๋Š” ๋›ฐ์–ด๋‚œ ๋†€์ดํ„ฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ธํ„ฐ๋„ท์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋งŽ์€ ๋ฌธ์„œ๋“ค์—๊ฒŒ ๋„์›€์„ ๋ฐ›์œผ๋ฉด, ์—ฌ๋Ÿฌ๋ถ„์€ ์ˆ˜ํ•™์„ ๋„๊ตฌ์‚ผ์•„ ์šฐ์•„ํ•˜๊ณ  ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Mandatory part - 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" ์„ ๋ฐ˜ํ™˜ํ•œ ํ›„, ์—ฌ๋Ÿฌ๋ถ„์ด ์ •ํ•œ ๋ช…์‹œ์  ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Examples

image Figure VI.1: Wolfeinstein3D original game usinfg RayCasting. ๊ทธ๋ฆผ VI.1: RayCasting์„ ์‚ฌ์šฉํ•œ ์˜ค๋ฆฌ์ง€๋„ ๊ฒŒ์ž„ Wolfeinstein3D. image

Figure VI.2: Example of what your project could look like as per the mandatory part. ๊ทธ๋ฆผ VI.2: ํ•„์ˆ˜ ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋ฉด ๊ตฌํ˜„๋˜์–ด์•ผ ํ•  ์˜ˆ์‹œ