격자 광선으로 만드는 3D 화면
카메라 위치
주황색 광선 하나를 따라 셀 경계와 투영 높이를 비교합니다. 벽 안으로는 이동할 수 없습니다.
정면의 벽은 평평해도, 가장자리로 향하는 광선은 더 멀리 갑니다. 광선 거리 s를 그대로 벽 높이의 분모에 넣으면 가장자리가 줄어듭니다.
각 화면 열은 투영 평면 위의 위치에서 광선 방향을 정합니다. 광선과 전방의 각도가 θ라면 z = s × cos θ입니다. 벽 높이 H, 픽셀 초점거리 F에 대해 화면 높이는 F × H / z입니다.
두 화면은 같은 격자 탐색 결과를 씁니다. A는 s, B는 z로 나눕니다. 벽 높이는 한 칸입니다. DDA는 다음 가로·세로 경계 중 가까운 것을 골라 이동합니다. 선택한 광선의 방문 셀을 지도에 표시합니다.
열 수를 늘리면 계단 모양이 줄지만 광선 검사도 늘어납니다. 이 장면은 일정 높이의 불투명 벽과 수평 카메라만 다룹니다. 방향 성분이 0인 축은 건너뛰고, 모서리 동률은 옆 두 셀도 검사해 닫힌 틈으로 처리합니다. 높이 계산은 깊이를 0.05 이상으로 제한하고 화면 밖은 잘라냅니다.
Doom의 공개 R_RenderBSPNode는 앞쪽 BSP 자식을 먼저 순회하고, 뒤쪽은 경계 검사 후 방문합니다. 여기의 화면 열별 격자 셀 탐색과는 입력 자료구조와 순회 단위가 다릅니다.
R_RenderBSPNode