From 165d2687a8069e3f68d50ff7f1661217ff7471a0 Mon Sep 17 00:00:00 2001 From: bailwillharr Date: Thu, 26 Jan 2023 21:54:20 +0000 Subject: [PATCH] Fix sphere normals --- res/engine/shaders/showNormals.frag | 11 ++++++++++ res/engine/shaders/showNormals.vert | 21 +++++++++++++++++++ .../shaders/{texture.frag => textured.frag} | 0 .../shaders/{texture.vert => textured.vert} | 0 src/application.cpp | 4 ++-- src/gfx_device_vulkan.cpp | 2 +- src/resources/texture.cpp | 7 ++++--- test/src/game.cpp | 4 ++-- test/src/meshgen.cpp | 6 ++---- 9 files changed, 43 insertions(+), 12 deletions(-) create mode 100644 res/engine/shaders/showNormals.frag create mode 100644 res/engine/shaders/showNormals.vert rename res/engine/shaders/{texture.frag => textured.frag} (100%) rename res/engine/shaders/{texture.vert => textured.vert} (100%) diff --git a/res/engine/shaders/showNormals.frag b/res/engine/shaders/showNormals.frag new file mode 100644 index 0000000..5e54b52 --- /dev/null +++ b/res/engine/shaders/showNormals.frag @@ -0,0 +1,11 @@ +#version 450 + +layout(location = 0) in vec3 fragNorm; + +layout(location = 0) out vec4 outColor; + +void main() { + vec3 baseColor = fragNorm; + outColor = vec4(baseColor, 1.0); +} + diff --git a/res/engine/shaders/showNormals.vert b/res/engine/shaders/showNormals.vert new file mode 100644 index 0000000..5bdcbd7 --- /dev/null +++ b/res/engine/shaders/showNormals.vert @@ -0,0 +1,21 @@ +#version 450 + +layout(binding = 0) uniform UBO { + mat4 proj; +} ubo; + +layout( push_constant ) uniform Constants { + mat4 model; + mat4 view; +} constants; + +layout(location = 0) in vec3 inPosition; +layout(location = 1) in vec3 inNorm; +layout(location = 2) in vec2 inUV; + +layout(location = 0) out vec3 fragNorm; + +void main() { + gl_Position = ubo.proj * constants.view * constants.model * vec4(inPosition, 1.0); + fragNorm = mat3(transpose(inverse(constants.model))) * inNorm; +} diff --git a/res/engine/shaders/texture.frag b/res/engine/shaders/textured.frag similarity index 100% rename from res/engine/shaders/texture.frag rename to res/engine/shaders/textured.frag diff --git a/res/engine/shaders/texture.vert b/res/engine/shaders/textured.vert similarity index 100% rename from res/engine/shaders/texture.vert rename to res/engine/shaders/textured.vert diff --git a/src/application.cpp b/src/application.cpp index 3004201..609a46d 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -79,8 +79,8 @@ namespace engine { vertParams.hasUV0 = true; auto texturedShader = std::make_unique( gfx(), - getResourcePath("engine/shaders/texture.vert").c_str(), - getResourcePath("engine/shaders/texture.frag").c_str(), + getResourcePath("engine/shaders/textured.vert").c_str(), + getResourcePath("engine/shaders/textured.frag").c_str(), vertParams, false, true diff --git a/src/gfx_device_vulkan.cpp b/src/gfx_device_vulkan.cpp index 141e85d..dba2b19 100644 --- a/src/gfx_device_vulkan.cpp +++ b/src/gfx_device_vulkan.cpp @@ -1120,7 +1120,7 @@ namespace engine { - for (const char* ext : extensions) { + for ([[maybe_unused]] const char* ext : extensions) { DEBUG("Using Vulkan instance extension: {}", ext); } diff --git a/src/resources/texture.cpp b/src/resources/texture.cpp index 911634d..16bf2c8 100644 --- a/src/resources/texture.cpp +++ b/src/resources/texture.cpp @@ -14,9 +14,10 @@ Texture::Texture(GFXDevice* gfxDevice, const std::string& path, Filtering filter int width, height; auto texbuf = util::readImageFile(path, &width, &height); - gfx::TextureFilter minFilter, magFilter; - gfx::MipmapSetting mipmapSetting; - bool anisotropyEnable; + gfx::TextureFilter minFilter = gfx::TextureFilter::NEAREST; + gfx::TextureFilter magFilter = gfx::TextureFilter::NEAREST; + gfx::MipmapSetting mipmapSetting = gfx::MipmapSetting::OFF; + bool anisotropyEnable = false; if (useLinearMagFilter) { magFilter = gfx::TextureFilter::LINEAR; diff --git a/test/src/game.cpp b/test/src/game.cpp index ff0d084..eb7dee7 100644 --- a/test/src/game.cpp +++ b/test/src/game.cpp @@ -76,8 +76,8 @@ void playGame() uint32_t enemy = myScene->createEntity("enemy"); auto enemyRenderable = myScene->addComponent(enemy); enemyRenderable->material = std::make_unique(app.getResource("engine.textured")); - enemyRenderable->material->m_texture = grassTexture; - enemyRenderable->mesh = genSphereMesh(app.gfx(), 5.0f, 50, false); + enemyRenderable->material->m_texture = app.getResource("engine.white"); + enemyRenderable->mesh = genSphereMesh(app.gfx(), 5.0f, 500, false); auto enemyT = myScene->getComponent(enemy); enemyT->position.x += 5.0f; enemyT->position.y += 2.0f; diff --git a/test/src/meshgen.cpp b/test/src/meshgen.cpp index e4f266f..0eff00b 100644 --- a/test/src/meshgen.cpp +++ b/test/src/meshgen.cpp @@ -68,11 +68,9 @@ std::unique_ptr genSphereMesh(engine::GFXDevice* gfx, f vec3 vector1 = (vertices.end() - 1)->pos - (vertices.end() - 2)->pos; vec3 vector2 = (vertices.end() - 2)->pos - (vertices.end() - 3)->pos; - vec3 norm = normalize(cross(vector1, vector2)); + vec3 norm = normalize(cross(vector2, vector1)); - // TODO: FIX NORMALS - if (!windInside) - norm = -norm; + // NORMALS HAVE BEEN FIXED if (flipNormals) norm = -norm;