From 13b3e7f3b1e8a376bd90ea24bdb8090237e9bd0e Mon Sep 17 00:00:00 2001 From: Ben Date: Fri, 18 Oct 2019 22:34:22 +0100 Subject: [PATCH] Fog and more blocks --- resources/shaders/simple.frag | 14 +++++++++++++- resources/shaders/simple.vert | 15 +++++++++++++-- resources/textures/bedrock.png | Bin 0 -> 225 bytes resources/textures/cobblestone.png | Bin 0 -> 568 bytes resources/textures/stone.png | Bin 0 -> 223 bytes src/game.cpp | 5 ++--- src/renderer/chunk.cpp | 27 ++++++++++++++++++++------- src/world/block.cpp | 12 +++++++++--- src/world/block.hpp | 18 ++++++++++++------ 9 files changed, 69 insertions(+), 22 deletions(-) create mode 100644 resources/textures/bedrock.png create mode 100644 resources/textures/cobblestone.png create mode 100644 resources/textures/stone.png diff --git a/resources/shaders/simple.frag b/resources/shaders/simple.frag index 7a2f794..1b05fdf 100644 --- a/resources/shaders/simple.frag +++ b/resources/shaders/simple.frag @@ -1,11 +1,23 @@ #version 450 +vec3 SkyColour = vec3(186.0f / 255.0f, 214.0f / 255.0f, 254.0f / 255.0f); + in vec3 TexCoord; +in float Distance; out vec4 outColour; uniform sampler2DArray tex; void main() { - outColour = texture(tex, TexCoord); + + outColour = texture(tex, TexCoord); + + if (outColour.w == .0) + discard; + + float fogMax = 20000; + + outColour = vec4(mix(outColour.xyz, SkyColour, min(1.0f, Distance / fogMax)), outColour.w); + } diff --git a/resources/shaders/simple.vert b/resources/shaders/simple.vert index 030929d..bad13e0 100644 --- a/resources/shaders/simple.vert +++ b/resources/shaders/simple.vert @@ -4,12 +4,23 @@ layout (location = 0) in vec3 position; layout (location = 1) in vec3 texcoord; out vec3 TexCoord; +out float Distance; uniform mat4 model; uniform mat4 view; uniform mat4 proj; void main() { - TexCoord = texcoord; - gl_Position = proj * view * model * vec4(position, 1.0); + + TexCoord = texcoord; + + gl_Position = proj * view * model * vec4(position, 1.0); + + // Makes no sense but it works + Distance = ( + gl_Position.x * gl_Position.x + + gl_Position.y * gl_Position.y + + gl_Position.z * gl_Position.z + ); + } diff --git a/resources/textures/bedrock.png b/resources/textures/bedrock.png new file mode 100644 index 0000000000000000000000000000000000000000..1643c9958fa499aa6a57a36efbde0c479e00fe6a GIT binary patch literal 225 zcmV<703QE|P)F#%PL-74aEz1~lKyIiDiVXa7M##mtc# z%Zg3STy?z)`(m#A!{X~9<&Lv_W@UB83}8|6RqkoxpZOmj5{fI&u##0A$Ed6X1#0Hi bBT~ROrseuXuHE=G00000NkvXXu0mjfLQ-Os literal 0 HcmV?d00001 diff --git a/resources/textures/cobblestone.png b/resources/textures/cobblestone.png new file mode 100644 index 0000000000000000000000000000000000000000..da3498c5c8d0f279a5e8f62e254241debe421344 GIT binary patch literal 568 zcmV-80>}M{P)N)G@VZQ44>2Kr1SYq5@WSmNv+pwt_HxbB@zh^G?`3fx7!)B*=%%2 zNRY{7NWI^0s#dF%&*$m&dNFCw=aT`F===TBe!u5H=?GlmpDL9~eDVAJwA<~d)oL*x zU|w2As zy3CzSCV5U_9{+;DpbiFK3bVqAFTeNzyLZLurvsovFYFH`|sW%Z4VIQzvE|-fJ z3hN5V?)N)alLR<-IvqAv0oCv@u`Q z@@yAK5Xrp8Ww0?B)}a6jDz5Sm3r@C%T7;e8YL1N+@fol{wcN}(?TextureID = texture.LoadTextures(BlockDictionary->Textures); - for (int x = 0; x < 2; x++) - for (int y = 0; y < 3; y++) { + for (int y = 0; y < 2; y++) { m_world->Chunks.push_back(std::make_shared(x, y)); @@ -150,7 +149,7 @@ void Game::Run() { SDL_Event e; - const float clear[] = { 0.1f, 0.45f, 0.9f, 1.0f }; + const float clear[] = { 186.0f / 255.0f, 214.0f / 255.0f, 254.0f / 255.0f }; m_renderer = std::make_unique(); diff --git a/src/renderer/chunk.cpp b/src/renderer/chunk.cpp index 469ba69..318f1b2 100644 --- a/src/renderer/chunk.cpp +++ b/src/renderer/chunk.cpp @@ -13,25 +13,38 @@ Chunk::Chunk(int x, int z) { m_model = glm::translate(glm::mat4(1.0f), { x * CHUNK_WIDTH, 0, z * CHUNK_DEPTH }); - std::default_random_engine generator; // [x + WIDTH * (y + HEIGHT * z)] for (int x = 0; x < CHUNK_WIDTH; x++) for (int y = 0; y < CHUNK_HEIGHT; y++) for (int z = 0; z < CHUNK_DEPTH; z++) { - if (y > 15) { + if (y > 32) { Voxels.push_back((uint8_t)EBlockType::Air); continue; } - std::uniform_real_distribution distribution(0, 1); - float r = distribution(generator); - if (r > 0.5f) + if (y == 0) { + + Voxels.push_back((uint8_t)EBlockType::Bedrock); + + } + else if (y < 28) { + + Voxels.push_back((uint8_t)EBlockType::Stone); + + } + else if (y < 32) { + + Voxels.push_back((uint8_t)EBlockType::Dirt); + + } + else { + Voxels.push_back((uint8_t)EBlockType::Grass); - else - Voxels.push_back((uint8_t)EBlockType::Air); + + } } diff --git a/src/world/block.cpp b/src/world/block.cpp index b8271e3..253c441 100644 --- a/src/world/block.cpp +++ b/src/world/block.cpp @@ -21,14 +21,20 @@ std::shared_ptr CBlockDictionary::GetInstance() { void CBlockDictionary::Build() { + RegisterTexture("stone.png"); RegisterTexture("dirt.png"); RegisterTexture("grass_side.png"); RegisterTexture("grass_top.png"); + RegisterTexture("cobblestone.png"); + RegisterTexture("bedrock.png"); // Texture winding order - top, bottom, left, right, front, back - RegisterBlock(EBlockType::Air, { }); - RegisterBlock(EBlockType::Dirt, { EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt }); - RegisterBlock(EBlockType::Grass, { EFaceTexture::Grass, EFaceTexture::Dirt, EFaceTexture::GrassSide, EFaceTexture::GrassSide, EFaceTexture::GrassSide, EFaceTexture::GrassSide }); + RegisterBlock(EBlockType::Air, { }); + RegisterBlock(EBlockType::Stone, { EFaceTexture::Stone, EFaceTexture::Stone, EFaceTexture::Stone, EFaceTexture::Stone, EFaceTexture::Stone, EFaceTexture::Stone }); + RegisterBlock(EBlockType::Dirt, { EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt, EFaceTexture::Dirt }); + RegisterBlock(EBlockType::Grass, { EFaceTexture::Grass, EFaceTexture::Dirt, EFaceTexture::GrassSide, EFaceTexture::GrassSide, EFaceTexture::GrassSide, EFaceTexture::GrassSide }); + RegisterBlock(EBlockType::Cobblestone, { EFaceTexture::Cobblestone, EFaceTexture::Cobblestone, EFaceTexture::Cobblestone, EFaceTexture::Cobblestone, EFaceTexture::Cobblestone, EFaceTexture::Cobblestone }); + RegisterBlock(EBlockType::Bedrock, { EFaceTexture::Bedrock, EFaceTexture::Bedrock, EFaceTexture::Bedrock, EFaceTexture::Bedrock, EFaceTexture::Bedrock, EFaceTexture::Bedrock }); } diff --git a/src/world/block.hpp b/src/world/block.hpp index d1cf586..ea7686e 100644 --- a/src/world/block.hpp +++ b/src/world/block.hpp @@ -8,9 +8,12 @@ namespace EBlockType { enum Block : uint8_t { - Air = 0, - Dirt = 1, - Grass = 2 + Air = 0, + Stone, + Grass, + Dirt, + Cobblestone, + Bedrock }; @@ -20,9 +23,12 @@ namespace EFaceTexture { enum Texture : uint16_t { - Dirt = 0, - GrassSide = 1, - Grass = 2 + Stone, + Dirt, + GrassSide, + Grass, + Cobblestone, + Bedrock };