diff --git a/Renderer/Renderer.cpp b/Renderer/Renderer.cpp index 6d88e28..d1790e9 100644 --- a/Renderer/Renderer.cpp +++ b/Renderer/Renderer.cpp @@ -230,7 +230,7 @@ Renderer::Renderer(Window& win) : win(win) { { dev, "assets/shaders/terrain.vert.spv", vk::ShaderStageFlagBits::eVertex }, { dev, "assets/shaders/terrain.tesc.spv", vk::ShaderStageFlagBits::eTessellationControl }, { dev, "assets/shaders/terrain.tese.spv", vk::ShaderStageFlagBits::eTessellationEvaluation }, - { dev, "assets/shaders/gooch.frag.spv", vk::ShaderStageFlagBits::eFragment }, + { dev, "assets/shaders/terrain.frag.spv", vk::ShaderStageFlagBits::eFragment }, }; terrain_pipeline = std::make_unique(dev, terrain_shaders, swapchain->extent, *render_pass, bindings, *terrain->vertex_buffer, GraphicsPipeline::eTERRAIN); diff --git a/Scene/Terrain.cpp b/Scene/Terrain.cpp index 5a5c2aa..8895be7 100644 --- a/Scene/Terrain.cpp +++ b/Scene/Terrain.cpp @@ -13,7 +13,14 @@ float Terrain::getHeight(int32_t x, int32_t y) { x %= 64; y %= 64; - return heightmap_tex->image_data[(y * heightmap_tex->extent.height * heightmap_tex->extent.width / 64 + x * heightmap_tex->extent.width / 64) * 4]; + float xf = x; + float yf = y; + xf /= 64.0; + xf *= heightmap_tex->extent.width; + yf /= 64.0; + yf *= heightmap_tex->extent.height; + + return static_cast(heightmap_tex->image_data[static_cast(static_cast(yf) * heightmap_tex->extent.width + xf) * 4]) / 256.0f; } Terrain::Terrain(vk::PhysicalDevice phys_dev, vk::Device dev, Texture& tex) : phys_dev(phys_dev), dev(dev) { @@ -73,9 +80,9 @@ Terrain::Terrain(vk::PhysicalDevice phys_dev, vk::Device dev, Texture& tex) : ph - moores_heights[0][2] - 2.0f * moores_heights[1][2] - moores_heights[2][2] ); /* fill in missing component, first scalar scales bump */ - normal.y = 15.0 * glm::sqrt(glm::abs(1.0 - normal.x*normal.x - normal.z*normal.z)); + normal.y = 0.25 * glm::sqrt(glm::abs(1.0 - normal.x*normal.x - normal.z*normal.z)); - + //vertices[x + y * patch_size].norm = glm::vec3(getHeight(x, y)); vertices[x + y * patch_size].norm = glm::normalize(normal * glm::vec3(2.0f, 1.0f, 2.0f)); } diff --git a/assets/shaders/terrain.frag b/assets/shaders/terrain.frag index b12905f..6cc0007 100644 --- a/assets/shaders/terrain.frag +++ b/assets/shaders/terrain.frag @@ -16,19 +16,13 @@ layout (set = 0, binding = 0) uniform Matrices { float tess_edge_size; }; -layout (set = 0, binding = 1) uniform sampler2D heightmap; - -float height(vec2 uv) { - return 15.0 * texture(heightmap, uv).r; -} +layout (set = 0, binding = 1) uniform sampler2D heightmap; void main() { - vec3 N = norm; - - vec3 light_pos = normalize(vec3(cos(time), sin(time), 0.0))*10.0; + vec3 light_pos = vec3(10.0*cos(time), 10.0, 0.0); vec3 L = normalize(light_pos-pos); float r = length(light_pos-pos); - float t = clamp(dot(L, N), 0.0, 1.0) * 20.0/(r*r); + float t = clamp(dot(L, norm), 0.0, 1.0) * 20.0/(r*r); - FragColor = vec4(1.0); + FragColor = vec4(t, t/2.0, t*2.0, 1.0); } \ No newline at end of file diff --git a/assets/shaders/terrain.frag.spv b/assets/shaders/terrain.frag.spv index 21e7eb4..6e07929 100644 Binary files a/assets/shaders/terrain.frag.spv and b/assets/shaders/terrain.frag.spv differ