miniRT 진행(6) 과제 내용과 초반 설계 방법

chanykim·2021년 1월 19일
0

miniRT

목록 보기
8/10

miniRT 초반 설계

mac이 없어서 실행은 못시켰지만 여러 개의 github를 찾아 보면서 어떻게 초반 설계를 했는지 확인하였다.
그리고 대부분 다 비슷한 형태로 시작하는 것을 알았고, mlx함수에 대해서도 알 수 있었다.

https://yeosong1.github.io/miniRT
이 사이트에서 과제 내용을 먼저 알아보자.
그러면 우리는 .rt라는 파일을 이용하여

이러한 내용을 집어넣어 오브젝트가 형성되고 결과 창이 나와야 한다.
그러면 .rt의 정보를 받았을 때 read하여 공백, 탭, 개행은 건너뛰고 숫자나 음수, 소수점(.)을 잘 생각해야하고 벡터일 때 좌표를 구분 짓는 쉼표(,)도 각각의 정보에 넣어야하는 parsing 함수를 만들어야한다.

<parsing 함수 설계 초안>

처음엔 역시 .rt를 열어야한다.
fd = open(argv[1], 0) - argv의 1번째 배열에는 ~~.rt 가 들어있을 것이다.
그리고 이것을 읽는 read함수가 쓰일 것이다.
rd_num = read(fd, buf, BUFSIZE) // BUFSIZE만큼 읽는다. 한줄의 최대라인을 만들어서 정하는 것도 나쁘지 않아보임.
그렇다면 읽으면서 각 정보를 저장하는 게 맞을까. 아니면 하나의 str을 만들어서 저장하는 게 나을까.

생각해보면 그때그때 저장 하는 것보다 하나의 str에다가 저장해놓고 ++을 하면서 parsing하는 방법이 더 나아보인다. 라고 생각한 때도 있었다....
함수를 구현하는 와중에 한번에 .rt 내용을 저장하기보다 gnl처럼 \n까지의 줄을 저장한 *line을 가지고 정보를 넣는 식으로 해야겠다.

그러면 str이란 곳에 .rt의 정보를 다 담았다고 하자.하지 말자!
한 줄 저장한 것을 가지고 글 처음에 R, A, C, l로 어떤 정보를 넣을 것인지 확인한다.
그리고 \n 전까지 읽는다.
이럴 때 또 필요한 함수들이 있다.
우선 R, A, C 같은 정보를 구분 짓는 문자(start_type)가 나오면 str++를 하여 각 정보에 맞는 함수로 넘어간다. 그전에 pl같은 start_type가 있을 수 있으니 and연산을 이용하여 다음 문자가 있는지 확인도 해야겠다.
그리고 is_space()라는 함수를 만들어서 공백, 탭, 쉼표가 나오면 str++하는 함수를 만들자.
만약에 -0123456789를 만났을 때 공백 탭, 쉼표 전까지의 내용을 저장하자.
그런데 이 과정에서 .가 있을 수 있다. 이러한 내용을 바탕으로 각 start_type에 맞게 정보를 잘 넣어야 한다.
각 정보들의 위치는 변하지 않으며 고정적이다. 그러므로 중간에 숫자와 관련이 없는 것들은 넘길 수 있는 is_space()라는 함수를 만들어 놓는게 편하다.
그리고 str이 증가할 때마다 각 정보에 맞게 초기화 시켜주면 될 것 같다.
그렇게 str에 \n까지 읽으면서 저장하면 다음 줄을 읽으면서 다시 \n까지 저장하고 위와 같은 과정을 반복한다.

<.rt를 이용한 창 띄우기>

과제에서 필요로 하는 기능

  1. .rt 파일로 화면을 구성해야 함.
  2. 카메라 2대 이상일 때 키보드로 전환 가능해야 함
  3. 객체, 조명 및 카메라에 변환 및 회전 변환을 적용 할 수 있어야 함.
  4. 빛을 관리해야 함. (스팟 밝기, 단단한 그림자, 주변 조명)
  5. --save를 치면 해당 장면을 bmp로 저장해야 함.
  6. ESC를 누르면 창을 닫고 프로그램 종료.
profile
오늘보다 더 나은 내일

0개의 댓글