벽 레이캐스팅, 스프라이트 카메라행렬에서 곧바로 이해 안됐던 부분만 기록용으로 정리 github.com/365kim/raycasting_tutorial github.com/l-yohai/cub3d/blob/master/mlx_example/sprite.md 레이캐스팅 (wall) a, b: 벡터 (a + b)^2 = |a|^2 + |b|^2 + 2 * a · b a · b = |a| * |b| * cosΘ 따라서 직각삼각형일 땐 피타고라스 가능 (a + b)^2 = |a|^2 + |b|^2 ex) |dir|^2 = |dirX|^2 + |dirY|^2 1 double dirX = -1, dirY = 0; double planeX = 0, planeY = 0.66; 방향벡터와 수직이기만 하면 변수선언 시 카..
로데브 中 텍스쳐를 이해하는 페이지. 이해했던 흐름 그대로의 정리라서 로데브 원본과 살짝 차이가 있습니다. 1. 벽 텍스쳐 2. 천장, 바닥 텍스쳐 3. 텍스쳐에 투명도 넣기 3. 텍스쳐에 투명도 넣기 앞에서 mlx에서는 0xAARRGGBB 색상 형식을 사용하고, 실제로 투명도를 지원하는 것도 확인해보았다. (위 움짤) alpha값이 있는 색상을 바로 mlx 함수로 띄웠던 경우다. 하지만 cub3d처럼 buf[y][x]에 색을 저장하는 방식에서는 투명도를 다르게 구현해야 한다. '완전 투명'한 경우를 제외하고는, 아무리 반투명한 색을 넣어도 스크린에 띄워보면 '완전 불투명'한 이미지로 출력된다. 왜냐하면 buf[y][x] = color 과정에서 기존 색상을 남겨두지 않고 그냥 새로운 색상을 덮어 씌워버리..
로데브 中 텍스쳐를 이해하는 페이지. 이해했던 흐름 그대로의 정리라서 로데브 원본과 살짝 차이가 있습니다. 1. 벽 텍스쳐 (affine texture mapping) 2. 천장, 바닥 텍스쳐 3. 텍스쳐에 투명도 넣기 1. 벽 텍스쳐 (affine texture mapping) 광선으로 벽의 높이를 구한 다음부터의 내용 int texNum = worldMap[mapX][mapY] - 1; double obj_x = (ray.side == 0) ? posY + perpWallDist * rayDirY : posX + perpWallDist * rayDistX; int img_x = (int)(img_width * (obj_x - floor(obj_x))); if (wall->type == SOUTH ||..
mlx_get_data_addr 함수를 살펴보는 페이지. 함수를 이해하는 데 필요했던 rgb, endian, bpp, 포인터 형변환 개념을 먼저 정리했습니다. mlx_get_data_addr에서 정리된 내용은 벽과 천장, rgb는 투명도 페이지에서 사용됩니다. 1. rgb 2. endian 3. bpp 4. 포인터 형변환 5. mlx_get_data_addr 1. rgb Red, Green, Blue (빨강, 초록, 파랑) 세 종류의 기본 색을 이용하여 색을 표현한다. 각각의 요소는 0 ~ 255 의 값을 가질 수 있다. 이 값은 해당 색이 얼마나 섞였는지를 나타낸다. ex) 완전 빨강: R = 255, G = 0, B = 0 완전 초록: R = 0, G = 255, B = 0 완전 파랑: R = 0, ..