From 29e2d9db80e31003e9d58db986ee0966ec844df8 Mon Sep 17 00:00:00 2001 From: tylermurphy534 Date: Sun, 25 Sep 2022 19:05:56 -0400 Subject: 3D Chunks rendering --- src/chunk.hpp | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 src/chunk.hpp (limited to 'src/chunk.hpp') diff --git a/src/chunk.hpp b/src/chunk.hpp new file mode 100644 index 0000000..5a50983 --- /dev/null +++ b/src/chunk.hpp @@ -0,0 +1,119 @@ +#pragma once + +#include "xe_model.hpp" +#include "PerlinNoise.hpp" + +#include +#include +#include +#include +#include +#include +#include + +#define AIR 0 +#define DIRT 1 + +namespace app { + +class Chunk { + + public: + + static Chunk* newChunk(uint32_t gridX, uint32_t gridZ, uint32_t world_seed); + static void reset(); + + Chunk(uint32_t gridX, uint32_t gridZ, uint32_t world_seed); + ~Chunk() {}; + + const uint32_t gridX, gridZ, world_seed, chunk_seed; + + void createMesh(); + void createMeshAsync(); + std::shared_ptr getMesh(); + + uint8_t getBlock(uint32_t x, uint32_t y, uint32_t z); + void setBlock(uint32_t x, uint32_t y, uint32_t z, uint8_t block); + + static Chunk* getChunk(uint32_t x, uint32_t z); + + private: + + void generate(); + void addVerticies(uint32_t side, uint32_t x, uint32_t y, uint32_t z); + + bool reloadRequired{false}; + bool working{false}; + + std::shared_ptr chunkMesh; + std::vector vertexData; + std::vector blocks; + std::thread worker; + +}; + +const float px[36][3] = { + // POS X + {0.5f,0.5f,0.5f}, + {0.5f,-0.5f,0.5f}, + {0.5f,-0.5f,-0.5f}, + {0.5f,-0.5f,-0.5f}, + {0.5f,0.5f,-0.5f}, + {0.5f,0.5f,0.5f}, + // NEG X + {-0.5f,0.5f,-0.5f}, + {-0.5f,-0.5f,-0.5f}, + {-0.5f,-0.5f,0.5f}, + {-0.5f,-0.5f,0.5f}, + {-0.5f,0.5f,0.5f}, + {-0.5f,0.5f,-0.5f}, + // POS Y + {0.5f,0.5f,-0.5f}, + {-0.5f,0.5f,-0.5f}, + {-0.5f,0.5f,0.5f}, + {-0.5f,0.5f,0.5f}, + {0.5f,0.5f,0.5f}, + {0.5f,0.5f,-0.5f}, + // NEG Y + {-0.5f,-0.5f,0.5f}, + {-0.5f,-0.5f,-0.5f}, + {0.5f,-0.5f,-0.5f}, + {0.5f,-0.5f,-0.5f}, + {0.5f,-0.5f,0.5f}, + {-0.5f,-0.5f,0.5f}, + // POS Z + {-0.5f,0.5f,0.5f}, + {-0.5f,-0.5f,0.5f}, + {0.5f,-0.5f,0.5f}, + {0.5f,-0.5f,0.5f}, + {0.5f,0.5f,0.5f}, + {-0.5f,0.5f,0.5f}, + // NEG Z + {0.5f,0.5f,-0.5f}, + {0.5f,-0.5f,-0.5f}, + {-0.5f,-0.5f,-0.5f}, + {-0.5f,-0.5f,-0.5f}, + {-0.5f,0.5f,-0.5f}, + {0.5f,0.5f,-0.5f} +}; + +const float nm[6][3] = { + {1.f,0.f,0.f}, + {-1.f,0.f,0.f}, + {0.f,1.f,0.f}, + {0.f,-1.f,0.f}, + {0.f,0.f,1.f}, + {0.f,0.f,-1.f} +}; + + +const float uv[6][2] = { + {0.f,0.f}, + {1.f,0.f}, + {0.f,1.f}, + {0.f,1.f}, + {1.f,0.f}, + {1.f,1.f} +}; + +} \ No newline at end of file -- cgit v1.2.3-freya