From cea1434ec9463b0c2b9f74fa6177777b787c1e8c Mon Sep 17 00:00:00 2001 From: Joseph Walton-Rivers <joseph@walton-rivers.uk> Date: Sat, 17 Jul 2021 18:33:28 +0100 Subject: [PATCH] Add two new slope blockout meshes: * ditch has 3 sides high and one low * point has 1 side high and three low This adds to the two versions already present: * slope has 2 sides high and 2 sides low * cube is just a cube (4 sides high) --- demo/main.cpp | 2 +- fggl/data/procedural.cpp | 133 +++++++++++++++++++++++++++++++++++++++ fggl/data/procedural.hpp | 2 + fggl/gfx/renderer.cpp | 2 +- 4 files changed, 137 insertions(+), 2 deletions(-) diff --git a/demo/main.cpp b/demo/main.cpp index 1ea5234..e02b23f 100644 --- a/demo/main.cpp +++ b/demo/main.cpp @@ -70,7 +70,7 @@ int main(int argc, char* argv[]) { // in a supprise to no one it's a triangle // auto mesh = fggl::data::make_quad_xy(); - auto mesh = fggl::data::make_cube(); + auto mesh = fggl::data::make_point(); auto token = meshRenderer.upload(mesh); token.pipeline = shader; ecs.addComponent<fggl::gfx::MeshToken>(entity, token); diff --git a/fggl/data/procedural.cpp b/fggl/data/procedural.cpp index 0a5f5d8..14b5038 100644 --- a/fggl/data/procedural.cpp +++ b/fggl/data/procedural.cpp @@ -130,6 +130,139 @@ fggl::data::Mesh fggl::data::make_cube() { return mesh; } +fggl::data::Mesh fggl::data::make_slope() { + + // done as two loops, top loop is 0,1,2,3, bottom loop is 4,5,6,7 + // FIXME remove 2 and 3 and renumber the index list accordingly + constexpr fggl::math::vec3 pos[] { + {-0.5, 0.5, -0.5}, // 0 TOP LOOP + { 0.5, 0.5, -0.5}, // 1 + { 0.5, 0.5, 0.5}, // 2 + {-0.5, 0.5, 0.5}, // 3 + {-0.5, -0.5, -0.5}, // 4 BOTTOM LOOP + { 0.5, -0.5, -0.5}, // 5 + { 0.5, -0.5, 0.5}, // 6 + {-0.5, -0.5, 0.5} // 7 + }; + + constexpr int idx[] { + 0, 7, 1, // ramp + 7, 6, 1, + 0, 1, 4, // side 0 - 1 + 5, 4, 1, + 1, 6, 5, // ramp side 1 + 4, 7, 0, // ramp side 2 + 4, 5, 7, // bottom + 7, 5, 6, + }; + + fggl::data::Mesh mesh; + int colIdx[8]; + for ( int i=0; i < 8; ++i ) { + Vertex vert{}; + vert.posititon = pos[i]; + vert.colour = fggl::math::vec3(1.0f, 1.0f, 1.0f); + colIdx[ i ] = mesh.pushVertex( vert ); + } + + for ( auto i : idx ){ + mesh.pushIndex( colIdx[i] ); + } + + return mesh; +} + +fggl::data::Mesh fggl::data::make_ditch() { + + // done as two loops, top loop is 0,1,2,3, bottom loop is 4,5,6,7 + // FIXME remove 2 and renumber the index list accordingly + constexpr fggl::math::vec3 pos[] { + {-0.5, 0.5, -0.5}, // 0 TOP LOOP + { 0.5, 0.5, -0.5}, // 1 + { 0.5, 0.5, 0.5}, // 2 + {-0.5, 0.5, 0.5}, // 3 + {-0.5, -0.5, -0.5}, // 4 BOTTOM LOOP + { 0.5, -0.5, -0.5}, // 5 + { 0.5, -0.5, 0.5}, // 6 + {-0.5, -0.5, 0.5} // 7 + }; + + constexpr int idx[] { + 0, 3, 1, // top + 3, 6, 1, + 0, 1, 4, // side 0 - 1 + 5, 4, 1, + 1, 6, 5, + 3, 7, 6, + 0, 4, 3, // side 3 - 0 + 4, 7, 3, + 4, 5, 7, // bottom + 7, 5, 6, + }; + + fggl::data::Mesh mesh; + int colIdx[8]; + for ( int i=0; i < 8; ++i ) { + Vertex vert{}; + vert.posititon = pos[i]; + vert.colour = fggl::math::vec3(1.0f, 1.0f, 1.0f); + colIdx[ i ] = mesh.pushVertex( vert ); + } + + for ( auto i : idx ){ + mesh.pushIndex( colIdx[i] ); + } + + return mesh; +} + +fggl::data::Mesh fggl::data::make_point() { + + // done as two loops, top loop is 0,1,2,3, bottom loop is 4,5,6,7 + constexpr fggl::math::vec3 pos[] { + {-0.5, 0.5, -0.5}, // 0 TOP LOOP + { 0.5, 0.5, -0.5}, // 1 + { 0.5, 0.5, 0.5}, // 2 + {-0.5, 0.5, 0.5}, // 3 + {-0.5, -0.5, -0.5}, // 4 BOTTOM LOOP + { 0.5, -0.5, -0.5}, // 5 + { 0.5, -0.5, 0.5}, // 6 + {-0.5, -0.5, 0.5} // 7 + }; + + constexpr int idx[] { + 0, 7, 5, // top + 7, 6, 5, + 0, 5, 4, // side 0 - 1 + // 5, 4, 1, + // 1, 2, 5, // side 1 - 2 + // 2, 6, 5, + // 3, 7, 2, // side 2 - 3 + // 2, 7, 6, + 0, 4, 7, // side 3 - 0 + // 4, 7, 3, + 4, 5, 7, // bottom + 7, 5, 6, + }; + + fggl::data::Mesh mesh; + int colIdx[8]; + for ( int i=0; i < 8; ++i ) { + Vertex vert{}; + vert.posititon = pos[i]; + vert.colour = fggl::math::vec3(1.0f, 1.0f, 1.0f); + colIdx[ i ] = mesh.pushVertex( vert ); + } + + for ( auto i : idx ){ + mesh.pushIndex( colIdx[i] ); + } + + return mesh; +} + + + /* constexpr float cubeVertex[8 * 3] = { 0, 0, 0, diff --git a/fggl/data/procedural.hpp b/fggl/data/procedural.hpp index 4a8f183..1e39d94 100644 --- a/fggl/data/procedural.hpp +++ b/fggl/data/procedural.hpp @@ -14,4 +14,6 @@ namespace fggl::data { // blockout shapes Mesh make_slope(); + Mesh make_ditch(); + Mesh make_point(); } diff --git a/fggl/gfx/renderer.cpp b/fggl/gfx/renderer.cpp index 37d93fc..635021e 100644 --- a/fggl/gfx/renderer.cpp +++ b/fggl/gfx/renderer.cpp @@ -79,7 +79,7 @@ void MeshRenderer::render(const Window& window, const fggl::ecs::ECS& ecs, float total += dt; - glm::mat4 view = glm::lookAt( glm::vec3 ( 0.0f, -3.0f, 3.0f ), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f) ); + glm::mat4 view = glm::lookAt( glm::vec3 ( 0.0f, 3.0f, 3.0f ), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f) ); glm::mat4 proj = glm::perspective( glm::radians(45.0f), 1280.0f/720.0f, 0.1f, 100.0f); // glm::mat4 proj = glm::mat4(1.0f); -- GitLab