20210318(목) - jungcow/42Cursus GitHub Wiki

1. 학습날짜

  • 2021-03-18(목)

2. 학습시간

  • 16:00 ~ 20:00 (집)

3. 학습범위 및 주제

  • 코드 구성 일부분

4. 동료 학습 방법

X

5. 학습 목표

  • 코드 구성 일부분

6. 과제 제출 repository 주소

7. 상세 학습 내용

#main 함수

  1. 인자: int argc, char *argv[]
    • argv로는 .rt 파일의 path가 온다.
  2. 기능
    1. .rt 파일 parsing (parse)
    2. .rt 파일 validate 검사 (validate)
    3. 이후 world 구조체에 할당 (create world) && (delete world)
    4. mlx 초기화 (start_mlx)
    5. ray tracing을 이용해 이미지 평면 변환, 월드 변환 등 이후 충돌 검사 후 픽셀 찍기 (convert) && (trace) && (put image)
    6. 여러 이벤트 제어 (addEventListner)

필요한 구조체

typedef struct s_world
{
    void *object;
    void *light;
    void *cam;
    t_ambient ambient;
    int width;
    int height;
} t_world;
typedef struct s_object
{
    - 필요한 조건 (중심 좌표 및 벡터)
    - 충돌 알고리즘
} t_object;
typedef struct s_light
{
    - 좌표 및 벡터
    - 강도
} t_light;
typedef struct s_cam
{
    origin;
    dir;
    fov;
} t_cam;
typedef struct s_ambient
{
    color;
    ratio;
} t_ambient;

parsing 함수

  1. 인자: char *argv[]
  2. 기능:
    1. 유효성 검사 (validate)
        1. 필수 옵션들이 없으면 에러처리
            - Resolution
            - ambient light
            - camera
        2. 대문자 옵션이 두개 이상 나오면 에러처리
        3. 각 요소마다 정확한 정보가 들어있는지 확인
            - 정보의 순서
            - 정보의 정해져있는 범위값
            - 정보의 갯수
    
    2. 유효성이 확인된 정보를 world에 할당 (create world) (get_next_line) (ft_split)
    3. 동시에 delete world 도 생성

start_mlx 함수

  1. 인자: t_world *world, t_mlx *mlx
  2. 기능:
    1. world의 크기를 대입 (해상도는 최대 현재 컴퓨터의 해상도로 맞춤)
    2. init_mlx
    3. new_window
    4. new_image
    5. addr와 bpp, line_size, endian 할당

8. 학습에 대한 총평

  • 전체적인 구조를 짜고 있는데 아직까지 코드를 직접 짜며 부딪히는 문제점들이 뭐가 있는지 알 수 없어서 약간 두렵다. 하지만 이렇게 확실한 전체적인 구조를 잡고 가는 것도 처음이라 꼼꼼히 해보일 만 하다.

9. 다음 학습 계획

  • trace 함수를 구성하자.
  • event 함수를 구성하자.