Golang 패스 트레이싱 엔진 pt 라이브러리 알아보기
오늘은 Golang으로 패스 트레이싱 엔진을 구현한 pt 라이브러리를 알아보려 합니다.
pt 설치
우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.
맥에서 brew로 쉽게 설치할 수 있습니다.
brew install go
우분투에서도 apt로 쉽게 설치할 수 있습니다.
sudo apt-get install golang-go
맥에서 Golang의 버전을 올리려면 brew를 이용합니다.
brew upgrade go
우분투에서도 Golang의 버전을 올리려면 backports 저장소를 등록하고 apt를 이용합니다.
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go
go get으로 pt 패키지를 설치합니다.
go get -u github.com/fogleman/pt/pt
홈의 go 폴더에 pt 소스코드와 패키지 파일이 생성됩니다.
예제
package main
해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.
import (
"image/png"
"os"
"github.com/fogleman/pt/pt"
)
이미지 파일을 저장할 png, os 그리고 pt를 가져옵니다.
func main() {
scene := pt.Scene{}
scene을 생성합니다.
material := pt.DiffuseMaterial(pt.White)
plane := pt.NewPlane(pt.V(0, 0, 0), pt.V(0, 0, 1), material)
scene.Add(plane)
sphere := pt.NewSphere(pt.V(0, 0, 1), 1, material)
scene.Add(sphere)
material을 만들고, 그 기반으로 바닥과 구체도 생성합니다.
light := pt.NewSphere(pt.V(0, 0, 5), 1, pt.LightMaterial(pt.White, 10))
scene.Add(light)
구형 광원도 생성해서 화면에 잡히는 반사 효과를 나타냅니다.
camera := pt.LookAt(pt.V(3, 3, 3), pt.V(0, 0, 0.5), pt.V(0, 0, 1), 50)
카메라를 위치합니다.
defaultSampler := pt.NewSampler(256, 256)
renderer := pt.NewRenderer(&scene, &camera, defaultSampler, 800, 600)
Sampler로 랜더링합니다.
file, err := os.Create("output.png")
if err != nil {
panic(err)
}
err = png.Encode(file, renderer.Render())
if err != nil {
panic(err)
}
}
랜더링하고 png 파일로 인코딩합니다.
Written on September 15, 2019