1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

0024344: TKOpenGl - only front side is lighted within Phong GLSL program

This commit is contained in:
apl
2013-11-13 21:09:55 +04:00
committed by bugmaster
parent 4fe9ad57df
commit c90e941f78
2 changed files with 52 additions and 9 deletions

View File

@@ -46,13 +46,14 @@ void pointLight (in int theId,
vec3 aHalf = normalize (aLight + theView);
float aNdotL = max (0.0, dot (theNormal, aLight));
float aNdotH = max (0.0, dot (theNormal, aHalf ));
vec3 aFaceSideNormal = gl_FrontFacing ? theNormal : -theNormal;
float aNdotL = max (0.0, dot (aFaceSideNormal, aLight));
float aNdotH = max (0.0, dot (aFaceSideNormal, aHalf ));
float aSpecl = 0.0;
if (aNdotL > 0.0)
{
aSpecl = pow (aNdotH, occFrontMaterial_Shininess());
aSpecl = pow (aNdotH, gl_FrontFacing ? occFrontMaterial_Shininess() : occBackMaterial_Shininess());
}
Diffuse += occLight_Diffuse (theId).rgb * aNdotL * anAtten;
@@ -71,13 +72,15 @@ void directionalLight (in int theId,
}
vec3 aHalf = normalize (aLight + theView);
float aNdotL = max (0.0, dot (theNormal, aLight));
float aNdotH = max (0.0, dot (theNormal, aHalf ));
vec3 aFaceSideNormal = gl_FrontFacing ? theNormal : -theNormal;
float aNdotL = max (0.0, dot (aFaceSideNormal, aLight));
float aNdotH = max (0.0, dot (aFaceSideNormal, aHalf ));
float aSpecl = 0.0;
if (aNdotL > 0.0)
{
aSpecl = pow (aNdotH, occFrontMaterial_Shininess());
aSpecl = pow (aNdotH, gl_FrontFacing ? occFrontMaterial_Shininess() : occBackMaterial_Shininess());
}
Diffuse += occLight_Diffuse (theId).rgb * aNdotL;
@@ -111,9 +114,12 @@ vec4 computeLighting (in vec3 theNormal,
}
}
return vec4 (Ambient, 1.0) * occFrontMaterial_Ambient()
+ vec4 (Diffuse, 1.0) * occFrontMaterial_Diffuse()
+ vec4 (Specular, 1.0) * occFrontMaterial_Specular();
vec4 aMaterialAmbient = gl_FrontFacing ? occFrontMaterial_Ambient() : occBackMaterial_Ambient();
vec4 aMaterialDiffuse = gl_FrontFacing ? occFrontMaterial_Diffuse() : occBackMaterial_Diffuse();
vec4 aMaterialSpecular = gl_FrontFacing ? occFrontMaterial_Specular() : occBackMaterial_Specular();
return vec4 (Ambient, 1.0) * aMaterialAmbient
+ vec4 (Diffuse, 1.0) * aMaterialDiffuse
+ vec4 (Specular, 1.0) * aMaterialSpecular;
}
//! Entry point to the Fragment Shader