From 3239ba18797b1aa098056aa0c2a70e250a27a06c Mon Sep 17 00:00:00 2001 From: chai Date: Sun, 24 Oct 2021 13:24:13 +0800 Subject: * port shader --- Resources/Scripts/Editor/AssetBrowser.lua | 7 ++- Resources/Scripts/EditorApplication.lua | 90 +++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 2 deletions(-) (limited to 'Resources/Scripts') diff --git a/Resources/Scripts/Editor/AssetBrowser.lua b/Resources/Scripts/Editor/AssetBrowser.lua index 07cead4..ee6de6a 100644 --- a/Resources/Scripts/Editor/AssetBrowser.lua +++ b/Resources/Scripts/Editor/AssetBrowser.lua @@ -3,14 +3,17 @@ local AssetBrowser = GameLab.Editor.GUI.EditorWindow.Extend("AssetBrowser", "Gam AssetBrowser.Ctor = function(self) self.base.Ctor(self, "AssetBrowser") + end AssetBrowser.OnGUI = function(self) - Debug.Log("AssetBrowser.OnGUI()" .. self.title) + + end AssetBrowser.OnFocus = function(self) - Debug.Log("AssetBrowser.OnFocus()" .. self.title) + + end return AssetBrowser \ No newline at end of file diff --git a/Resources/Scripts/EditorApplication.lua b/Resources/Scripts/EditorApplication.lua index 8a175db..92bc5b9 100644 --- a/Resources/Scripts/EditorApplication.lua +++ b/Resources/Scripts/EditorApplication.lua @@ -39,6 +39,96 @@ local V4 = GameLab.Engine.Math.Vector4.Extend("V4", "GameLab.Engine.Math") Debug.Log(EditorWindowManager.name) +local vert = [[ + #version 330 core + layout (location = 0) in vec3 aPos; + layout (location = 1) in vec3 aNormal; + layout (location = 2) in vec2 aTexCoords; + layout (location = 3) in vec3 aTangent; + layout (location = 4) in vec3 aBitangent; + + out VS_OUT { + vec3 FragPos; + vec2 TexCoords; + vec3 TangentLightPos; + vec3 TangentViewPos; + vec3 TangentFragPos; + } vs_out; + + uniform mat4 projection; + uniform mat4 view; + uniform mat4 model; + + uniform vec3 lightPos; + uniform vec3 viewPos; + + void main() + { + vs_out.FragPos = vec3(model * vec4(aPos, 1.0)); + vs_out.TexCoords = aTexCoords; + + mat3 normalMatrix = transpose(inverse(mat3(model))); + vec3 T = normalize(normalMatrix * aTangent); + vec3 N = normalize(normalMatrix * aNormal); + T = normalize(T - dot(T, N) * N); + vec3 B = cross(N, T); + + mat3 TBN = transpose(mat3(T, B, N)); + vs_out.TangentLightPos = TBN * lightPos; + vs_out.TangentViewPos = TBN * viewPos; + vs_out.TangentFragPos = TBN * vs_out.FragPos; + + gl_Position = projection * view * model * vec4(aPos, 1.0); + } +]] + +local frag = [[ + #version 330 core + out vec4 FragColor; + + in VS_OUT { + vec3 FragPos; + vec2 TexCoords; + vec3 TangentLightPos; + vec3 TangentViewPos; + vec3 TangentFragPos; + } fs_in; + + uniform sampler2D diffuseMap; + uniform sampler2D normalMap; + + uniform vec3 lightPos; + uniform vec3 viewPos; + + void main() + { + // obtain normal from normal map in range [0,1] + vec3 normal = texture(normalMap, fs_in.TexCoords).rgb; + // transform normal vector to range [-1,1] + normal = normalize(normal * 2.0 - 1.0); // this normal is in tangent space + + // get diffuse color + vec3 color = texture(diffuseMap, fs_in.TexCoords).rgb; + // ambient + vec3 ambient = 0.1 * color; + // diffuse + vec3 lightDir = normalize(fs_in.TangentLightPos - fs_in.TangentFragPos); + float diff = max(dot(lightDir, normal), 0.0); + vec3 diffuse = diff * color; + // specular + vec3 viewDir = normalize(fs_in.TangentViewPos - fs_in.TangentFragPos); + vec3 reflectDir = reflect(-lightDir, normal); + vec3 halfwayDir = normalize(lightDir + viewDir); + float spec = pow(max(dot(normal, halfwayDir), 0.0), 32.0); + + vec3 specular = vec3(0.2) * spec; + FragColor = vec4(ambient + diffuse + specular, 1.0); + } +]] + +local shader = GameLab.Engine.Rendering.Shader.New(vert, frag) +Debug.Log("shader is " .. inspect(shader:IsValid())) + while true do app:PullMessage() -- cgit v1.1-26-g67d0