Reddit

12 years ago I wrote a Wolfenstein 3D clone from scratch in Go (No engine, just OpenGL + Custom Physics)

12년 전 Go로 처음부터 만든 Wolfenstein 3D 클론 — 게임 엔진 없이 OpenGL과 자체 물리 엔진만으로

Go 언어로 게임 엔진 없이 처음부터 작성한 Wolfenstein 3D 클론 gowolfenstein이 공개됐습니다. Unity나 Godot 같은 외부 엔진 없이 raw OpenGL(go-gl)만을 의존성으로 사용하며, 레이캐스팅(raycasting) 렌더링과 충돌 감지를 포함한 자체 물리 엔진을 직접 구현했습니다. 12년 전 개인 테스트 프로젝트로 시작해 90년대 FPS의 향수를 재현한 점이 특징입니다.

본문

Go 생태계에서 게임 개발은 상대적으로 드문 영역이지만, 이 프로젝트는 외부 게임 엔진 없이 Go만으로 2.5D FPS를 구현할 수 있음을 보여주는 사례입니다. 저자 markel1974가 12년 전 개인 테스트 프로젝트로 시작한 gowolfenstein은 Wolfenstein 3D 스타일의 레이캐스팅 엔진을 처음부터 직접 작성한 결과물로, 유일한 실질적 의존성은 go-gl을 통한 raw OpenGL 바인딩뿐입니다.

아키텍처와 주요 기능

엔진은 세 부분으로 구성됩니다. game/ 디렉터리에 레이캐스팅 메커니즘, 물리, 월드 상태, 미니맵, 엔티티, 무기를 포함한 코어 게임 루프와 엔진 로직이 들어 있고, pixels/ 디렉터리에는 OpenGL 위에서 셰이더, 행렬, 스프라이트, 윈도우 생성을 처리하는 자체 2D 그래픽 프레임워크 래퍼가 있습니다. build/에는 빌드 산출물과 바이너리, 게임 리소스가, bloob/에는 스크린샷과 미디어 자산이 있습니다. 물리 엔진은 충돌 감지와 동적 이동을 처리하며, 클래식 픽셀아트 그래픽과 텍스처, 라이팅 효과로 레트로 감성을 재현합니다. 미니맵, 문, 무기, 동적 엔티티 같은 상호작용 요소도 동작합니다.

실행 방법과 조작

Go 1.16 이상과 C 컴파일러(GCC 또는 Clang), OS별 OpenGL 개발 헤더가 필요합니다. 저장소를 클론한 뒤 game/ 디렉터리에서 go build로 빌드하거나 build/의 사전 빌드 바이너리를 사용할 수 있습니다. 커맨드라인 플래그로 해상도와 스케일, 전체화면 모드를 조정할 수 있으며 기본 해상도는 495x270에 스케일 2.0입니다. WASD/화살표로 이동, 마우스로 시점 회전, Space와 좌클릭으로 발사, J/K/L로 무기 전환, Shift로 달리기, P로 발차기, Tab으로 문 열기, 숫자 1/2로 라이팅 효과 토글, M/N으로 미니맵과 마우스 비활성화를 지원합니다.

의의

이 프로젝트의 가치는 단순한 클론 게임이 아니라, Go에서 저수준 그래픽스 파이프라인부터 물리 시뮬레이션까지 전 과정을 직접 구현했다는 데 있습니다. 90년대 FPS가 사용한 레이캐스팅 기법과 자체 물리 엔진의 구조를 살펴볼 수 있는 교육적 자료이기도 합니다.

Reddit 반응

  • @rzhnrdt — 멋진 프로젝트라며, 같은 저자의 다른 프로젝트인 godoom과 공통 구조가 있어 보이니 별도 프로젝트로 분리해 보는 것을 제안했고, 42 학교 출신인지도 물었습니다.
  • @xplosm — 'Golfestein 3D'로 이름 짓고 총 대신 골프채를 쓰게 했으면 좋았을 것이라는 농담을 남겼습니다.

원문: GitHub / 번역·요약: Trawling