From dfbc95ed250b278fa72a57dec089f40e457943f0 Mon Sep 17 00:00:00 2001 From: benkyd Date: Sat, 5 Nov 2022 16:41:51 +0000 Subject: [PATCH] =?UTF-8?q?some=20weird=20ass=20backwards=20ass=20bug=20?= =?UTF-8?q?=C2=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- res/shaders/basic.glsl | 21 ++++++++++++++++++++- src/inferno.cpp | 8 +++++++- src/preview_renderer/renderer.cpp | 9 ++++++++- src/window.cpp | 3 +++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/res/shaders/basic.glsl b/res/shaders/basic.glsl index b4fdfac..9fd522c 100644 --- a/res/shaders/basic.glsl +++ b/res/shaders/basic.glsl @@ -9,8 +9,10 @@ uniform mat4 view; uniform mat4 proj; out vec3 vNormal; +out vec3 vFragPos; void main() { + vFragPos = vec3(model * vec4(position, 1.0)); vNormal = normal; gl_Position = proj * view * model * vec4(position, 1.0); } @@ -21,7 +23,24 @@ void main() { layout(location = 0) out vec4 outColour; in vec3 vNormal; +in vec3 vFragPos; + +vec3 lightColour = {1.0, 1.0, 1.0}; +vec3 lightPos = {12.0, 2.0, 4.0}; +vec3 objectColour = {1.0, 0.5, 0.4}; void main() { - outColour = vec4(vNormal, 1.0); + // ambient + float ambientStrength = 0.1; + vec3 ambient = ambientStrength * lightColour; + + // diffuse + vec3 norm = normalize(vNormal); + vec3 lightDir = normalize(lightPos - vFragPos); + float diff = max(dot(norm, lightDir), 0.0); + vec3 diffuse = diff * lightColour; + + vec3 result = (ambient + diffuse) * objectColour; + + outColour = vec4(result, 1.0); } diff --git a/src/inferno.cpp b/src/inferno.cpp index 9d03e88..d954d4a 100644 --- a/src/inferno.cpp +++ b/src/inferno.cpp @@ -86,16 +86,22 @@ int Inferno::run() Camera camera; Mesh cornell; - cornell.loadOBJ("res/cornell.obj"); + cornell.loadOBJ("res/cornell-box.obj"); cornell.ready(); + Mesh dragon; + dragon.loadOBJ("res/dragon-cornell-size.obj"); + dragon.ready(); + Material basicMaterial("basic"); Shader basicShader; basicShader.load("res/shaders/basic.glsl")->link(); basicMaterial.setGlShader(&basicShader); cornell.setMaterial(&basicMaterial); + dragon.setMaterial(&basicMaterial); mScene->addMesh(&cornell); + mScene->addMesh(&dragon); mScene->setCamera(&camera); mRasterRenderer->setScene(mScene); diff --git a/src/preview_renderer/renderer.cpp b/src/preview_renderer/renderer.cpp index 932fae7..7c0f0d9 100644 --- a/src/preview_renderer/renderer.cpp +++ b/src/preview_renderer/renderer.cpp @@ -18,7 +18,10 @@ RasterizeRenderer::RasterizeRenderer() glGenTextures(1, &mRenderTargetTexture); glBindTexture(GL_TEXTURE_2D, mRenderTargetTexture); - + + glEnable(GL_DEPTH_TEST); + glDisable(GL_CULL_FACE); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 800, 600, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); @@ -42,6 +45,10 @@ void RasterizeRenderer::setScene(Scene* scene) void RasterizeRenderer::setTargetSize(glm::vec2 size) { + glBindFramebuffer(GL_FRAMEBUFFER, mRenderTarget); + glBindTexture(GL_TEXTURE_2D, mRenderTargetTexture); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, size.x, size.y, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); + glBindFramebuffer(GL_FRAMEBUFFER, 0); mRenderTargetSize = size; } diff --git a/src/window.cpp b/src/window.cpp index 1fae940..b54823a 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -140,6 +140,9 @@ void Window::setupGLFW(std::string title) glfwMakeContextCurrent(window); gladLoadGLLoader((GLADloadproc)glfwGetProcAddress); glfwSwapInterval(1); // Enable vsync + + glEnable(GL_DEPTH_TEST); + glDisable(GL_CULL_FACE); } void Window::setupImGui()