Fixed normal generation (for real this time).

Issue was in sampling texture on the CPU side.
This commit is contained in:
connellpaxton 2024-02-06 11:31:29 -05:00
parent 90d04c2d9f
commit dfd0c57c59
4 changed files with 15 additions and 14 deletions

View File

@ -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<GraphicsPipeline>(dev, terrain_shaders, swapchain->extent, *render_pass, bindings, *terrain->vertex_buffer, GraphicsPipeline::eTERRAIN);

View File

@ -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<float>(heightmap_tex->image_data[static_cast<int>(static_cast<int>(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));
}

View File

@ -18,17 +18,11 @@ layout (set = 0, binding = 0) uniform Matrices {
layout (set = 0, binding = 1) uniform sampler2D heightmap;
float height(vec2 uv) {
return 15.0 * texture(heightmap, uv).r;
}
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);
}

Binary file not shown.