mirror of
https://github.com/bloeys/gglm.git
synced 2025-12-29 13:38:20 +00:00
LookAt func
This commit is contained in:
@ -1,6 +1,8 @@
|
|||||||
package gglm
|
package gglm
|
||||||
|
|
||||||
import "fmt"
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
var _ Mat = &TrMat{}
|
var _ Mat = &TrMat{}
|
||||||
var _ fmt.Stringer = &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 {
|
func NewTrMatId() *TrMat {
|
||||||
return &TrMat{
|
return &TrMat{
|
||||||
Mat4: *NewMat4Id(),
|
Mat4: *NewMat4Id(),
|
||||||
|
|||||||
7
main.go
7
main.go
@ -164,4 +164,11 @@ func main() {
|
|||||||
q1 := gglm.NewQuatEuler(gglm.NewVec3(180, 0, 0).AsRad())
|
q1 := gglm.NewQuatEuler(gglm.NewVec3(180, 0, 0).AsRad())
|
||||||
q2 := gglm.NewQuatEuler(gglm.NewVec3(0, 180, 0).AsRad())
|
q2 := gglm.NewQuatEuler(gglm.NewVec3(0, 180, 0).AsRad())
|
||||||
println(gglm.AngleQuat(q1, q2) * gglm.Rad2Deg)
|
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())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user