2022-02-08 18:04:47 +04:00
2021-11-05 03:37:54 +04:00
2021-11-05 03:37:54 +04:00
2021-11-01 04:08:33 +04:00
2022-10-01 00:12:13 +04:00
2022-10-01 00:15:51 +04:00

gglm

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

gglm currently has the following:

  • 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

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 compared to similar ones because we are trying to reduce function complexity so the compiler inlines.

Description
Fast Go OpenGL/Graphics focused Mathematics library inspired by the c++ library glm (https://github.com/g-truc/glm)
Readme MIT 293 KiB
Languages
Go 100%