obj

package
v0.3.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 28, 2024 License: BSD-2-Clause Imports: 17 Imported by: 1

Documentation

Overview

Package obj is used to parse the Wavefront OBJ file format (*.obj), including associated materials (*.mtl). Not all features of the OBJ format are supported. Basic format info: https://en.wikipedia.org/wiki/Wavefront_.obj_file

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Decoder

type Decoder struct {
	Objects   []Object             // decoded objects
	Matlib    string               // name of the material lib
	Materials map[string]*Material // maps material name to object
	Vertices  math32.ArrayF32      // vertices positions array
	Normals   math32.ArrayF32      // vertices normals
	Uvs       math32.ArrayF32      // vertices texture coordinates
	Warnings  []string             // warning messages
	// contains filtered or unexported fields
}

Decoder contains all decoded data from the obj and mtl files

func Decode

func Decode(objpath string, mtlpath string) (*Decoder, error)

Decode decodes the specified obj and mtl files returning a decoder object and an error. Passing an empty string (or otherwise invalid path) to mtlpath will cause the decoder to check the 'mtllib' file in the OBJ if present, and fall back to a default material as a last resort.

func DecodeReader

func DecodeReader(objreader, mtlreader io.Reader) (*Decoder, error)

DecodeReader decodes the specified obj and mtl readers returning a decoder object and an error if a problem was encoutered while parsing the OBJ.

Pass a valid io.Reader to override the materials defined in the OBJ file, or `nil` to use the materials listed in the OBJ's "mtllib" line (if present), a ".mtl" file with the same name as the OBJ file if presemt, or a default material as a last resort. No error will be returned for problems with materials--a gray default material will be used if nothing else works.

func (*Decoder) NewGeometry

func (dec *Decoder) NewGeometry(obj *Object) (*geometry.Geometry, error)

NewGeometry generates and returns a geometry from the specified object

func (*Decoder) NewGroup

func (dec *Decoder) NewGroup() (*core.Node, error)

NewGroup creates and returns a group containing as children meshes with all the decoded objects. A group is returned even if there is only one object decoded.

func (*Decoder) NewMesh

func (dec *Decoder) NewMesh(obj *Object) (*graphic.Mesh, error)

NewMesh creates and returns a mesh from an specified decoded object.

type Face

type Face struct {
	Vertices []int  // Indices to the face vertices
	Uvs      []int  // Indices to the face UV coordinates
	Normals  []int  // Indices to the face normals
	Material string // Material name
	Smooth   bool   // Smooth face
}

Face contains all information about an object face

type Material

type Material struct {
	Name       string       // Material name
	Illum      int          // Illumination model
	Opacity    float32      // Opacity factor
	Refraction float32      // Refraction factor
	Shininess  float32      // Shininess (specular exponent)
	Ambient    math32.Color // Ambient color reflectivity
	Diffuse    math32.Color // Diffuse color reflectivity
	Specular   math32.Color // Specular color reflectivity
	Emissive   math32.Color // Emissive color
	MapKd      string       // Texture file linked to diffuse color
}

Material contains all information about an object material

type Object

type Object struct {
	Name  string // Object name
	Faces []Face // Faces
	// contains filtered or unexported fields
}

Object contains all information about one decoded object

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL