행별 바닥 투영 · MODE 7

평면 지도가 멀어지는 도로로 보일 때

한 장의 지도를 전역 아핀·행별 투영·3D 광선 교차로 읽고, 선택한 행이 지도에서 가져오는 선을 비교하세요.

선택 행 전방 거리 t계산 중
한 픽셀의 맵 간격계산 중
중앙 픽셀의 맵 좌표계산 중

원인과 해결

문제와 원인

전역 아핀 변환은 화면 어디서나 같은 맵 간격을 사용합니다. 원근 바닥에서는 가까운 행과 먼 행의 간격이 달라야 합니다. 같은 화면 행 안에서는 일정한 증가량으로 읽되, 행마다 시작점과 증가량을 새로 계산합니다.

투영식과 비교

수평 바닥과 수평 카메라에서 t = F × H / (y − y₀), s = (x − cₓ) × t / F입니다. 오른쪽의 행별 식과 카메라 광선을 바닥 y=0에 교차시키는 방식은 같은 좌표를 돌려줍니다. 아래 지도에서 선택 행의 표본 선을 확인하세요.

비용과 범위

지평선에서는 교차점이 없고 먼 바닥의 읽기 범위가 급격히 커집니다. 지도 밖 처리와 최대 거리를 따로 정합니다. 높이 기둥은 별도 3D 정점을 투영해 얹으므로 높이·가림 처리가 추가됩니다. 이것은 SNES 레지스터·HDMA·주사선 타이밍의 에뮬레이션이 아닌 핀홀 카메라와 맵 샘플 모델입니다. 임의 pitch·roll과 높이 지형은 지원하지 않습니다.

bsnes Mode 7 구현 · 닌텐도 개발자 회고 · Godot 투영 종류