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