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