- 操作系统:win 11
- go version:go1.21.5 windows/amd64
- g3n版本:github.com/g3n/engine v0.2.0
- 其他:找了下golang 3d相关的库,目前好像就这个比较活跃
We tested the Windows build using the mingw-w64 toolchain (you can download this file in particular).
bin
、include
、lib
)git clone https://github.com/g3n/engine g3n-engine
同样添加下环境变量install
了cd g3n-engine
go install ./...
package main
import (
"time"
"github.com/g3n/engine/app"
"github.com/g3n/engine/camera"
"github.com/g3n/engine/core"
"github.com/g3n/engine/geometry"
"github.com/g3n/engine/gls"
"github.com/g3n/engine/graphic"
"github.com/g3n/engine/gui"
"github.com/g3n/engine/light"
"github.com/g3n/engine/material"
"github.com/g3n/engine/math32"
"github.com/g3n/engine/renderer"
"github.com/g3n/engine/util/helper"
"github.com/g3n/engine/window"
)
func main() {
// 创建app
a := app.App()
// 创建scene
scene := core.NewNode()
// 设置gui控制器
gui.Manager().Set(scene)
// 创建相机
cam := camera.New(1)
cam.SetPosition(0, 0, 3)
scene.Add(cam)
// 初始化相机控制器
camera.NewOrbitControl(cam)
// 设置窗口回调
onResize := func(evname string, ev interface{}) {
// Get framebuffer size and update viewport accordingly
width, height := a.GetSize()
a.Gls().Viewport(0, 0, int32(width), int32(height))
// Update the camera's aspect ratio
cam.SetAspect(float32(width) / float32(height))
}
a.Subscribe(window.OnWindowSize, onResize)
onResize("", nil)
// 添加一个蓝色甜甜圈
geom := geometry.NewTorus(1, .4, 12, 32, math32.Pi*2)
mat := material.NewStandard(math32.NewColor("DarkBlue"))
mesh := graphic.NewMesh(geom, mat)
scene.Add(mesh)
// 添加一个改变甜甜圈颜色的按钮
btn := gui.NewButton("Make Red")
btn.SetPosition(100, 40)
btn.SetSize(40, 40)
btn.Subscribe(gui.OnClick, func(name string, ev interface{}) {
mat.SetColor(math32.NewColor("DarkRed"))
})
scene.Add(btn)
// 添加光照
scene.Add(light.NewAmbient(&math32.Color{1.0, 1.0, 1.0}, 0.8))
pointLight := light.NewPoint(&math32.Color{1, 1, 1}, 5.0)
pointLight.SetPosition(1, 0, 2)
scene.Add(pointLight)
// 添加坐标系显示
scene.Add(helper.NewAxes(0.5))
// 设置灰色背景色
a.Gls().ClearColor(0.5, 0.5, 0.5, 1.0)
// 运行应用
a.Run(func(renderer *renderer.Renderer, deltaTime time.Duration) {
a.Gls().Clear(gls.DEPTH_BUFFER_BIT | gls.STENCIL_BUFFER_BIT | gls.COLOR_BUFFER_BIT)
renderer.Render(scene, cam)
})
}
go mod init test
go mod tidy
go run main.go