func main() { glRenderer := opengl.NewOpenglRenderer("Lighting", 1920, 1080, true) gameEngine := engine.NewEngine(glRenderer) gameEngine.InitFpsDial() gameEngine.Start(func() { shader, err := assets.ImportShader("shaders/build/pbr.vert", "shaders/build/pbr.frag") if err != nil { panic("error importing shader") } gameEngine.DefaultShader(shader) fetchAssets(gameEngine, func() { setupScene(gameEngine, shader) }) // input/controller manager controllerManager := glfwController.NewControllerManager(glRenderer.Window) // camera + wasd controls freeMoveActor := actor.NewFreeMoveActor(gameEngine.Camera()) freeMoveActor.Location = mgl32.Vec3{-6, 2, -6} freeMoveActor.MoveSpeed = 1.5 mainController := controller.NewBasicMovementController(freeMoveActor, false) controllerManager.AddController(mainController.(glfwController.Controller)) gameEngine.AddUpdatable(freeMoveActor) //lock the cursor glRenderer.LockCursor(true) // custom key bindings customController := controller.CreateController() controllerManager.AddController(customController.(glfwController.Controller)) // close window and exit on escape customController.BindKeyAction(func() { glRenderer.Window.SetShouldClose(true) }, controller.KeyEscape, controller.Press) }) }
func (e *Editor) Start() { glRenderer := opengl.NewOpenglRenderer("GoEngine Editor", 1800, 900, false) e.renderer = glRenderer e.gameEngine = engine.NewEngine(e.renderer) e.gameEngine.Start(func() { shader, err := assets.ImportShader( filepath.Join(e.assetDir, "shaders/build/pbr.vert"), filepath.Join(e.assetDir, "shaders/build/pbr.frag"), ) if err != nil { panic("error importing shader") } e.gameEngine.DefaultShader(shader) // Sky cubemap skyImg, err := assets.ImportImage(filepath.Join(e.assetDir, "resources/cubemap.png")) if err == nil { geom := renderer.CreateSkyBox() geom.Transform(mgl32.Scale3D(10000, 10000, 10000)) skyNode := renderer.NewNode() skyNode.SetOrientation(mgl32.QuatRotate(1.57, mgl32.Vec3{0, 1, 0})) skyNode.Material = renderer.NewMaterial(renderer.NewTexture("diffuseMap", skyImg, false)) skyNode.RendererParams = renderer.NewRendererParams() skyNode.RendererParams.CullBackface = false skyNode.RendererParams.Unlit = true skyNode.Add(geom) e.gameEngine.AddSpatial(skyNode) // create an environmentMap using the skybox texture envCubeMap := renderer.NewCubemap("environmentMap", skyImg, true) e.gameEngine.DefaultCubeMap(envCubeMap) } l := renderer.NewLight(renderer.DIRECTIONAL) l.Color = [3]float32{0.7, 0.7, 0.8} e.gameEngine.AddLight(l) //root node e.gameEngine.AddSpatial(e.rootMapNode) //input/controller manager e.controllerManager = glfwController.NewControllerManager(glRenderer.Window) //camera + player camera := e.gameEngine.Camera() freeMoveActor := actor.NewFreeMoveActor(camera) freeMoveActor.MoveSpeed = 20.0 freeMoveActor.LookSpeed = 0.002 mainController := controller.NewBasicMovementController(freeMoveActor, true) e.controllerManager.AddController(mainController.(glfwController.Controller)) e.gameEngine.AddUpdatable(freeMoveActor) e.initSelectSprite() e.gameEngine.AddUpdatable(engine.UpdatableFunc(e.updateSelectSprite)) //editor controller e.controllerManager.AddController(NewEditorController(e).(glfwController.Controller)) //custom controller e.customController = controller.CreateController() e.controllerManager.AddController(e.customController.(glfwController.Controller)) e.setupUI() }) }
func main() { glRenderer := opengl.NewOpenglRenderer("Simple", 800, 800, false) gameEngine := engine.NewEngine(glRenderer) gameEngine.InitFpsDial() gameEngine.Start(func() { if shader, err := assets.ImportShader("shaders/build/basic.vert", "shaders/build/basic.frag"); err == nil { gameEngine.DefaultShader(shader) } // sky cube skyImg, err := assets.ImportImage("resources/cubemap.png") if err == nil { geom := renderer.CreateSkyBox() geom.Transform(mgl32.Scale3D(10000, 10000, 10000)) skyNode := renderer.NewNode() skyNode.SetOrientation(mgl32.QuatRotate(1.57, mgl32.Vec3{0, 1, 0})) skyNode.Material = renderer.NewMaterial(renderer.NewTexture("diffuseMap", skyImg, false)) skyNode.RendererParams = renderer.NewRendererParams() skyNode.RendererParams.CullBackface = false skyNode.RendererParams.Unlit = true skyNode.Add(geom) gameEngine.AddSpatial(skyNode) } // Add some light to the scene ambientLight := renderer.NewLight(renderer.AMBIENT) ambientLight.Color = [3]float32{0.3, 0.3, 0.3} gameEngine.AddLight(ambientLight) // Create a red box geometry, attach to a node, add the node to the scenegraph boxGeometry := renderer.CreateBox(10, 10) boxGeometry.SetColor(color.NRGBA{254, 0, 0, 254}) boxNode := renderer.NewNode() boxNode.RendererParams = renderer.NewRendererParams() boxNode.RendererParams.CullBackface = false boxNode.Material = renderer.NewMaterial() boxNode.SetTranslation(mgl32.Vec3{30, 0}) boxNode.Add(boxGeometry) gameEngine.AddSpatial(boxNode) // make the box spin var angle float64 gameEngine.AddUpdatable(engine.UpdatableFunc(func(dt float64) { angle += dt q := mgl32.QuatRotate(float32(angle), mgl32.Vec3{0, 1, 0}) boxNode.SetOrientation(q) })) // input/controller manager controllerManager := glfwController.NewControllerManager(glRenderer.Window) // camera + wasd controls camera := gameEngine.Camera() freeMoveActor := actor.NewFreeMoveActor(camera) freeMoveActor.Location = mgl32.Vec3{} mainController := controller.NewBasicMovementController(freeMoveActor, false) controllerManager.AddController(mainController.(glfwController.Controller)) gameEngine.AddUpdatable(freeMoveActor) //lock the cursor glRenderer.LockCursor(true) // custom key bindings customController := controller.CreateController() controllerManager.AddController(customController.(glfwController.Controller)) // close window and exit on escape customController.BindKeyAction(func() { glRenderer.Window.SetShouldClose(true) }, controller.KeyEscape, controller.Press) }) }