치춘짱베리굿나이스
[Rank 4] Cub3D - Raycasting 구현 ③ 광선 이동거리 계산 및 보정 본문
광선 이동거리 계산 및 보정
어안렌즈 효과 방지하기
- 화면에 벽을 출력할 땐 카메라 평면 (
plane
⇒ 선) 기준으로 출력됨에도 불구하고 플레이어 기준 (pos
⇒ 점) 으로 거리를 계산하기 때문에 카메라 평면으로부터 벽까지의 거리가 제각각이 된다 - 카메라 평면의 끄트머리에 가까울 수록 벽까지의 거리가 과도하게 길어져 실제 카메라 평면까지의 거리보다 훨씬 멀게 연산되며 이는 화면의 왜곡을 초래한다
- 어안렌즈 효과를 방지하기 위해 광선이 벽에 도달했다 하더라도 광선의 이동거리를 바로 구하지 않는다
- 어안렌즈 효과를 방지한다면 플레이어 시점 (점) 이 아니라 카메라 평면 (선) 까지의 거리를 계산하므로 광선이 정확히 어느 지점에 부딪혔는지도 구할 필요가 없다
perpWallDist
- 광선의 적중 지점과 카메라 평면 사이의 수직거리
- 점과 선사이 계산 공식을 사용해도 괜찮지만, 제곱이나 루트 등의 복잡한 연산이 필요하므로 여기서는 직각삼각형의 닮음공식을 사용하여 구하도록 한다
perpWallDist 공식유도
- 예시에서는 y축과 수직인 벽 (y면) 에 충돌했다고 가정한다 (
side
= 1)
실제 perpWallDist 구하기
위의 두 수식에서 rayDirX
, rayDirY
의 값은 이미 알고 있으므로 xDist
, yDist
만 구하면 된다
'42 > 42s Cursus' 카테고리의 다른 글
[Rank 4] Cub3D - Raycasting 구현 ⑤ 키 이벤트 (0) | 2022.04.01 |
---|---|
[Rank 4] Cub3D - Raycasting 구현 ④ 화면에 벽 그리기 (0) | 2022.04.01 |
[Rank 4] Cub3D - Raycasting 구현 ② 반복문의 동작 (0) | 2022.04.01 |
[Rank 4] Cub3D - Raycasting 구현 ① 변수 설명 (0) | 2022.03.31 |
[Rank 4] Cub3D - Raycasting 기초 (2) | 2022.03.31 |
Comments