A Go module for rendering Wavefront OBJ files (with MTL material support) to PNG images using software rasterization.
created by tigwen
go get github.com/mlctrez/obj2pngRequires Go 1.21 or later.
- fogleman/fauxgl — software 3D rendering
- nfnt/resize — image downsampling for antialiasing
package main
import (
"log"
"github.com/mlctrez/obj2png"
)
func main() {
options := obj2png.DefaultRenderOptions()
if err := obj2png.Render("model.obj", "model.png", options); err != nil {
log.Fatal(err)
}
}options := obj2png.DefaultRenderOptions()
err := obj2png.Render("model.obj", "front_left.png", options, obj2png.ViewFrontLeft)| Constant | Description |
|---|---|
ViewFrontRight |
Front-right elevated (default) |
ViewFrontLeft |
Front-left elevated |
ViewFront |
Front center elevated |
ViewRight |
Right side elevated |
ViewLeft |
Left side elevated |
ViewBackRight |
Back-right elevated |
ViewBackLeft |
Back-left elevated |
ViewBack |
Back center elevated |
ViewTop |
Directly above |
options := obj2png.RenderOptions{
Width: 1024,
Height: 1024,
Scale: 2,
Fovy: 30,
Near: 1,
Far: 10,
Eye: fauxgl.V(3, 3, 3),
Center: fauxgl.V(0, 0, 0),
Up: fauxgl.V(0, 1, 0),
Light: fauxgl.V(1.5, 2.7, 1.5).Normalize(),
}
err := obj2png.Render("model.obj", "model_hires.png", options)Note: when a ViewAngle is provided, it overrides the Eye field in options.
A command-line tool is included in cmd/main.go for batch rendering directories of OBJ files with index page generation.
# single file
go run ./cmd model.obj output.png
# directory of OBJ files
go run ./cmd ./models ./output
# skip specific directories
go run ./cmd -skip=archive,temp ./models ./output