원문 캡처 · github.com
원문 캡처 · github.com

terminal-3d-graphics는 Haskell로 만든 3D 엔진으로, 터미널에 장면을 그린다. 키보드로 세계를 돌아다닐 수 있으며 Linux와 Windows에서 작동한다. 제작자는 이 엔진을 라이브러리로도 제공해 사용자가 직접 3D 세계를 만들 수 있다고 설명한다.

ANSI 트루컬러와 반 블록 문자(▀)를 사용해 문자 칸 하나에 위아래로 픽셀 두 개를 표시한다. 포털을 통한 재귀 시점, 후처리 선택, 슈퍼샘플링 안티앨리어싱을 지원하며 여러 데모 세계와 화면 크기 조절 기능도 제공한다. 이동은 키를 입력한 뒤 엔터를 눌러 조작한다. 프로그램에서 번역을 선택할 수 있고, 자동 빌드 파이프라인은 x64 Linux와 Windows용 버전을 만든다.

포털 데모 이미지, 체스 데모 이미지, 무지개 데모 이미지를 확인할 수 있다.

Cabal로 데모를 빌드하고 실행하려면 다음 명령을 사용한다.

sh
cabal build all
cabal run t3d

인터프리터로 실행하는 방법은 다음과 같다.

sh
ghci -isrc -iapp -package parallel -package bytestring -package transformers -package array -package deepseq -package comonad -package process app/Main.hs
:main

라이브러리로 사용하려면 프로젝트의 your-project.cabal에 의존성을 추가한다.

cabal
build-depends: terminal-3d-graphics

Haskell 소스에서 가져오기와 간단한 사용 예시는 다음과 같다.

haskell
import Terminal3D
import Control.Monad.Trans.State (evalStateT)

main :: IO ()
main = do
 tex <- readBMP "myTexture.bmp"
 let tris = cubeFormer (texWallFormer tex)
 lights = [Ray (Vec3 0.5 1 0.5), Ambient 0.3]
 world = World (map (bakeLight lights) tris) Nothing
 evalStateT (loop world) def