zworld/engine/renderapi/args.go
2024-01-14 22:56:06 +08:00

59 lines
1.2 KiB
Go

package renderapi
import (
"zworld/engine/renderapi/color"
"zworld/plugins/math/mat4"
"zworld/plugins/math/transform"
"zworld/plugins/math/vec2"
"zworld/plugins/math/vec3"
)
// Args holds the arguments used to perform a draw pass.
// Includes the various transformation matrices and position of the camera.
type Args struct {
Frame int
Time float32
Delta float32
VP mat4.T
VPInv mat4.T
MVP mat4.T
Projection mat4.T
View mat4.T
ViewInv mat4.T
Transform mat4.T
Position vec3.T
Forward vec3.T
Fov float32
Near float32
Far float32
Viewport Screen
Clear color.T
}
type Screen struct {
Width int
Height int
Scale float32
}
func (s Screen) Size() vec2.T {
return vec2.NewI(s.Width, s.Height)
}
func (s Screen) NormalizeCursor(cursor vec2.T) vec2.T {
return cursor.Div(s.Size()).Sub(vec2.New(0.5, 0.5)).Scaled(2)
}
// Apply the effects of a transform
func (d Args) Apply(t mat4.T) Args {
d.Transform = d.Transform.Mul(&t)
d.MVP = d.VP.Mul(&d.Transform)
return d
}
func (d Args) Set(t transform.T) Args {
d.Transform = t.Matrix()
d.MVP = d.VP.Mul(&d.Transform)
return d
}