mirror of
https://github.com/bloeys/gglm.git
synced 2025-12-29 13:38:20 +00:00
right/left handed LookAt functions
This commit is contained in:
@ -145,7 +145,29 @@ func NewRotMat(q *Quat) *TrMat {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func LookAt(pos, targetPos, worldUp *Vec3) *TrMat {
|
// LookAtRH does a right-handed coordinate system lookAt (RH is the default for OpenGL).
|
||||||
|
// Can be used to create the view matrix
|
||||||
|
func LookAtRH(pos, targetPos, worldUp *Vec3) *TrMat {
|
||||||
|
|
||||||
|
forward := SubVec3(targetPos, pos).Normalize()
|
||||||
|
right := Cross(forward, worldUp).Normalize()
|
||||||
|
up := Cross(right, forward)
|
||||||
|
|
||||||
|
return &TrMat{
|
||||||
|
Mat4: Mat4{
|
||||||
|
Data: [4][4]float32{
|
||||||
|
{right.Data[0], up.Data[0], -forward.Data[0], 0},
|
||||||
|
{right.Data[1], up.Data[1], -forward.Data[1], 0},
|
||||||
|
{right.Data[2], up.Data[2], -forward.Data[2], 0},
|
||||||
|
{-DotVec3(pos, right), -DotVec3(pos, up), DotVec3(pos, forward), 1},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// LookAtLH does a left-handed coordinate system lookAt.
|
||||||
|
// Can be used to create the view matrix
|
||||||
|
func LookAtLH(pos, targetPos, worldUp *Vec3) *TrMat {
|
||||||
|
|
||||||
forward := SubVec3(targetPos, pos).Normalize()
|
forward := SubVec3(targetPos, pos).Normalize()
|
||||||
right := Cross(worldUp, forward).Normalize()
|
right := Cross(worldUp, forward).Normalize()
|
||||||
@ -157,7 +179,7 @@ func LookAt(pos, targetPos, worldUp *Vec3) *TrMat {
|
|||||||
{right.Data[0], up.Data[0], forward.Data[0], 0},
|
{right.Data[0], up.Data[0], forward.Data[0], 0},
|
||||||
{right.Data[1], up.Data[1], forward.Data[1], 0},
|
{right.Data[1], up.Data[1], forward.Data[1], 0},
|
||||||
{right.Data[2], up.Data[2], forward.Data[2], 0},
|
{right.Data[2], up.Data[2], forward.Data[2], 0},
|
||||||
{-DotVec3(pos, right), -DotVec3(pos, up), DotVec3(pos, forward), 1},
|
{-DotVec3(pos, right), -DotVec3(pos, up), -DotVec3(pos, forward), 1},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
2
main.go
2
main.go
@ -180,7 +180,7 @@ func main() {
|
|||||||
camPos := gglm.NewVec3(0, 0, 3)
|
camPos := gglm.NewVec3(0, 0, 3)
|
||||||
worldUp := gglm.NewVec3(0, 1, 0)
|
worldUp := gglm.NewVec3(0, 1, 0)
|
||||||
targetPos := gglm.NewVec3(0, 0, 0)
|
targetPos := gglm.NewVec3(0, 0, 0)
|
||||||
viewMat := gglm.LookAt(camPos, targetPos, worldUp)
|
viewMat := gglm.LookAtRH(camPos, targetPos, worldUp)
|
||||||
println(viewMat.String())
|
println(viewMat.String())
|
||||||
|
|
||||||
//Mat2Col
|
//Mat2Col
|
||||||
|
|||||||
Reference in New Issue
Block a user