From 6a3b02dc9dcea70acf2fba2a489e3b56a4f4aae4 Mon Sep 17 00:00:00 2001 From: Warwick Date: Thu, 18 Aug 2022 11:51:41 +0100 Subject: [PATCH] Added some debug tools so I'm ready to start filling in the marching cube table. --- data/game-models | 2 +- src/MarchingCubeChunkRenderer.cpp | 2 +- src/MarchingCubeChunkRenderer.h | 11 +++++ src/main.cpp | 68 ++++++++++++++++++++----------- 4 files changed, 57 insertions(+), 26 deletions(-) diff --git a/data/game-models b/data/game-models index d1d1c19..a3ca0c2 160000 --- a/data/game-models +++ b/data/game-models @@ -1 +1 @@ -Subproject commit d1d1c195d789a9815e1585f29b74515b3fd32c72 +Subproject commit a3ca0c28876aa1b92cd57abd77e7348aaa2ba56e diff --git a/src/MarchingCubeChunkRenderer.cpp b/src/MarchingCubeChunkRenderer.cpp index 0164411..bfeac20 100644 --- a/src/MarchingCubeChunkRenderer.cpp +++ b/src/MarchingCubeChunkRenderer.cpp @@ -18,7 +18,7 @@ void MarchingCubeChunkRenderer::draw(ShaderLoader &shader) { for (int y = ti.yRange[0]; y < ti.yRange[1]; y++) { for (int z = ti.zRange[0]; z < ti.zRange[1]; z++) { if (chunk->getNoise(x, y, z) > 0.2f) { - this->genCubeModel(x, y, z, *chunk); + // this->genCubeModel(x, y, z, *chunk); models.at(0)->setPosition(glm::vec3(x, y, z)); models.at(0)->draw(shader); } diff --git a/src/MarchingCubeChunkRenderer.h b/src/MarchingCubeChunkRenderer.h index 7f8f7f8..2cbfe75 100644 --- a/src/MarchingCubeChunkRenderer.h +++ b/src/MarchingCubeChunkRenderer.h @@ -3,8 +3,15 @@ #include "Error.h" #include "Model.h" #include +#include #include +// data required for rendring cube in right orientation. +struct CubeData { + glm::mat4 transform; + int modelID; +}; + class MarchingCubeChunkRenderer { private: @@ -21,6 +28,10 @@ private: // https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.545.613 std::vector models; + // this map will contain all combinations of cube data in order to render the + // right model with the right translations + std::map RenderMap; + // Determine Cubes Model and translation. Model *genCubeModel(int x, int y, int z, Chunk &chunk); diff --git a/src/main.cpp b/src/main.cpp index c68e157..d2a87d4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -74,20 +74,6 @@ int main(int argc, char **argv) { ROOT_DIR "data/shaders/fragment.glsl", ROOT_DIR "data/shaders/geometry.glsl"); - // Model backpack(std::string(ROOT_DIR) + - // std::string("data/models/backpack/backpack.obj")); - // Model cube(ROOT_DIR "data/models/cube/cube.obj"); - // Model gun(ROOT_DIR "data/models/gun/Cerberus_LP.FBX"); - // Model boxbarrel(ROOT_DIR - // "data/models/wooden_boxbarrel/wooden_box_and_barrel.obj"); - // boxbarrel.translate(glm::vec3(0.0f, -1.0f, 0.0f)); - // boxbarrel.setPosition(glm::vec3(0.0f, -1.0f, 0.0f)); - // cube.translate(glm::vec3(3.0f, 0.0f, -1.0f)); - // backpack.translate(glm::vec3(-3.0f, 0.0f, 0.0f)); - // gun.translate(glm::vec3(0.0f, 1.0f, 0.0f)); - // gun.resize(glm::vec3(0.02f, 0.02f, 0.02f)); - // gun.rotate(glm::radians(-90.0f), glm::vec3(0.0f, 1.0f, 0.0f)); - // Create player camera object PlayerCamera camera; @@ -100,6 +86,13 @@ int main(int argc, char **argv) { // Initialise terrain. Terrain terrain = Terrain(); + // Debug MC table + Model debugSphere = + Model(ROOT_DIR "data/game-models/DebugSphere/DebugSphere.obj"); + debugSphere.resize(glm::vec3(0.1f)); + bool index[8] = {true, true, true, true, true, true, true, true}; + Model debugMCsegment = Model(ROOT_DIR "data/game-models/1/MetalFloor.obj"); + // Game loop bool running = true; while (running) { @@ -124,24 +117,51 @@ int main(int argc, char **argv) { // Clear screen ready for next loop glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - // Make every shader/rendering call from this point on use our shader - // glUseProgram(shaderProgram); // Send our glsl shader our camera information shader.setMat4("MVP", camera.getMVP()); shader.setVec3("CameraPos", camera.getCameraPosition()); - // shader.setInt("tick", SDL_GetTicks()); - // boxbarrel.rotate(0.001, glm::vec3(0, 1, 0)); terrain.draw(shader); - // Draw Meshes - // cube.draw(shader); - // backpack.draw(shader); - // gun.draw(shader); - // boxbarrel.draw(shader); - // Finally render everything + // draw debug sphere at correct config + debugMCsegment.draw(shader); + debugSphere.setPosition(glm::vec3(0)); + debugSphere.draw(shader); + if (index[0] == true) { + debugSphere.setPosition(glm::vec3(-1, -1, -1)); + debugSphere.draw(shader); + } + if (index[1] == true) { + debugSphere.setPosition(glm::vec3(1, -1, -1)); + debugSphere.draw(shader); + } + if (index[2] == true) { + debugSphere.setPosition(glm::vec3(1, 1, -1)); + debugSphere.draw(shader); + } + if (index[3] == true) { + debugSphere.setPosition(glm::vec3(-1, 1, -1)); + debugSphere.draw(shader); + } + if (index[4] == true) { + debugSphere.setPosition(glm::vec3(-1, -1, 1)); + debugSphere.draw(shader); + } + if (index[5] == true) { + debugSphere.setPosition(glm::vec3(1, -1, 1)); + debugSphere.draw(shader); + } + if (index[6] == true) { + debugSphere.setPosition(glm::vec3(1, 1, 1)); + debugSphere.draw(shader); + } + if (index[7] == true) { + debugSphere.setPosition(glm::vec3(-1, 1, 1)); + debugSphere.draw(shader); + } + shader.use(); SDL_GL_SwapWindow(window);