From 12433458cccacbbbcd183befdd10955359c309a9 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Sun, 8 May 2016 20:41:49 +0200 Subject: [PATCH] Added depth test function and 3D demo. --- demo/model/model.go | 66 +++++++++++++++++++++++++++++++++++++++++++++ game.go | 9 +++++++ 2 files changed, 75 insertions(+) create mode 100644 demo/model/model.go diff --git a/demo/model/model.go b/demo/model/model.go new file mode 100644 index 0000000..4a03584 --- /dev/null +++ b/demo/model/model.go @@ -0,0 +1,66 @@ +package main + +import ( + "github.com/DeKugelschieber/go-game" +) + +const ( + assets_dir = "src/github.com/DeKugelschieber/go-game/demo/model/assets" +) + +type Game struct { + model *goga.Model +} + +func (g *Game) Setup() { + // load texture and ply mesh + err := goga.LoadResFromFolder(assets_dir) + + if err != nil { + panic(err) + } + + // create model + tex, err := goga.GetTex("cube.png") + + if err != nil { + panic(err) + } + + ply, err := goga.GetPly("cube.ply") + + if err != nil { + panic(err) + } + + mesh := goga.NewMesh(ply.IndexBuffer, ply.VertexBuffer, ply.TexCoordBuffer) + + model := goga.NewModel(mesh, tex) + renderer, ok := goga.GetSystemByName("modelRenderer").(*goga.ModelRenderer) + + if !ok { + panic("Could not find renderer") + } + + renderer.Prepare(model) + renderer.Add(model.Actor, model.Pos3D, model.Tex, model.Mesh) + g.model = model + + // enable depth test and buffer + goga.EnableDepthTest(true) + goga.ClearDepthBuffer(true) +} + +func (g *Game) Update(delta float64) { + // update rotation on each frame around upper axis + g.model.Rot.Z += delta * 45 +} + +func main() { + game := Game{} + options := goga.RunOptions{ClearColor: goga.Vec4{1, 1, 1, 0}, + Resizable: true, + SetViewportOnResize: true, + ExitOnClose: true} + goga.Run(&game, &options) +} diff --git a/game.go b/game.go index fff4588..de256eb 100644 --- a/game.go +++ b/game.go @@ -392,6 +392,15 @@ func EnableAlphaBlending(enable bool) { } } +// Enables/Disables depth test. +func EnableDepthTest(enable bool) { + if enable { + gl.Enable(gl.DEPTH_TEST) + } else { + gl.Disable(gl.DEPTH_TEST) + } +} + // Sets GL viewport and updates default resources and systems. func SetViewport(x, y, width, height int32) { viewportWidth = int(width)