/
camera.go
executable file
·36 lines (29 loc) · 1.07 KB
/
camera.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package lux
import (
glm "github.com/go-gl/mathgl/mgl32"
)
//Camera contains a view and projection matrix.
type Camera struct {
View glm.Mat4
Projection glm.Mat4
Pos glm.Vec3
}
//SetPerspective sets the projection to perspective.
func (c *Camera) SetPerspective(angle, ratio, zNear, zFar float32) {
c.Projection = glm.Perspective(angle, ratio, zNear, zFar)
}
func (c *Camera) SetOrtho(left, right, bottom, top, near, far float32) {
c.Projection = glm.Ortho(left, right, bottom, top, near, far)
}
//func to project from 2d to 3d
//func to project from 3d to 2d
//LookAtval sets the camera view direction by value.
func (c *Camera) LookAtval(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ float32) {
c.View = glm.LookAt(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ)
c.Pos[0], c.Pos[1], c.Pos[2] = eyeX, eyeY, eyeZ
}
//LookAtVec sets the camera view direction by vectors.
func (c *Camera) LookAtVec(eye, center, up *glm.Vec3) {
c.View = glm.LookAt(eye[0], eye[1], eye[2], center[0], center[1], center[2], up[0], up[1], up[2])
c.Pos = *eye
}