[Cub3d] 심화.()

kihkim·2021년 5월 28일
0

42seoul

목록 보기
5/5

Cub3D

  1. mlx 창 띄우기.
  2. 아직 맵 파일 피싱을 못 하니까, 임시로 맵을 생성.
  3. 레이캐스팅으로 벽 구현.
  4. 바닥 천장 색 구현.
  5. 벽 텍스쳐 구현.
  6. 스프라이트 구현.
  7. 이제 맵파일을 피싱하는 기능을 추가(get_next_line 응용)
    7-2. 각 텍스쳐 xpm파일 경로 값 가져오기. (EA, WE, SO, NO, S)
    7-3. 천장과 바닥 RGB값 가져오기 (C, F)
    7-4. 해상도 가로세로 값 가져오기 (R)
    7-5. 숫자로 이루어진 맵 정보 가져오기(맵의 크기를 알아내고, malloc으로 맵 크기 지정 후, 정보 입력)
  8. --save 옵션을 넣으면 비트맵 스크린샷 찍는 기능을 추가.
  9. norminette 검사.
  • Cub3D는 해야할 양이 많아 이렇게 글로 정리하기가 막막하네요.
  • 마음 같아서는 처음 하시는 분도 따라하면 잘 구현할 수 있게 정리하고 싶은데 작성하기엔 너무 힘든 것 같습니다.
  • 그렇기에 그냥 본인이 cub3D를 하며 경험한 주의할 점, 팁 등을 남깁니다.

주의할 점.

  1. R, F, C, NO, SO, WE, EA의 값이 적힌 줄 순서가 섞여도 문제없이 작동되야 한다.
  2. 노미네이터 검사는 c파일 그리고 헤더파일에만 해당된다. (Makefile은 제외)
    즉 mlx_opengl 폴더도 검사 범위라는 소리.

팁.

맵 피싱.

  • 1. R(해상도 같은 경우엔) 쉼표 없이, 공백으로 가로값과 세로값을 구분한다.
    그렇기에 gnl로 한글자씩 검사할 때, line[i] == ' ' && line[i] == '숫자'가 오면 스택을 1 올린다.
    R은 요구하는 값이 가로, 세로 두개 뿐이므로 구분자 스택이 반드시 1이어야 한다.
    구분자 스택이 1이면 문제 없음, 1이 아니면 에러 출력.
  • 2. F(바닥), C(천장)은 쉼표로 구분한다.
    둘 다 요구하는 값이 RGB 즉, 3개 이므로 필요한 쉼표는 2개이다.
    쉼표가 2개이면 문제 없음, 2개가 아니면 에러 출력.
  • 3. 맵은 사방이 벽으로 막혀 있어야 한다.
    사방이 막혀 있는지 어떻게 확인하냐면 '0'을 기준으로 동서남북에 ' '이나 0(NULL)이 올 경우 뚫렸다고 판단한다. (여기서 0(NULL) 하고 '0'은 다름)
    (참고한 글: https://humonnom.tistory.com/entry/cub3d-map-parse-%EB%A7%B5-%ED%8C%8C%EC%8B%B1%ED%95%98%EA%B8%B0)

경험한 에러.

클러스터에서 mlx_get_screen_size() 함수가 작동이 안 돼요.

  • 내 경우엔 mlx파일을 minilbx_opengl_201901021 즉, opengl을 사용했다.
    그런데 이대로 쓰면, 다른 mlx함수는 잘 되는데, mlx_get_screen_size함수는 작동이 안된다. (mlx.h 헤더파일에 저 함수가 존재하지 않음.)
  • 해결법: https://gitlab.com/OctopusET/minilibx_opengl_custom/ (여기서 mlx_get_screen.m)파일을 가져와 opengl 폴더에 넣는다.
    그리고 opengl의 헤더파일, 즉 mlx.h 파일에도 mlx_get_screen_size 선언해야 함.
    이후 make 컴파일 하면 클러스터에서도 정상 작동.

가변길이배열(VLC) 사용 불가능

int a;

a = 3;
char c[a]; <- 이런 거 안 됨.

맵 파일 마지막 줄을 비워도 정상작동 되나 확인.

  • 윈도우의 경우에는 파일을 저장하면 저절로 텅 비워져있는 마지막줄이 추가되며 저장된다.
    (25줄을 쓰고 저장하면 26줄인 상태로 저장이 됨)
  • 다만 맥OS에서는 저장을 하면 그 상태 그대로 저장이 된다.
    (25줄을 쓰고 저장하면 25줄인 상태로 저장이 됨)
  • 맵 파일에서 맨 마지막 줄을 지우고 돌렸을 때, 작동이 되는지 확인해 보자.
    (본인은 윈도우에서 테스트해서 이런 에러를 발견 못했다.)

마침.

  • 블랙홀 데이 3일 남기고 겨우 끝냈다.
  • 내 경우엔 Cub3D를 통과하니까 61일을 받았다.
profile
신입

0개의 댓글