ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [cub3d] 과제 시작하기
    42seoul 2021. 2. 19. 12:30

    들어가는 글

    지난 글에서 적었던 것 처럼 mlx 공부, 수학공부를 먼저 하고 나서 본격적으로 365kim 님의 번역본을 보면서 raycasting 공부를 시작했다.

    주로 참고한 자료

    Raycasting 번역본

    화면에 그림을 그리는 부분은 이 튜토리얼을 참고해서 코딩했다.
    한 2주 정도는 이것만 붙잡고 있었던 것 같다.
    하나하나 계산해보고 시뮬레이션해보느라 시간도 많이 쓰고 머리도 아팠지만
    처음에 상상도 안가던게 조금씩 이해되니까 성취감이 있었다.

    cclaude42

    레이캐스팅 기법을 제외한 나머지 부분에서 잘 모르겠는 부분은 이 과제를 주로 참고했다.
    코딩 스타일은 많이 달라서 어떤 식으로 짰는지 보고 코딩할때는 내 방식대로 짰다.

     

    Minimap 그리기

    map을 가져와서 parse하고 나면
    이제 뭘해야할지 모르는 상태가 된다.

    그때 나는 minimap을 만들어서
    user가 어디에 위치해 있는지 점으로 찍고
    어느 방향을 보는지, ray 광선을 만들어 보았다.

    이렇게 만들어두면 화면에 그림을 그리기 전에, raycasting이 제대로 작동하고 있는지 눈으로 확인할 수 있어서 좋다.
    나중에 bonus에 있는 skybox로 활용할 수 있다.

    코드

    #include "cub3d.h"
    
    int		draw_minimap(t_info *info)
    {
    	t_mini	mini;
    	t_bonus	bonus;
    	int		ret;
    
    	ret = 0;
    	init_mini(&mini);
    	bonus.mini = mini;
    	declare_mini(info,&bonus);
    	if (bonus.mini.w > 0 && bonus.mini.h > 0 && bonus.mini.w < info->win.x && bonus.mini.h < info->win.y)
    	{
    		draw_map(info, &bonus);
    		ret = mark_objects(info, &bonus.mini);
    	}
    	return (ret);
    }
    
    /*
    **	description
    **	- info : struct, cub3d에 필요한 모든 정보를 담고 있다.
    **	- bonus : struct, 과제의 보너스 부분과 관련된 정보를 담고 있다. skybox도 bonus part이다.
    **	- if문은 minimap(skybox)의 넓이가 0으로 설정되지 않았는지,윈도우보다 크지는 않은지 확인한다.
    **	- mark_objects 함수는 화면에 skybox를 그린다. 
    */
    • info struct 안에는 bonus 관련된 구조체를 제외한 모든 구조체가 담겨있다.
    • draw_minimap을 호출하면 화면에 미니맵이 그려진다.
    • bonus 구조체안에 mini라는 구조체를 만들어서 사용했다.
    • 대부분의 함수에서 ret이라는 정수형 변수를 두고 사용했다.
      (0으로 초기화를 하고 실패시 1을 반환하도록 설정)
    • 다른 함수들은 모두 void로 리턴값이 없기때문에 ret과 관련이 없고
      지도에 오브젝트(유저, 스프라이트, 광선)들을 그려주는 mark_objects 함수의
      성공 유무가(성공시 0, 실패시 1반환) 그대로 draw_minimap의 리턴값이 된다.
    • bonus.mini.w나 bonus.mini.h가 하나라도 1보다 작으면 미니맵을 그리지 않는다.
      최소값이 매크로로 정해져있기 때문에 define을 의도적으로 건드리지 않는 한 적정 사이즈를 유지한다.

    추후 skybox로 적용된 모습

    white one: sprite(화면에는 그리기 전)/blue one: user/ yellow line: user direction

     


    과제관련 게시글 모음

    0. 과제파악하기

    1. 수학공부

    2. Makefile -L option, OpenGL, AppKit

    3. 과제시작하기 (이 글입니다)

    4. map parsing


    '42seoul' 카테고리의 다른 글

    [cub3d] map parse 맵 파싱하기  (0) 2021.03.21
    [minishell] Shell이란? 그리고 Shell이 하는 일  (0) 2021.03.01
    [42서울] 2월 16일(화) 레포트  (0) 2021.02.16
    [cub3D] Makefile  (0) 2021.01.05
    [cub3D] 벡터  (0) 2020.12.28

    댓글

Designed by Tistory + Edited by Juepark