From 3158ced31bb0be599b74fd7d9ef7fefa605af4c4 Mon Sep 17 00:00:00 2001
From: Linloir <3145078758@qq.com>
Date: Sun, 18 Dec 2022 10:05:02 +0800
Subject: [PATCH] [CORE][CHG] Shader update - Update shader to accept multiple
lights - Add light count uniform - Clean up code
---
FinalProject/FinalProject.vcxproj | 13 +++---
FinalProject/FinalProject.vcxproj.filters | 16 +-------
...{fragmentshader.fs => fragmentshader.glsl} | 41 ++++++++++---------
FinalProject/illuminant.fs | 0
FinalProject/illuminant.vs | 11 -----
.../{vertexshader.vs => vertexshader.glsl} | 0
6 files changed, 31 insertions(+), 50 deletions(-)
rename FinalProject/{fragmentshader.fs => fragmentshader.glsl} (81%)
delete mode 100644 FinalProject/illuminant.fs
delete mode 100644 FinalProject/illuminant.vs
rename FinalProject/{vertexshader.vs => vertexshader.glsl} (100%)
diff --git a/FinalProject/FinalProject.vcxproj b/FinalProject/FinalProject.vcxproj
index ede62bd..17070a7 100644
--- a/FinalProject/FinalProject.vcxproj
+++ b/FinalProject/FinalProject.vcxproj
@@ -109,7 +109,6 @@
-
@@ -145,7 +144,6 @@
-
@@ -168,10 +166,13 @@
-
-
-
-
+
+
+
+
+
+
+
diff --git a/FinalProject/FinalProject.vcxproj.filters b/FinalProject/FinalProject.vcxproj.filters
index a4b9fad..8ca5770 100644
--- a/FinalProject/FinalProject.vcxproj.filters
+++ b/FinalProject/FinalProject.vcxproj.filters
@@ -165,9 +165,6 @@
Source Files\Qt Widgets\Pages\Scene Editor\Object Selector
-
- Source Files\OpenGL Abstractions
-
Source Files\OpenGL Abstractions
@@ -212,9 +209,6 @@
Header Files\Qt Widgets\Pages\Scene Editor\Object Setter
-
- Header Files\OpenGL Abstractions
-
Header Files\OpenGL Abstractions
@@ -264,16 +258,10 @@
-
+
Resource Files
-
- Resource Files
-
-
- Resource Files
-
-
+
Resource Files
diff --git a/FinalProject/fragmentshader.fs b/FinalProject/fragmentshader.glsl
similarity index 81%
rename from FinalProject/fragmentshader.fs
rename to FinalProject/fragmentshader.glsl
index 5dbf34b..414b2a8 100644
--- a/FinalProject/fragmentshader.fs
+++ b/FinalProject/fragmentshader.glsl
@@ -42,18 +42,24 @@ struct SpotLight {
vec3 specular;
};
-#define NR_POINT_LIGHTS 4
+#define MAX_DIR_LIGHTS 1
+#define MAX_POINT_LIGHTS 128
+#define MAX_SPOT_LIGHTS 128
in vec3 FragPos;
in vec3 Normal;
in vec2 TexCoords;
+uniform Material material;
uniform vec3 viewPos;
-uniform DirLight dirLight;
-uniform PointLight pointLights[NR_POINT_LIGHTS];
-uniform SpotLight spotLight;
-uniform Material material;
+
+uniform int dirlightnr;
+uniform int pointlightnr;
+uniform int spotlightnr;
+uniform DirLight dirlights[MAX_DIR_LIGHTS];
+uniform PointLight pointlights[MAX_POINT_LIGHTS];
+uniform SpotLight spotlights[MAX_SPOT_LIGHTS];
// function prototypes
vec3 CalcDirLight(DirLight light, vec3 normal, vec3 viewDir);
@@ -66,19 +72,16 @@ void main()
vec3 norm = normalize(Normal);
vec3 viewDir = normalize(viewPos - FragPos);
- // == =====================================================
- // Our lighting is set up in 3 phases: directional, point lights and an optional flashlight
- // For each phase, a calculate function is defined that calculates the corresponding color
- // per lamp. In the main() function we take all the calculated colors and sum them up for
- // this fragment's final color.
- // == =====================================================
+ vec3 result = vec3(0.0);
// phase 1: directional lighting
- vec3 result = CalcDirLight(dirLight, norm, viewDir);
+ for (int i = 0; i < dirlightnr; i++)
+ result += CalcDirLight(dirlights[i], norm, viewDir);
// phase 2: point lights
- for(int i = 0; i < NR_POINT_LIGHTS; i++)
- result += CalcPointLight(pointLights[i], norm, FragPos, viewDir);
- // phase 3: spot light
- result += CalcSpotLight(spotLight, norm, FragPos, viewDir);
+ for (int i = 0; i < pointlightnr; i++)
+ result += CalcPointLight(pointlights[i], norm, FragPos, viewDir);
+ // // phase 3: spot light
+ // for (int i = 0; i < spotlightnr; i++)
+ // result += CalcSpotLight(spotlights[i], norm, FragPos, viewDir);
FragColor = vec4(result, 1.0);
}
@@ -95,7 +98,7 @@ vec3 CalcDirLight(DirLight light, vec3 normal, vec3 viewDir)
// combine results
vec3 ambient = light.ambient * vec3(texture(material.texture_diffuse1, TexCoords));
vec3 diffuse = light.diffuse * diff * vec3(texture(material.texture_diffuse1, TexCoords));
- vec3 specular = light.specular * spec * vec3(texture(material.texture_specular1, TexCoords));
+ vec3 specular = light.specular * spec * vec3(texture(material.texture_specular1, TexCoords).x);
return (ambient + diffuse + specular);
}
@@ -114,7 +117,7 @@ vec3 CalcPointLight(PointLight light, vec3 normal, vec3 fragPos, vec3 viewDir)
// combine results
vec3 ambient = light.ambient * vec3(texture(material.texture_diffuse1, TexCoords));
vec3 diffuse = light.diffuse * diff * vec3(texture(material.texture_diffuse1, TexCoords));
- vec3 specular = light.specular * spec * vec3(texture(material.texture_specular1, TexCoords));
+ vec3 specular = light.specular * spec * vec3(texture(material.texture_specular1, TexCoords).x);
ambient *= attenuation;
diffuse *= attenuation;
specular *= attenuation;
@@ -140,7 +143,7 @@ vec3 CalcSpotLight(SpotLight light, vec3 normal, vec3 fragPos, vec3 viewDir)
// combine results
vec3 ambient = light.ambient * vec3(texture(material.texture_diffuse1, TexCoords));
vec3 diffuse = light.diffuse * diff * vec3(texture(material.texture_diffuse1, TexCoords));
- vec3 specular = light.specular * spec * vec3(texture(material.texture_specular1, TexCoords));
+ vec3 specular = light.specular * spec * vec3(texture(material.texture_specular1, TexCoords).x);
ambient *= attenuation * intensity;
diffuse *= attenuation * intensity;
specular *= attenuation * intensity;
diff --git a/FinalProject/illuminant.fs b/FinalProject/illuminant.fs
deleted file mode 100644
index e69de29..0000000
diff --git a/FinalProject/illuminant.vs b/FinalProject/illuminant.vs
deleted file mode 100644
index c875a90..0000000
--- a/FinalProject/illuminant.vs
+++ /dev/null
@@ -1,11 +0,0 @@
-#version 430 core
-layout (location = 0) in vec3 aPos;
-
-uniform mat4 model;
-uniform mat4 view;
-uniform mat4 projection;
-
-void main()
-{
- gl_Position = projection * view * model * vec4(aPos, 1.0);
-}
\ No newline at end of file
diff --git a/FinalProject/vertexshader.vs b/FinalProject/vertexshader.glsl
similarity index 100%
rename from FinalProject/vertexshader.vs
rename to FinalProject/vertexshader.glsl