From 92a3ca3a9c80f9ea4e5b989ac1e7cdc0f1b603d5 Mon Sep 17 00:00:00 2001 From: bloeys Date: Sun, 7 Nov 2021 04:47:53 +0400 Subject: [PATCH] LookAt func --- gglm/transform.go | 22 +++++++++++++++++++++- main.go | 7 +++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/gglm/transform.go b/gglm/transform.go index 2045340..bdadc33 100755 --- a/gglm/transform.go +++ b/gglm/transform.go @@ -1,6 +1,8 @@ package gglm -import "fmt" +import ( + "fmt" +) var _ Mat = &TrMat{} var _ fmt.Stringer = &TrMat{} @@ -96,6 +98,24 @@ func NewRotMat(q *Quat) *TrMat { } } +func LookAt(pos, targetPos, worldUp *Vec3) *TrMat { + + forward := SubVec3(targetPos, pos).Normalize() + right := Cross(worldUp, forward).Normalize() + up := Cross(forward, right) + + return &TrMat{ + Mat4: Mat4{ + Data: [16]float32{ + right.Data[0], right.Data[1], right.Data[2], -DotVec3(pos, right), + up.Data[0], up.Data[1], up.Data[2], -DotVec3(pos, up), + forward.Data[0], forward.Data[1], forward.Data[2], -DotVec3(pos, forward), + 0, 0, 0, 1, + }, + }, + } +} + func NewTrMatId() *TrMat { return &TrMat{ Mat4: *NewMat4Id(), diff --git a/main.go b/main.go index dadeae7..499d510 100755 --- a/main.go +++ b/main.go @@ -164,4 +164,11 @@ func main() { q1 := gglm.NewQuatEuler(gglm.NewVec3(180, 0, 0).AsRad()) q2 := gglm.NewQuatEuler(gglm.NewVec3(0, 180, 0).AsRad()) println(gglm.AngleQuat(q1, q2) * gglm.Rad2Deg) + + //LookAt + camPos := gglm.NewVec3(0, 0, 3) + worldUp := gglm.NewVec3(0, 1, 0) + targetPos := gglm.NewVec3(0, 0, 0) + viewMat := gglm.LookAt(camPos, targetPos, worldUp) + println(viewMat.String()) }