격자 광선으로 만드는 3D 화면

평평한 벽이 휘어 보이는 이유

같은 광선, 다른 거리 기준. 지도에서 카메라를 옮겨 보세요.
지도 클릭: 이동 · 방향과 시야각: 설정 ☰

왜 벽이 휘어 보일까요?

문제 · 화면 가장자리의 벽이 작아진다

정면의 벽은 평평해도, 가장자리로 향하는 광선은 더 멀리 갑니다. 광선 거리 s를 그대로 벽 높이의 분모에 넣으면 가장자리가 줄어듭니다.

원인 · 필요한 값은 카메라 전방 깊이

각 화면 열은 투영 평면 위의 위치에서 광선 방향을 정합니다. 광선과 전방의 각도가 θ라면 z = s × cos θ입니다. 벽 높이 H, 픽셀 초점거리 F에 대해 화면 높이는 F × H / z입니다.

해결 · 같은 광선에 두 거리 기준 적용

두 화면은 같은 격자 탐색 결과를 씁니다. A는 s, B는 z로 나눕니다. 벽 높이는 한 칸입니다. DDA는 다음 가로·세로 경계 중 가까운 것을 골라 이동합니다. 선택한 광선의 방문 셀을 지도에 표시합니다.

비용과 모델의 범위

열 수를 늘리면 계단 모양이 줄지만 광선 검사도 늘어납니다. 이 장면은 일정 높이의 불투명 벽과 수평 카메라만 다룹니다. 방향 성분이 0인 축은 건너뛰고, 모서리 동률은 옆 두 셀도 검사해 닫힌 틈으로 처리합니다. 높이 계산은 깊이를 0.05 이상으로 제한하고 화면 밖은 잘라냅니다.

Doom의 BSP와는 무엇이 다른가요?

Doom의 공개 R_RenderBSPNode는 앞쪽 BSP 자식을 먼저 순회하고, 뒤쪽은 경계 검사 후 방문합니다. 여기의 화면 열별 격자 셀 탐색과는 입력 자료구조와 순회 단위가 다릅니다.

근거: id Software · Doom r_bsp.c ↗