diff options
author | chai <chaifix@163.com> | 2021-10-24 13:24:13 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-10-24 13:24:13 +0800 |
commit | 3239ba18797b1aa098056aa0c2a70e250a27a06c (patch) | |
tree | cb42710213cd188dd5f7c7841693c9ebe1b1915a /Resources/Scripts | |
parent | 7bf672fd0c6211909d94078b448032b1bd0916ef (diff) |
* port shader
Diffstat (limited to 'Resources/Scripts')
-rw-r--r-- | Resources/Scripts/Editor/AssetBrowser.lua | 7 | ||||
-rw-r--r-- | Resources/Scripts/EditorApplication.lua | 90 |
2 files changed, 95 insertions, 2 deletions
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() |