1 Commits

Author SHA1 Message Date
92a3ca3a9c LookAt func 2021-11-07 04:47:53 +04:00
2 changed files with 28 additions and 1 deletions

View File

@ -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(),

View File

@ -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())
}