gwob

package module
v0.0.0-...-5decabc Latest Latest
Warning

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

Go to latest
Published: Feb 26, 2020 License: MIT Imports: 9 Imported by: 1

README

license GoDoc Go Report Card

This is a fork of the original gwob library

gwob

gwob - Pure Go Golang parser for Wavefront .OBJ 3D geometry file format

Usage

Import the package in your Go program:

import "github.com/breiting/gwob"

Example:

// Error handling omitted for simplicity.

import "github.com/udhos/gwob"

options := &gwob.ObjParserOptions{} // parser options

o, errObj := gwob.NewObjFromFile("gopher.obj", options) // parse/load OBJ

// Scan OBJ groups
for _, g := range o.Groups {
    // ...
}

Example

Run the example:

cd example
go run main.go

You can supply a custom input OBJ by setting the env var INPUT:

INPUT=gopher.obj go run main.go

If you specify any command line argument, the OBJ will be dumped to stdout:

go run main.go d

See directory example.

Documentation

See the GoDoc documentation.

Documentation

Overview

Package gwob is a pure Go parser for Wavefront .OBJ 3D geometry file format.

Example:

// Error handling omitted for simplicity.

import "github.com/breiting/gwob"

options := &gwob.ObjParserOptions{} // parser options

o, errObj := gwob.NewObjFromFile("gopher.obj", options) // parse

// Scan OBJ groups
for _, g := range o.Groups {
    // snip
}

See also: https://github.com/breiting/gwob

Index

Constants

View Source
const (
	ErrFatal    = true  // ErrFatal means fatal stream error
	ErrNonFatal = false // ErrNonFatal means non-fatal parsing error
)

Internal parsing error

Variables

This section is empty.

Functions

This section is empty.

Types

type Group

type Group struct {
	Name       string
	Smooth     int
	Usemtl     string
	IndexBegin int
	IndexCount int
}

Group holds parser result for a group.

type Material

type Material struct {
	Name  string
	MapKd string
	Kd    [3]float32
}

Material holds information for a material.

type MaterialLib

type MaterialLib struct {
	Lib map[string]*Material
}

MaterialLib stores materials.

func NewMaterialLib

func NewMaterialLib() MaterialLib

NewMaterialLib creates a new material lib.

func ReadMaterialLibFromBuf

func ReadMaterialLibFromBuf(buf []byte, options *ObjParserOptions) (MaterialLib, error)

ReadMaterialLibFromBuf parses material lib from a buffer.

func ReadMaterialLibFromFile

func ReadMaterialLibFromFile(filename string, options *ObjParserOptions) (MaterialLib, error)

ReadMaterialLibFromFile parses material lib from a file.

func ReadMaterialLibFromReader

func ReadMaterialLibFromReader(rd io.Reader, options *ObjParserOptions) (MaterialLib, error)

ReadMaterialLibFromReader parses material lib from a reader.

func ReadMaterialLibFromStringReader

func ReadMaterialLibFromStringReader(rd StringReader, options *ObjParserOptions) (MaterialLib, error)

ReadMaterialLibFromStringReader parses material lib from StringReader.

type Obj

type Obj struct {
	Indices []int
	Coord   []float32 // vertex data pos=(x,y,z) tex=(tx,ty) norm=(nx,ny,nz)
	Mtllib  string
	Groups  []*Group

	BigIndexFound  bool // index larger than 65535
	TextCoordFound bool // texture coord
	NormCoordFound bool // normal coord

	StrideSize           int // (px,py,pz),(tu,tv),(nx,ny,nz) = 8 x 4-byte floats = 32 bytes max
	StrideOffsetPosition int // 0
	StrideOffsetTexture  int // 3 x 4-byte floats
	StrideOffsetNormal   int // 5 x 4-byte floats
}

Obj holds parser result for .obj file.

func NewObjFromBuf

func NewObjFromBuf(objName string, buf []byte, options *ObjParserOptions) (*Obj, error)

NewObjFromBuf parses Obj from a buffer.

func NewObjFromFile

func NewObjFromFile(filename string, options *ObjParserOptions) (*Obj, error)

NewObjFromFile parses Obj from a file.

func NewObjFromReader

func NewObjFromReader(objName string, rd io.Reader, options *ObjParserOptions) (*Obj, error)

NewObjFromReader parses Obj from a reader.

func NewObjFromStringReader

func NewObjFromStringReader(objName string, rd StringReader, options *ObjParserOptions) (*Obj, error)

NewObjFromStringReader parses Obj from a StringReader.

func NewObjFromVertex

func NewObjFromVertex(objName string, coord []float32, indices []int) (*Obj, error)

NewObjFromVertex creates Obj from vertex data.

func (*Obj) Coord64

func (o *Obj) Coord64(i int) float64

Coord64 gets vertex data as float64.

func (*Obj) NumberOfElements

func (o *Obj) NumberOfElements() int

NumberOfElements gets the number of strides.

func (*Obj) ToFile

func (o *Obj) ToFile(filename string) error

ToFile saves OBJ to file.

func (*Obj) ToWriter

func (o *Obj) ToWriter(w io.Writer) error

ToWriter writes OBJ to writer stream.

func (*Obj) VertexCoordinates

func (o *Obj) VertexCoordinates(stride int) (float32, float32, float32)

VertexCoordinates gets vertex coordinates for a stride index.

type ObjParserOptions

type ObjParserOptions struct {
	LogStats      bool
	Logger        func(string)
	IgnoreNormals bool
}

ObjParserOptions sets options for the parser.

type StringReader

type StringReader interface {
	ReadString(delim byte) (string, error) // Example: bufio.Reader
}

StringReader is input for the parser.

Directories

Path Synopsis
Package main shows how to use the 'gwob' package to parse geometry data from OBJ files.
Package main shows how to use the 'gwob' package to parse geometry data from OBJ files.

Jump to

Keyboard shortcuts

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