설명에 앞서
해당 코드들은 Lodev.com 의 'Lode's Computer Graphics Tutorial--Raycasting'의 코드를 42 스타일에 맞게 옮긴 것이며,
코드 전체는 yohlee님의 코드 를,
Lodev 사이트 해석은 mihykim님의 해석을,
수학적 지식 이해는:
minckim님의 레포 내 pdf 파일 그리고
Ii2r 전문을 참고하였다.
(다섯 분 모두 감사드립니다.)
현재 여러분은 갈림길에 서 있다.
mandatory 파트가 아닌 천장, 바닥에 texture를 줄 것인가,
아니면 그냥 색깔 하나를 칠해버릴 것인가.
필자는 lodev의 글로부터 천장과 바닥을 칠하는 코드가 직관적으로 무슨 코드인지 이해해보려다가,
머리가 아파서 색깔 칠하는 것으로 변경했다.
그래서 당연히 아래코드는 바닥과 천장에 색을 칠하는 코드이다.
이번에는 변경 사항이 calculateAndSaveToMap 밑에 이중 for문 하나 뿐이다.
원리는 화면 가운데를 기점으로 아래위로 서로 다른 색을 버퍼에 넣어둔 뒤, 나머지를 버퍼에 덮어 씌워서 천장과 바닥을 나타내는 것이다.
코드
int calculateAndSaveToMap(t_info *info)
{
/*
나중에 화면에 올릴 buf의 위에서부터 아래로, 아래서부터 위로 다른 색상을 칠해준다.
이렇게하면 가운데에서 다시 buf에 서로 다른 색상을 담는 비효율이 있지만,
속도면에서 크게 장애가 되지 않는니 그냥 써주려고 한다.
*/
for (int x = 0; x < screenWidth; x++)
{
for (int y = 0; y < screenHeight; y++)
{
info->buf[y][x] = 0xFFFFFF;
info->buf[screenHeight - y - 1][x] = 0x000000;
// buf[screenHeight - 1 ~ screenHeight - screenHeight][x] 를 칠해줌.
}
}
...
}
코드 실행
해당 코드를 돌려보면,
(gcc -L./ -lmlx -framework OpenGL -framework Appkit main.c)
이제 화면이 깨지지 않는다.
자, 이제 스프라이트로 넘어가자.
스프라이트에 대한 정보는 아래 링크를 확인하자
lodev.org/cgtutor/raycasting3.html
'Code 42 > miniLibX, 3서클' 카테고리의 다른 글
cub3D 1인칭 3D 그래픽 띄워보기 part3.(img_textured) (0) | 2020.10.25 |
---|---|
cub3D 1인칭 3D 그래픽 띄워보기 part2.(textured) (0) | 2020.10.25 |
cub3D 1인칭 3D 그래픽 띄워보기(part1. untextured) (1) | 2020.10.24 |
MiniLibX 파헤치기 (2) | 2020.10.21 |
cub3D 과제 해석 (0) | 2020.03.09 |
최근댓글