From 7fa74d1020c6cc98753da3df469525c64ac8c3c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=B6bius?= Date: Thu, 10 Jan 2013 08:24:47 +0000 Subject: [PATCH] Christopher: Render interface updated to simplify the creation of new render-plugins New Depth Peeling Renderer based on the new interface Simplified Shader Pipeline Renderer due to the changes in IRenderrer Jan: Split RenderObject out of IRenderer File Updated Documentation of IRenderer refs #1377 git-svn-id: http://www.openflipper.org/svnrepo/OpenFlipper/branches/Free@16081 383ad7c9-94d9-4d36-a494-682f7c89f535 --- CMakeLists.txt | 2 + Shaders/ShaderGen/SG_LIGHTING.GLSL | 104 +++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 Shaders/ShaderGen/SG_LIGHTING.GLSL diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..bfe21ca --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,2 @@ +include (plugin) +openflipper_plugin ( INSTALLDATA Shaders ) diff --git a/Shaders/ShaderGen/SG_LIGHTING.GLSL b/Shaders/ShaderGen/SG_LIGHTING.GLSL new file mode 100644 index 0000000..3d09276 --- /dev/null +++ b/Shaders/ShaderGen/SG_LIGHTING.GLSL @@ -0,0 +1,104 @@ + +#define SHININESS g_vMaterial.x +#define TRANSPARENCY g_vMaterial.y +#define ALPHA g_vMaterial.y + +vec3 LitPointLight(vec3 vPosition, + vec3 vNormal, + vec3 vLightPos, + vec3 cLightAmbient, + vec3 cLightDiffuse, + vec3 cLightSpecular, + vec3 vLightAtten) +{ + vec3 vLightVS = vPosition - vLightPos; + float fLen2 = dot(vLightVS, vLightVS); + float fLen = sqrt(fLen2); + + vec3 vLightDir = vLightVS / fLen; + + // ambient + vec3 cLight = cLightAmbient * g_cAmbient; + + // diffuse + float ldotn = clamp(dot(vLightDir, vNormal), 0.0, 1.0); + cLight += ldotn * cLightDiffuse * g_cDiffuse; + + // specular + vec3 h = normalize(vLightDir - normalize(vPosition)); // half vector between light and view direction + float hdotn = max(dot(h, vNormal), 0.0); + cLight += (pow(hdotn, SHININESS) * cLightSpecular) * g_cSpecular; + + + // attenuate + float fAtten = vLightAtten.x + vLightAtten.y * fLen + vLightAtten.z * fLen2; + + return cLight / fAtten; +} + + +vec3 LitDirLight(vec3 vPosition, + vec3 vNormal, + vec3 vLightDir, + vec3 cLightAmbient, + vec3 cLightDiffuse, + vec3 cLightSpecular) +{ + // ambient + vec3 cLight = cLightAmbient * g_cAmbient; + + // diffuse + float ldotn = clamp(dot(vLightDir, vNormal), 0.0, 1.0); + cLight += ldotn * cLightDiffuse * g_cDiffuse; + + // specular + vec3 h = normalize(vLightDir - normalize(vPosition)); // half vector between light and view direction + float hdotn = max(dot(h, vNormal), 0.0); + cLight += (pow(hdotn, SHININESS) * cLightSpecular) * g_cSpecular; + + return cLight; +} + + + +vec3 LitSpotLight(vec3 vPosition, + vec3 vNormal, + vec3 vLightPos, + vec3 vSpotLightDir, + vec3 cLightAmbient, + vec3 cLightDiffuse, + vec3 cLightSpecular, + vec3 vLightAtten, + vec2 vLightSpotAngleExp) +{ + vec3 vLightVS = vPosition - vLightPos; + float fLen2 = dot(vLightVS, vLightVS); + float fLen = sqrt(fLen2); + + vec3 vLightDir = vLightVS / fLen; + + // ambient + vec3 cLight = cLightAmbient * g_cAmbient; + + // diffuse + float ldotn = clamp(dot(vLightDir, vNormal), 0.0, 1.0); + cLight += ldotn * cLightDiffuse * g_cDiffuse; + + // specular + vec3 h = normalize(vLightDir - normalize(vPosition)); // half vector between light and view direction + float hdotn = max(dot(h, vNormal), 0.0); + cLight += (pow(hdotn, SHININESS) * cLightSpecular) * g_cSpecular; + + + + // attenuate + float fAtten = vLightAtten.x + vLightAtten.y * fLen + vLightAtten.z * fLen2; + + // spot angle falloff + float fSpot = -dot(vLightDir, vSpotLightDir); + fSpot *= step(vLightSpotAngleExp.x, fSpot); + fSpot *= pow(fSpot, vLightSpotAngleExp.y); + + return cLight * (fSpot / fAtten); +} + -- GitLab