-
레이캐스팅 은 2차원 맵에서 3차원의 원근감을 만드는 렌더링 기술 입니다.
- 레이캐스팅 은 스크린의 모든 수직선에 대해 계산(calculation)만 하면 되어서 속도가 빠릅니다.
- 컴퓨터가 지금보다 느려서 3D 엔진을 실시간으로 실행할 수 없던 과거에는 레이캐스팅 이 최초의 해결책이었습니다.
-
레이캐스팅 기술을 사용한 게임 중 가장 유명한 게임은 'Wolfenstein 3D'입니다.
- Wolfenstein 3D의 레이캐스팅 엔진은 극히 제한적이어서 286컴퓨터에서도 작동했답니다.
- 하단 우측 스크린샷은 Wolf3D의 맵에디터 스크린샷인데, 모든 벽이 2D 직사각형으로 되어있고 높이마저도 다 똑같은 것을 볼 수 있습니다. 이 엔진으로는 계단, 점프 또는 높이차이와 같은 것은 구현할 수 없었습니다.
- 나중에 출시된 Doom, Duke Nukem 3D 같은 게임에서는 고급 레이캐스팅 엔진으로 기울어진 벽, 다른 높이, 질감있는 바닥/천장, 투명벽 등을 가능하게 했습니다.
- 스프라이트(sprite) 는 enemies, objects, goodies와 같은 2D 이미지를 말합니다. 이번 튜토리얼에서는 스프라이트에 대해 설명하지 않습니다.
-
레이캐스팅 은 레이트레이싱 과 다릅니다!
- 레이캐스팅(Raycasting)은 4MHz 그래픽 계산기에서도 실시간으로 작동하는 빠른 semi-3D 기술인 반면에, 레이트레이싱 (RayTracing)은 실제 3D장면의 반사, 그림자를 지원해서 현실감있는 렌더링 기술입니다.
- 나중에서야 컴퓨터가 빨라져서 꽤 높은 해상도와 복잡한 장면들을 실시간으로 처리할 수 있게되었습니다.
-
아래의 cpp파일은 레이캐스터(untextured & textured)의 코드 전체입니다. (다운로드해서 보실 수 있습니다)
- raycaster_flat.cpp
- raycaster_textured.cpp
- 2016년 2월 업데이트: 코드단순화를 지적해준 Thomas van der Berg에게 감사를 표합니다
(perpWallDist 단순화, wallX에 재사용 가능)