Skip to content

๐ŸŽฎ raycasting ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ 3D๊ฒŒ์ž„ ๊ตฌํ˜„ํ•˜๊ธฐ

Notifications You must be signed in to change notification settings

dpfls0922/42-cub3d

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

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: ํ•„์ˆ˜ ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋ฉด ๊ตฌํ˜„๋˜์–ด์•ผ ํ•  ์˜ˆ์‹œ

About

๐ŸŽฎ raycasting ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ 3D๊ฒŒ์ž„ ๊ตฌํ˜„ํ•˜๊ธฐ

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published