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: 필수 과제를 수행했다면 구현되어야 할 예시