20210318(목) - jungcow/42Cursus GitHub Wiki
1. 학습날짜
- 2021-03-18(목)
2. 학습시간
- 16:00 ~ 20:00 (집)
3. 학습범위 및 주제
- 코드 구성 일부분
4. 동료 학습 방법
X
5. 학습 목표
- 코드 구성 일부분
6. 과제 제출 repository 주소
7. 상세 학습 내용
#main 함수
- 인자:
int argc,char *argv[]- argv로는 .rt 파일의 path가 온다.
- 기능
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 함수
- 인자: char *argv[]
- 기능:
1. 유효성 검사 (validate)
1. 필수 옵션들이 없으면 에러처리
- Resolution
- ambient light
- camera
2. 대문자 옵션이 두개 이상 나오면 에러처리
3. 각 요소마다 정확한 정보가 들어있는지 확인
- 정보의 순서
- 정보의 정해져있는 범위값
- 정보의 갯수
2. 유효성이 확인된 정보를 world에 할당 (create world) (get_next_line) (ft_split)
3. 동시에 delete world 도 생성
start_mlx 함수
- 인자: t_world *world, t_mlx *mlx
- 기능:
1. world의 크기를 대입 (해상도는 최대 현재 컴퓨터의 해상도로 맞춤)
2. init_mlx
3. new_window
4. new_image
5. addr와 bpp, line_size, endian 할당
8. 학습에 대한 총평
- 전체적인 구조를 짜고 있는데 아직까지 코드를 직접 짜며 부딪히는 문제점들이 뭐가 있는지 알 수 없어서 약간 두렵다. 하지만 이렇게 확실한 전체적인 구조를 잡고 가는 것도 처음이라 꼼꼼히 해보일 만 하다.
9. 다음 학습 계획
- trace 함수를 구성하자.
- event 함수를 구성하자.