요약 : 이 프로젝트에서는 레이트레이싱 세계를 소개한다. 프로젝트를 완성한다면 너는 간단한 컴퓨터 생성 이미지를 만들 수 있을 것이고 수학 공식을 두려워하지 않을 것이다.
Mandatory part - miniRT
프로그램명 | miniRT |
---|---|
제출 파일 | 모든 파일 |
Makefile | all, clean, fclean, re, bonus |
인자 | *.rt 형태의 장면(scene) |
허용 함수 | • open, close, read, write, printf, malloc, free, perror, strerror, exit • All functions of the math library (-lm man man 3 math) • All functions of the MinilibX |
Libft 허용 여부 | 허용 |
설명 | 이 프로그램의 목표는 레이캐스팅 프로토콜을 사용하여 이미지를 생성하는 것이다. 특정 각도, 위치에서 볼 수 있는 각 이미지들은 각각의 장면을 나타내는 것으로, 간단한 기하학적 물체와 각각의 조명 시스템으로 정의된다. |
제한 사항은 다음과 같다.
- 너는 반드시 miniLibX를 사용해야 한다. OS에서 사용가능한 버전 또는 소스파일에서 제공하는 버전을 사용해라. 소스파일로 작업하려면 Common Instruction에 적혀있듯이 너의 Libft와 동일한 rule을 적용해야 한다.
- 너의 창은 부드러워야 한다: 다른 창으로의 전환이나 최소화 등.
- 최소한 다음의 3개의 기하학적 물체가 필요하다: 평면, 구, 원기둥.
- 해당되는 경우, 모든 가능한 교차로와 객체 내부를 올바르게 처리해야 한다.
- 너의 프로그램은 물체의 고유한 특성을 리사이즈할 수 있어야 한다: 구의 직경, 원기둥의 너비와 높이
- 너의 프로그램은 물체, 조명, 카메라에 대해 변환(평행이동(translation), 회전(rotation))을 적용할 수 있어야 한다.
- 조명 관리 : 스팟 밝기, hard 그림자, 주변광(물체는 완벽한 어둠 속에 있지 않다). 너는 주변광과 난반사를 구현해야 한다.
- 프로그램은 이미지를 창에 띄워야 하고 다음 규칙을 준수해야 한다.
- ESC를 누르면 창을 닫고 프로그램을 깨끗이 종료해야 한다.
- 창의 빨간색 X를 클릭하면 창을 닫고 프로그램을 깨끗이 종료해야 한다.
- minilibX의 images 사용을 강력히 추천한다.
- 너의 프로그램은 첫 번째 인자로 장면 설명 파일(scene description file)을 .rt 확장자로 받는다.
- 각 요소의 유형은 하나 이상의 개행으로 구분된다.
- 요소의 각 정보 유형은 하나 이상의 공백으로 구분된다.
- 각 요소 유형은 파일에서 임의의 순서로 배치되어 있다.
- 대문자로 정의된 요소는 장면에서 한 번만 선언될 수 있다.
- 각 요소의 첫 번째 정보는 타입 식별자(1~2개의 문자로 구성됨)이며 그 뒤에는 세부 정보가 다음의 순서로 따라온다.
주변광 (Ambient lightning)
- 식별자 : A
- [0.0,1.0] 범위 내에서의 주변광의 비율: 0.2
- [0-255] 범위 내에서의 R,G,B 색상: 255, 255, 255
카메라
- 식별자: C
- 방향(view point)의 x,y,z 좌표: -50.0, 0, 20
- 3차원에서 정규화된 방향 벡터. x,y,z 축 각각에 대해 [-1,1] 범위 내의 값을 가짐: 0, 0, 1
- 시야 (FOV, Field of view): [0,180] 범위 내에서의 수평 시야각: 70
조명
- 식별자: L
- 광점(light point)의 x,y,z 좌표: -40.0, 50.0, 0.0
- [0.0,1.0] 범위 내에서의 조명 밝기 비율: 0.6
- [0-255] 범위 내에서의 R,G,B 색깔(mandatory에서는 미사용): 10, 0, 255
구 (Sphere)
- 식별자 : sp
- 구의 중점의 x,y,z 좌표: 0.0, 0.0, 20.6
- 구의 직경: 12.6
- [0-255] 범위 내에서의 R,G,B 색깔: 10, 0, 255
평면 (Plane)
- 식별자: pl
- x,y,z 좌표 : 0.0, 0.0, -10.0
- 3차원에서 정규화된 방향 벡터. x,y,z 축 각각에 대해 [-1,1] 범위 내의 값을 가짐: 0.0, 1.0, 0.0
- [0-255] 범위 내에서의 R,G,B 색깔: 0, 0, 255
원기둥 (Cylinder)
- 식별자 : cy
- x,y,z 좌표: 50.0,0.0,20.6
- 3차원에서 정규화된 방향 벡터. x,y,z 축 각각에 대해 [-1,1] 범위 내의 값을 가짐: 0.0, 0.0, 1.0
- 원기둥의 직경: 14.2
- 원기둥의 높이: 21.42
- [0-255] 범위 내에서의 R,G,B 색깔: 10, 0, 255
다음은 mandatory 파트의 가장 단순한 .rt 장면의 예시이다.
- 만약 파일에서 어떤 종류의 잘못된 설정을 만난다면 반드시 프로그램을 종료하고 “Error\n” 뒤에 명시적인 에러 메시지를 붙여서 출력해야 한다.
- 동료평가를 받을 때, 요소 생성을 원할하게 하기 위해 각 기능에 맞는 장면을 모아서 평가를 받는 것이 이상적이다.