// Set up orbit control for the camera camera.NewOrbitControl(cam)
// Set up callback to update viewport and camera aspect ratio when the window is resized 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)
// Create a blue torus and add it to the scene geom := geometry.NewTorus(1, .4, 12, 32, math32.Pi*2) mat := material.NewStandard(math32.NewColor("DarkBlue")) mesh := graphic.NewMesh(geom, mat) scene.Add(mesh)
// Create and add a button to the scene 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)
// Create and add lights to the scene 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)
// Create and add an axis helper to the scene scene.Add(helper.NewAxes(0.5))
// Set background color to gray a.Gls().ClearColor(0.5, 0.5, 0.5, 1.0)
// Run the application 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) }) }