68 lines
1.8 KiB
Go
68 lines
1.8 KiB
Go
package render3d
|
|
|
|
import (
|
|
"aego/asset"
|
|
"aego/core/ids"
|
|
"aego/core/mathx"
|
|
"aego/gpu"
|
|
"aego/render/sprite"
|
|
)
|
|
|
|
type Camera3D struct {
|
|
FOV float32 `aego:"fov,min=1,max=179,unit=deg"`
|
|
Near float32 `aego:"near,min=0.001"`
|
|
Far float32 `aego:"far,min=0.01"`
|
|
Viewport mathx.Rect `aego:"viewport"`
|
|
Mask int64 `aego:"mask"`
|
|
Order int32 `aego:"order"`
|
|
Clear bool `aego:"clear"`
|
|
ClearColor mathx.Color `aego:"clearColor"`
|
|
Active bool `aego:"active"`
|
|
Orthographic bool `aego:"orthographic"`
|
|
OrthoSize float32 `aego:"orthoSize,min=0.01"`
|
|
}
|
|
|
|
type MeshRenderer struct {
|
|
Mesh asset.Ref[asset.Mesh] `aego:"mesh,asset=mesh"`
|
|
Texture asset.Ref[asset.Texture] `aego:"texture,asset=texture"`
|
|
Color mathx.Color `aego:"color"`
|
|
Blend sprite.BlendMode `aego:"blend"`
|
|
DoubleSided bool `aego:"doubleSided"`
|
|
Layer int32 `aego:"layer"`
|
|
Filter gpu.FilterMode `aego:"filter"`
|
|
}
|
|
|
|
type Shape struct {
|
|
Name string
|
|
Mesh ids.AssetID
|
|
}
|
|
|
|
var Shapes = []Shape{
|
|
{Name: "Cube", Mesh: asset.BuiltinCube},
|
|
{Name: "Plane", Mesh: asset.BuiltinPlane},
|
|
{Name: "Sphere", Mesh: asset.BuiltinSphere},
|
|
{Name: "Cylinder", Mesh: asset.BuiltinCylinder},
|
|
}
|
|
|
|
func DefaultCamera3D() Camera3D {
|
|
return Camera3D{
|
|
FOV: 60,
|
|
Near: 0.1,
|
|
Far: 1000,
|
|
Viewport: mathx.Rect{W: 1, H: 1},
|
|
Mask: -1,
|
|
Clear: true,
|
|
ClearColor: mathx.Color{R: 0.04, G: 0.05, B: 0.07, A: 1},
|
|
Active: true,
|
|
OrthoSize: 5,
|
|
}
|
|
}
|
|
|
|
func DefaultMeshRenderer() MeshRenderer {
|
|
return MeshRenderer{
|
|
Color: mathx.Color{R: 1, G: 1, B: 1, A: 1},
|
|
Blend: sprite.BlendOpaque,
|
|
Filter: gpu.FilterLinear,
|
|
}
|
|
}
|