From 7a25aea6baef81a9dc6cc8a34009c5fcf1d39e83 Mon Sep 17 00:00:00 2001 From: bloeys Date: Fri, 14 Oct 2022 04:34:40 +0400 Subject: [PATCH] Clear stencil buffer every frame+Depth buffer viz --- engine/game.go | 2 +- main.go | 51 +++++++++++++++--------- res/models/chair.fbx | Bin 0 -> 19932 bytes res/shaders/debug-depth.glsl | 52 +++++++++++++++++++++++++ res/textures/pallete-endesga-64-1x.png | Bin 0 -> 355 bytes 5 files changed, 86 insertions(+), 19 deletions(-) create mode 100755 res/models/chair.fbx create mode 100755 res/shaders/debug-depth.glsl create mode 100755 res/textures/pallete-endesga-64-1x.png diff --git a/engine/game.go b/engine/game.go index 5eccb6c..b2fb64c 100755 --- a/engine/game.go +++ b/engine/game.go @@ -43,7 +43,7 @@ func Run(g Game, w *Window, ui nmageimgui.ImguiInfo) { g.Update() - gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) + gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT) g.Render() ui.Render(float32(width), float32(height), fbWidth, fbHeight) w.SDLWin.GLSwap() diff --git a/main.go b/main.go index d15703a..3b5d7b5 100755 --- a/main.go +++ b/main.go @@ -53,6 +53,9 @@ var ( lightPos1 = gglm.NewVec3(-2, 0, 2) lightColor1 = gglm.NewVec3(1, 1, 1) + + debugDrawDepthBuffer bool + debugDepthMat *materials.Material ) type OurGame struct { @@ -141,6 +144,7 @@ func (g *OurGame) handleWindowEvents(e sdl.Event) { cam.Update() simpleMat.SetUnifMat4("projMat", &cam.ProjMat) + debugDepthMat.SetUnifMat4("projMat", &cam.ProjMat) } } } @@ -148,18 +152,19 @@ func (g *OurGame) handleWindowEvents(e sdl.Event) { func (g *OurGame) Init() { //Create materials - simpleMat = materials.NewMaterial("Simple Mat", "./res/shaders/simple.glsl") + simpleMat = materials.NewMaterial("Simple mat", "./res/shaders/simple.glsl") + debugDepthMat = materials.NewMaterial("Debug depth math", "./res/shaders/debug-depth.glsl") //Load meshes var err error - // cubeMesh, err = meshes.NewMesh("Cube", "./res/models/Wolf.fbx", 0) - cubeMesh, err = meshes.NewMesh("Cube", "./res/models/tex-cube.fbx", 0) + cubeMesh, err = meshes.NewMesh("Cube", "./res/models/chair.fbx", 0) + // cubeMesh, err = meshes.NewMesh("Cube", "./res/models/tex-cube.fbx", 0) if err != nil { logging.ErrLog.Fatalln("Failed to load cube mesh. Err: ", err) } //Load textures - tex, err := assets.LoadTexturePNG("./res/textures/Low poly planet.png", nil) + tex, err := assets.LoadTexturePNG("./res/textures/pallete-endesga-64-1x.png", nil) if err != nil { logging.ErrLog.Fatalln("Failed to load texture. Err: ", err) } @@ -169,11 +174,10 @@ func (g *OurGame) Init() { //Movement, scale and rotation translationMat := gglm.NewTranslationMat(gglm.NewVec3(0, 0, 0)) - scaleMat := gglm.NewScaleMat(gglm.NewVec3(0.25, 0.25, 0.25)) - rotMat := gglm.NewRotMat(gglm.NewQuatEuler(gglm.NewVec3(0, 0, 0).AsRad())) + scaleMat := gglm.NewScaleMat(gglm.NewVec3(1, 1, 1)) + rotMat := gglm.NewRotMat(gglm.NewQuatEuler(gglm.NewVec3(-90, -90, 0).AsRad())) cubeModelMat.Mul(translationMat.Mul(rotMat.Mul(scaleMat))) - simpleMat.SetUnifMat4("modelMat", &cubeModelMat.Mat4) // Camera winWidth, winHeight := g.Win.SDLWin.GetSize() @@ -186,6 +190,7 @@ func (g *OurGame) Init() { float32(winWidth)/float32(winHeight), ) simpleMat.SetUnifMat4("projMat", &cam.ProjMat) + debugDepthMat.SetUnifMat4("projMat", &cam.ProjMat) updateViewMat() @@ -221,7 +226,6 @@ func (g *OurGame) Update() { //Rotating cubes if input.KeyDown(sdl.K_SPACE) { cubeModelMat.Rotate(10*timing.DT()*gglm.Deg2Rad, gglm.NewVec3(1, 1, 1).Normalize()) - simpleMat.SetUnifMat4("modelMat", &cubeModelMat.Mat4) } if imgui.DragFloat3("Cam Pos", &cam.Pos.Data) { @@ -266,21 +270,26 @@ func (g *OurGame) updateCameraPos() { update := false + var camSpeedScale float32 = 1.0 + if input.KeyDown(sdl.K_LSHIFT) { + camSpeedScale = 2 + } + // Forward and backward if input.KeyDown(sdl.K_w) { - cam.Pos.Add(cam.Forward.Clone().Scale(camSpeed * timing.DT())) + cam.Pos.Add(cam.Forward.Clone().Scale(camSpeed * camSpeedScale * timing.DT())) update = true } else if input.KeyDown(sdl.K_s) { - cam.Pos.Add(cam.Forward.Clone().Scale(-camSpeed * timing.DT())) + cam.Pos.Add(cam.Forward.Clone().Scale(-camSpeed * camSpeedScale * timing.DT())) update = true } // Left and right if input.KeyDown(sdl.K_d) { - cam.Pos.Add(gglm.Cross(&cam.Forward, &cam.WorldUp).Normalize().Scale(camSpeed * timing.DT())) + cam.Pos.Add(gglm.Cross(&cam.Forward, &cam.WorldUp).Normalize().Scale(camSpeed * camSpeedScale * timing.DT())) update = true } else if input.KeyDown(sdl.K_a) { - cam.Pos.Add(gglm.Cross(&cam.Forward, &cam.WorldUp).Normalize().Scale(-camSpeed * timing.DT())) + cam.Pos.Add(gglm.Cross(&cam.Forward, &cam.WorldUp).Normalize().Scale(-camSpeed * camSpeedScale * timing.DT())) update = true } @@ -291,16 +300,21 @@ func (g *OurGame) updateCameraPos() { func (g *OurGame) Render() { - tempModelMat := cubeModelMat.Clone() - // window.Rend.Draw(cubeMesh, tempModelMat, simpleMat) + matToUse := simpleMat + imgui.Checkbox("Debug depth buffer", &debugDrawDepthBuffer) + if debugDrawDepthBuffer { + matToUse = debugDepthMat + } - rowSize := 10 + tempModelMatrix := cubeModelMat.Clone() + + rowSize := 1 for y := 0; y < rowSize; y++ { for x := 0; x < rowSize; x++ { - tempModelMat.Translate(gglm.NewVec3(-1, 0, 0)) - window.Rend.Draw(cubeMesh, tempModelMat, simpleMat) + tempModelMatrix.Translate(gglm.NewVec3(-1, 0, 0)) + window.Rend.Draw(cubeMesh, tempModelMatrix, matToUse) } - tempModelMat.Translate(gglm.NewVec3(float32(rowSize), -1, 0)) + tempModelMatrix.Translate(gglm.NewVec3(float32(rowSize), -1, 0)) } g.Win.SDLWin.SetTitle(fmt.Sprint("nMage (", timing.GetAvgFPS(), " fps)")) @@ -316,4 +330,5 @@ func (g *OurGame) DeInit() { func updateViewMat() { cam.Update() simpleMat.SetUnifMat4("viewMat", &cam.ViewMat) + debugDepthMat.SetUnifMat4("viewMat", &cam.ViewMat) } diff --git a/res/models/chair.fbx b/res/models/chair.fbx new file mode 100755 index 0000000000000000000000000000000000000000..bf74ece13800098cfdd361756f03152f102b7549 GIT binary patch literal 19932 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