gglm

command module
v0.50.0 Latest Latest
Warning

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

Go to latest
Published: May 14, 2024 License: MIT Imports: 2 Imported by: 0

README

gglm

Tests

Fast OpenGL/Graphics focused Mathematics library in Go inspired by the c++ library glm.

gglm currently has the following:

  • Matrices are stored column major
  • Vec2, Vec3 and Vec4 structs that implement vector (x,y,z,w) operations
  • Mat2, Mat3, Mat4 structs that implement square matrix operations
  • Quat struct that implements quaternion operations
  • TrMat struct that implements 3D transformation matrix operations
  • Many useful geometric functions (e.g. dot product, cross product, vector reflection etc)
  • 32-bit scalar operations (e.g. sin32, cos32, equality using epsilon, sqrt32 etc)
  • Useful 32-bit constants (e.g. pi, Deg2Rad, Rad2Deg, float32 epsilon etc)
  • Simple 'swizzle' interfaces that allow you to do things like .X() or .R() etc.
  • Very easy to use with graphics/native APIs as everything is implemented using arrays
  • .String() functions on all types for pretty printing

Installation

Note: gglm requires Go 1.18 or higher.

go get github.com/bloeys/gglm

Usage

import "github.com/bloeys/gglm/gglm"

func main() {
	
	// Vec2
	v1 := &gglm.Vec2{Data: [2]float32{1, 2}}
	v2 := &gglm.Vec2{Data: [2]float32{3, 4}}
	println(gglm.DistVec2(v1, v2))
	println(gglm.SqrDistVec2(v2, v1))
	println(v1.Eq(v2))
	v2.Set(1, 2)
	println(v1.Eq(v2))

	// This performs: v1 += v2
	// v1 is returned from the function, so we can chain calls that operate on v1
	newX := v1.Add(v2).X()
	println("newX:", newX)

	// LookAt for a right-handed coordinate system
	camPos := gglm.NewVec3(0, 0, 3)
	worldUp := gglm.NewVec3(0, 1, 0)
	targetPos := gglm.NewVec3(0, 0, 0)
	viewMat := gglm.LookAtRH(camPos, targetPos, worldUp)
	println(viewMat.String())
}

Notes

You can check compiler inlining decisions using go run -gcflags "-m" .. Some functions look a bit weird because we are trying to reduce function complexity so the compiler inlines.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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