This commit is contained in:
Tleety
2014-05-07 14:23:01 +00:00
parent 4389f2db4c
commit b1b60bce61
8 changed files with 203 additions and 49 deletions
+1 -1
View File
@@ -30,7 +30,7 @@ void main()
//FragColor = texture2D(DiffuseTexture, Input.TextureCoord * 2 + vec2(0, -1));
DrawQuadrant(texture2D(DiffuseTexture, Input.TextureCoord * 2), vec2(-1, 1));
DrawQuadrant(texture2D(PositionTexture, Input.TextureCoord * 2), vec2(1, 1));
DrawQuadrant(texture2D(NormalTexture, Input.TextureCoord * 2), vec2(-1, -1));
DrawQuadrant((texture2D(NormalTexture, Input.TextureCoord * 2)+1)/2, vec2(-1, -1));
vec4 AllTexel = texture2D(DiffuseTexture, Input.TextureCoord*2)*texture2D(PositionTexture, Input.TextureCoord*2)*texture2D(NormalTexture, Input.TextureCoord*2);
DrawQuadrant(AllTexel, vec2(1, -1));
+76 -1
View File
@@ -4,6 +4,20 @@ layout (binding=0) uniform sampler2D DiffuseTexture;
layout (binding=1) uniform sampler2D PositionTexture;
layout (binding=2) uniform sampler2D NormalTexture;
uniform mat4 MVP;
uniform mat4 M;
uniform mat4 V;
uniform mat4 P;
uniform vec3 ls;
uniform vec3 ld;
uniform vec3 lp;
const float specularExponent = 20.0;
uniform vec3 CameraPosition;
const vec3 kd = vec3(1.0, 1.0, 1.0);
const vec3 ks = vec3(1.0, 1.0, 1.0);
const float kshine = 1.0;
in VertexData
{
vec3 Position;
@@ -13,7 +27,68 @@ in VertexData
out vec4 FragColor;
vec3 phong (vec3 PositionTexel, vec3 NormalTexel)
{
vec3 lightPosition = vec3( M * vec4( lp, 1.0 ) );
vec3 distToLight = lightPosition - PositionTexel;
vec3 directionToLight = normalize(distToLight);
//Diffuse light
float dotProdDiffuse = max(dot(directionToLight, NormalTexel), 0.0);
vec3 Id = ld * kd * dotProdDiffuse; //Final diffuse intensity
//Specular light
vec3 reflection = reflect(-directionToLight, NormalTexel);
vec3 surfaceToCamera = normalize(PositionTexel);
vec3 HalfWay = normalize(surfaceToCamera + directionToLight);
float dotProdSpecular = dot(HalfWay, NormalTexel);
dotProdSpecular = max(dotProdSpecular, 0.0);
float specularFactor = pow(dotProdSpecular, specularExponent);
vec3 Is = ls * ks * specularFactor; //Final specular intensity
//Attenuation
float dist2D = distance(lightPosition, PositionTexel);
float attenuationFactor = -log(min(1.0, dist2D / 5.0));
//vec3 FinalOut = (Id + Is) * attenuationFactor;
vec3 FinalOut = Id + Is;
return FinalOut;
}
vec3 phong2 (vec3 PositionTexel, vec3 NormalTexel)
{
vec3 LightVector = lp - PositionTexel;
vec3 ViewVector = normalize(PositionTexel);
//diffuse
vec3 Id = max(0.0, dot(LightVector, NormalTexel)) * ld;
vec3 FinalOut = Id;
return FinalOut;
}
vec3 phong3 (vec3 PositionTexel, vec3 NormalTexel)
{
vec3 lightDir = lp - PositionTexel;
lightDir = normalize(lightDir);
vec3 eyeDir = normalize(CameraPosition-PositionTexel);
vec3 vHalfVector = normalize(lightDir.xyz+eyeDir);
vec3 Id = max(0.0, dot(NormalTexel, lightDir)) * ld;
vec3 Is = pow(max(0.0, dot(NormalTexel, vHalfVector)), 100.0) * ls;
vec3 FinalFrag = Id + Is;
return FinalFrag;
}
void main()
{
FragColor = texture2D(DiffuseTexture, Input.TextureCoord);
vec4 DiffuseTexel = texture2D(DiffuseTexture, Input.TextureCoord);
vec4 PositionTexel = texture2D(PositionTexture, Input.TextureCoord);
vec4 NormalTexel = texture2D(NormalTexture, Input.TextureCoord);
vec4 Frag_color;
Frag_color.rgb = phong((MVP * PositionTexel).rgb, normalize(NormalTexel).rgb);
Frag_color.a = 1.0;
FragColor = Frag_color * DiffuseTexel;
}
+3 -1
View File
@@ -3,6 +3,8 @@
layout (location = 0) in vec3 Position;
layout (location = 2) in vec2 TextureCoord;
out VertexData
{
vec3 Position;
@@ -11,7 +13,7 @@ out VertexData
void main()
{
gl_Position = vec4(Position, 1.0);
gl_Position = vec4(Position, 1.0);
Output.Position = Position;
Output.TextureCoord = TextureCoord;
}