From 1ee72dae9a6c79bd32f7ab92860aaa873b2f9287 Mon Sep 17 00:00:00 2001 From: JISAUAY Date: Wed, 12 Nov 2025 11:27:50 -0600 Subject: [PATCH] add infinite chunk generation --- .attachments/chunk-generation.png | Bin 0 -> 73032 bytes README.md | 5 ++ src/Camera.h | 6 +-- src/Chunk.cpp | 7 +++ src/Chunk.h | 1 + src/Mesh.cpp | 2 +- src/World.cpp | 13 +++++- src/main.cpp | 74 ++++++++++++++++-------------- 8 files changed, 68 insertions(+), 40 deletions(-) create mode 100644 .attachments/chunk-generation.png diff --git a/.attachments/chunk-generation.png b/.attachments/chunk-generation.png new file mode 100644 index 0000000000000000000000000000000000000000..7a436e29e3dc195b5ad733c5d511dd4ee7fcf230 GIT binary patch literal 73032 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 B=WYN1 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 475ce8a..b863199 100644 --- a/README.md +++ b/README.md @@ -18,3 +18,8 @@ Instead of making the _entire_ world a single mesh, now the world is made up of ![cube world (but in chunks!)](.attachments/chunk-render.png) +## 0.4.0 : Chunk Generation - 11/12/25 + +Chunks now generate around the player in a square based on a render distance. This allows the flat plane to be infinite! + +![infinite flat cube world](.attachments/chunk-generation.png) diff --git a/src/Camera.h b/src/Camera.h index f22111a..a545a52 100644 --- a/src/Camera.h +++ b/src/Camera.h @@ -73,9 +73,9 @@ class Camera void move(float time) // time passed in seconds since last move { - bool in_air = this->position.y > 0; + bool in_air = this->position.y > 1; - if (this->position.y > 0) + if (this->position.y > 1) this->vertical_velocity.y -= (GRAVITY * time); // no way! physics reference? glm::vec3 velocity = this->forward_velocity + this->horizontal_velocity + this->vertical_velocity; @@ -84,7 +84,7 @@ class Camera this->position += movement; // Don't want to clip into the ground right - if (this->position.y <= 0 && in_air) + if (this->position.y <= 1 && in_air) { this->position.y = 0.0f; this->vertical_velocity.y = 0.0f; diff --git a/src/Chunk.cpp b/src/Chunk.cpp index 208087c..e98269c 100644 --- a/src/Chunk.cpp +++ b/src/Chunk.cpp @@ -1,5 +1,6 @@ #include "Chunk.h" #include +#include const int VERTEX_SIZE = 6; @@ -64,6 +65,10 @@ Chunk::Chunk() { // mesh is initially null (nullptr) } +Chunk::Chunk(std::unordered_set voxels) { + this->voxels = voxels; +} + Mesh* Chunk::getMesh() { // Generate mesh on first access if not already generated if (!mesh && !voxels.empty()) { @@ -76,6 +81,8 @@ void Chunk::generateMesh() { std::vector vboData; std::vector eboData; + // std::cout << "Generating Chunk mesh..." << std::endl; + for (const glm::ivec3 pos : voxels) { if (voxels.count(pos + glm::ivec3(0, 1, 0)) == 0) { addFace(pos, topFace, vboData, eboData); diff --git a/src/Chunk.h b/src/Chunk.h index 32e0de0..cdce79b 100644 --- a/src/Chunk.h +++ b/src/Chunk.h @@ -31,6 +31,7 @@ class Chunk { std::unordered_set voxels; Chunk(); + Chunk(std::unordered_set voxels); Mesh* getMesh(); // Returns pointer, can be null if not generated yet diff --git a/src/Mesh.cpp b/src/Mesh.cpp index e429e4f..bc16f36 100644 --- a/src/Mesh.cpp +++ b/src/Mesh.cpp @@ -40,7 +40,7 @@ void Mesh::init() { void Mesh::uploadData(const std::vector &vboData, const std::vector &eboData) { m_indexCount = eboData.size(); - std::cout << "Uploading mesh: " << vboData.size() << " floats, " << eboData.size() << " indices" << std::endl; + // std::cout << "Uploading mesh: " << vboData.size() << " floats, " << eboData.size() << " indices" << std::endl; // Bind VAO first, then upload buffer data glBindVertexArray(m_VAO); diff --git a/src/World.cpp b/src/World.cpp index 3ad6728..1465a2e 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -16,7 +16,18 @@ void World::flip_voxel(glm::ivec3 position) { Chunk* World::get_or_create_chunk(glm::ivec3 chunk_position) { if (this->chunks.count(chunk_position) == 0) { - this->chunks[chunk_position] = Chunk(); + + // Fill in new chunk with a flat plane of voxels at y=0 + std::unordered_set voxels; + if (chunk_position.y == 0) { + for (int z = 0; z <= 32; z++) { + for (int x = 0; x <= 32; x++) { + voxels.insert(glm::ivec3(x, 0, z)); + } + } + } + + this->chunks[chunk_position] = Chunk(voxels); } return &this->chunks[chunk_position]; } diff --git a/src/main.cpp b/src/main.cpp index c080291..6d0f431 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -28,10 +28,12 @@ const float Z_NEAR = 0.1f; bool WIREFRAME_MODE = !true; const float FOV = 110.0f; +const int VIEW_DISTANCE = 4; // In Chunks + bool W_pressed, S_pressed, A_pressed, D_pressed = false; glm::mat4 projection = glm::mat4(1.0f); -Camera camera = Camera(CAMERA_SPEED, glm::vec3(0.0f, 0.0f, 3.0f)); +Camera camera = Camera(CAMERA_SPEED, glm::vec3(0.0f, 1.0f, 3.0f)); // Callback function for when the window is resized // glfw: whenever the window size changed (by OS or user resize) this callback function executes @@ -181,7 +183,7 @@ int main() { glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // 2. --- Create a Window --- - GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "HelloTriangle", NULL, NULL); + GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "Voxel Engine 0.4.0", NULL, NULL); if (window == NULL) { std::cerr << "Failed to create GLFW window" << std::endl; glfwTerminate(); @@ -205,17 +207,9 @@ int main() { // Load Cube OBJ World world; - Object3D cube = Object3D("objs/cube.obj"); + // Object3D cube = Object3D("objs/cube.obj"); - // Place cubes in the world - for (int z = 0; z <= 256; z++) { - for (int x = 0; x <= 256; x++) { - world.flip_voxel(glm::ivec3(x, -1, z)); - } - } - - world.flip_voxel(glm::ivec3(7, 0, 13)); - std::cout << "World created with " << world.chunks.size() << " chunks" << std::endl; + // std::cout << "World created with " << world.chunks.size() << " chunks" << std::endl; // Mesh generation now happens automatically when first rendering if (WIREFRAME_MODE) @@ -251,31 +245,35 @@ int main() { std::cout << "\n=== RENDER DEBUG ===" << std::endl; std::cout << "Camera pos: (" << camera.position.x << ", " << camera.position.y << ", " << camera.position.z << ")" << std::endl; std::cout << "Camera target: (" << camera.target.x << ", " << camera.target.y << ", " << camera.target.z << ")" << std::endl; - std::cout << "Number of chunks to draw: " << world.chunks.size() << std::endl; + // std::cout << "Number of chunks to draw: " << world.chunks.size() << std::endl; } + // Generate chunks around the camera + glm::ivec3 camera_chunk = glm::ivec3(camera.position) / CHUNK_SIZE; + // ---- PASS 1: Draw solid grey cubes ---- glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset(1.0, 1.0); // Push solid faces "back" glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); shader.setVec3("u_Color", glm::vec3(0.5, 0.5, 0.5)); - for (auto& [chunk_position, chunk] : world.chunks) { + for (int y = -VIEW_DISTANCE; y < VIEW_DISTANCE; y++) { + for (int z = -VIEW_DISTANCE; z < VIEW_DISTANCE; z++) { + for (int x = -VIEW_DISTANCE; x < VIEW_DISTANCE; x++) { + glm::ivec3 chunk_offset = glm::ivec3(x, y, z); + glm::ivec3 chunk_pos = camera_chunk + chunk_offset; - glm::ivec3 chunk_offset = chunk_position * CHUNK_SIZE; - glm::mat4 model = glm::mat4(1.0f); - model = glm::translate(model, glm::vec3(chunk_offset)); - glm::mat4 mvp = projection * view * model; - shader.setMat4("u_mvp", mvp); + glm::mat4 model = glm::mat4(1.0f); + model = glm::translate(model, glm::vec3(chunk_pos * CHUNK_SIZE)); + glm::mat4 mvp = projection * view * model; + shader.setMat4("u_mvp", mvp); - if (!debug_printed) { - std::cout << "Drawing chunk at (" << chunk_position.x << ", " << chunk_position.y << ", " << chunk_position.z << ")" << std::endl; - std::cout << "Chunk offset: (" << chunk_offset.x << ", " << chunk_offset.y << ", " << chunk_offset.z << ")" << std::endl; - } + Chunk* chunk = world.get_or_create_chunk(chunk_pos); - Mesh* chunkMesh = chunk.getMesh(); - if (chunkMesh) { - chunkMesh->draw(); + Mesh* chunk_mesh = chunk->getMesh(); + if (chunk_mesh) + chunk_mesh->draw(); + } } } @@ -289,17 +287,23 @@ int main() { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); // Just the lines shader.setVec3("u_Color", glm::vec3(1.0, 1.0, 1.0)); - for (auto& [chunk_position, chunk] : world.chunks) { + for (int y = -VIEW_DISTANCE; y < VIEW_DISTANCE; y++) { + for (int z = -VIEW_DISTANCE; z < VIEW_DISTANCE; z++) { + for (int x = -VIEW_DISTANCE; x < VIEW_DISTANCE; x++) { + glm::ivec3 chunk_offset = glm::ivec3(x, y, z); + glm::ivec3 chunk_pos = camera_chunk + chunk_offset; - glm::ivec3 chunk_offset = chunk_position * CHUNK_SIZE; - glm::mat4 model = glm::mat4(1.0f); - model = glm::translate(model, glm::vec3(chunk_offset)); - glm::mat4 mvp = projection * view * model; - shader.setMat4("u_mvp", mvp); + glm::mat4 model = glm::mat4(1.0f); + model = glm::translate(model, glm::vec3(chunk_pos * CHUNK_SIZE)); + glm::mat4 mvp = projection * view * model; + shader.setMat4("u_mvp", mvp); - Mesh* chunkMesh = chunk.getMesh(); - if (chunkMesh) { - chunkMesh->draw(); + Chunk* chunk = world.get_or_create_chunk(chunk_pos); + + Mesh* chunk_mesh = chunk->getMesh(); + if (chunk_mesh) + chunk_mesh->draw(); + } } }