@ -1,20 +1,26 @@ | |||||
#version 100 | #version 100 | ||||
// Input vertex attributes | |||||
attribute vec3 vertexPosition; | attribute vec3 vertexPosition; | ||||
attribute vec2 vertexTexCoord; | attribute vec2 vertexTexCoord; | ||||
attribute vec3 vertexNormal; | attribute vec3 vertexNormal; | ||||
attribute vec4 vertexColor; | |||||
varying vec2 fragTexCoord; | // Input uniform values | ||||
uniform mat4 mvpMatrix; | uniform mat4 mvpMatrix; | ||||
// Output vertex attributes (to fragment shader) | |||||
varying vec2 fragTexCoord; | |||||
varying vec4 fragColor; | |||||
// NOTE: Add here your custom variables | // NOTE: Add here your custom variables | ||||
void main() | void main() | ||||
{ | { | ||||
vec3 normal = vertexNormal; | // Send vertex attributes to fragment shader | ||||
fragTexCoord = vertexTexCoord; | fragTexCoord = vertexTexCoord; | ||||
fragColor = vertexColor; | |||||
// Calculate final vertex position | |||||
gl_Position = mvpMatrix*vec4(vertexPosition, 1.0); | gl_Position = mvpMatrix*vec4(vertexPosition, 1.0); | ||||
} | } |
@ -1,18 +1,26 @@ | |||||
#version 330 | #version 330 | ||||
// Input vertex attributes | |||||
in vec3 vertexPosition; | in vec3 vertexPosition; | ||||
in vec2 vertexTexCoord; | in vec2 vertexTexCoord; | ||||
in vec3 vertexNormal; | in vec3 vertexNormal; | ||||
in vec4 vertexColor; | |||||
out vec2 fragTexCoord; | // Input uniform values | ||||
uniform mat4 mvpMatrix; | uniform mat4 mvpMatrix; | ||||
// Output vertex attributes (to fragment shader) | |||||
out vec2 fragTexCoord; | |||||
out vec4 fragColor; | |||||
// NOTE: Add here your custom variables | // NOTE: Add here your custom variables | ||||
void main() | void main() | ||||
{ | { | ||||
// Send vertex attributes to fragment shader | |||||
fragTexCoord = vertexTexCoord; | fragTexCoord = vertexTexCoord; | ||||
fragColor = vertexColor; | |||||
// Calculate final vertex position | |||||
gl_Position = mvpMatrix*vec4(vertexPosition, 1.0); | gl_Position = mvpMatrix*vec4(vertexPosition, 1.0); | ||||
} | } |
@ -0,0 +1,27 @@ | |||||
#version 330 | |||||
// Input vertex attributes (from vertex shader) | |||||
in vec2 fragTexCoord; | |||||
in vec4 fragColor; | |||||
// Input uniform values | |||||
uniform sampler2D texture0; // Depth texture | |||||
uniform vec4 fragTintColor; | |||||
// Output fragment color | |||||
out vec4 finalColor; | |||||
// NOTE: Add here your custom variables | |||||
void main() | |||||
{ | |||||
float zNear = 0.01; // camera z near | |||||
float zFar = 10.0; // camera z far | |||||
float z = texture(texture0, fragTexCoord).x; | |||||
// Linearize depth value | |||||
float depth = (2.0*zNear)/(zFar + zNear - z*(zFar - zNear)); | |||||
// Calculate final fragment color | |||||
finalColor = vec4(depth, depth, depth, 1.0f); | |||||
} |
@ -1,20 +1,26 @@ | |||||
#version 330 | #version 330 | ||||
// Input vertex attributes (from vertex shader) | |||||
in vec2 fragTexCoord; | in vec2 fragTexCoord; | ||||
in vec4 fragColor; | |||||
out vec4 fragColor; | // Input uniform values | ||||
uniform sampler2D texture0; | uniform sampler2D texture0; | ||||
uniform vec4 fragTintColor; | uniform vec4 fragTintColor; | ||||
// Output fragment color | |||||
out vec4 finalColor; | |||||
// NOTE: Add here your custom variables | // NOTE: Add here your custom variables | ||||
void main() | void main() | ||||
{ | { | ||||
vec4 base = texture(texture0, fragTexCoord)*fragTintColor; | // Texel color fetching from texture sampler | ||||
vec4 texelColor = texture(texture0, fragTexCoord)*fragTintColor*fragColor; | |||||
// Convert to grayscale using NTSC conversion weights | // Convert nf">texel color to grayscale using NTSC conversion weights | ||||
float gray = dot(base.rgb, vec3(0.299, 0.587, 0.114)); | float gray = dot(texelColor.rgb, vec3(0.299, 0.587, 0.114)); | ||||
fragColor = vec4(gray, gray, gray, fragTintColor.a); | // Calculate final fragment color | ||||
finalColor = vec4(gray, gray, gray, texelColor.a); | |||||
} | } |
@ -1,76 +1,85 @@ | |||||
#version 330 | #version 330 | ||||
// Vertex shader input data | // Input vertex attributes (from vertex shader) | ||||
in vec2 fragTexCoord; | in vec2 fragTexCoord; | ||||
in vec3 fragNormal; | in vec3 fragNormal; | ||||
// Diffuse data | // Input uniform values | ||||
uniform sampler2D texture0; | uniform sampler2D texture0; | ||||
uniform vec4 fragTintColor; | uniform vec4 fragTintColor; | ||||
// Light attributes | // Output fragment color | ||||
uniform vec3 light_ambientColor = vec3(0.6, 0.3, 0); | out vec4 finalColor; | ||||
uniform vec3 light_diffuseColor = vec3(1, 0.5, 0); | |||||
uniform vec3 light_specularColor = vec3(0, 1, 0); | |||||
uniform float light_intensity = 1; | |||||
uniform float light_specIntensity = 1; | |||||
// Material attributes | // NOTE: Add here your custom variables | ||||
uniform vec3 mat_ambientColor = vec3(1, 1, 1); | |||||
uniform vec3 mat_specularColor = vec3(1, 1, 1); | |||||
uniform float mat_glossiness = 50; | |||||
// World attributes | // Light uniform values | ||||
uniform vec3 lightPos; | uniform vec3 lightAmbientColor = vec3(0.6, 0.3, 0.0); | ||||
uniform vec3 cameraPos; | uniform vec3 lightDiffuseColor = vec3(1.0, 0.5, 0.0); | ||||
uniform vec3 lightSpecularColor = vec3(0.0, 1.0, 0.0); | |||||
uniform float lightIntensity = 1.0; | |||||
uniform float lightSpecIntensity = 1.0; | |||||
// Material uniform values | |||||
uniform vec3 matAmbientColor = vec3(1.0, 1.0, 1.0); | |||||
uniform vec3 matSpecularColor = vec3(1.0, 1.0, 1.0); | |||||
uniform float matGlossiness = 50.0; | |||||
// World uniform values | |||||
uniform vec3 lightPosition; | |||||
uniform vec3 cameraPosition; | |||||
// Fragment shader output data | // Fragment shader output data | ||||
out vec4 fragColor; | out vec4 fragColor; | ||||
// Calculate ambient lighting component | |||||
vec3 AmbientLighting() | vec3 AmbientLighting() | ||||
{ | { | ||||
return mat_ambientColor * light_ambientColor; | return (matAmbientColor*lightAmbientColor); | ||||
} | } | ||||
// Calculate diffuse lighting component | |||||
vec3 DiffuseLighting(in vec3 N, in vec3 L) | vec3 DiffuseLighting(in vec3 N, in vec3 L) | ||||
{ | { | ||||
// Lambertian reflection calculation | // Lambertian reflection calculation | ||||
float diffuse = clamp(dot(N, L), 0, 1); | float diffuse = clamp(dot(N, L), 0, 1); | ||||
return (fragTintColor.xyz*lightDiffuseColor*lightIntensity*diffuse); | |||||
return tintColor.xyz * light_diffuseColor * light_intensity * diffuse; | |||||
} | } | ||||
// Calculate specular lighting component | |||||
vec3 SpecularLighting(in vec3 N, in vec3 L, in vec3 V) | vec3 SpecularLighting(in vec3 N, in vec3 L, in vec3 V) | ||||
{ | { | ||||
float specular = 0; | float specular = 0.0; | ||||
// Calculate specular reflection only if the surface is oriented to the light source | |||||
// Calculate specular reflection only if the surface is oriented to the light source | if (dot(N, L) > 0) | ||||
if(dot(N, L) > 0) | { | ||||
{ | // Calculate half vector | ||||
// Calculate half vector | vec3 H = normalize(L + V); | ||||
vec3 H = normalize(L + V); | // Calculate specular intensity | ||||
specular = pow(dot(N, H), 3 + matGlossiness); | |||||
// Calculate specular intensity | } | ||||
specular = pow(dot(N, H), 3 + mat_glossiness); | |||||
} | |||||
return mat_specularColor * light_specularColor * light_specIntensity * specular; | return (matSpecularColor*lightSpecularColor*lightSpecIntensity*specular); | ||||
} | } | ||||
void main() | void main() | ||||
{ | { | ||||
// Normalize input vectors | // Normalize input vectors | ||||
vec3 L = normalize(lightPos); | vec3 L = normalize(lightPosition); | ||||
vec3 V = normalize(cameraPos); | vec3 V = normalize(cameraPosition); | ||||
vec3 N = normalize(fragNormal); | vec3 N = normalize(fragNormal); | ||||
// Calculate lighting components | |||||
vec3 ambient = AmbientLighting(); | vec3 ambient = AmbientLighting(); | ||||
vec3 diffuse = DiffuseLighting(N, L); | vec3 diffuse = DiffuseLighting(N, L); | ||||
vec3 specular = SpecularLighting(N, L, V); | vec3 specular = SpecularLighting(N, L, V); | ||||
// Get base color from texture | // Texel color fetching from texture sampler | ||||
vec4 textureColor = texture(texture0, fragTexCoord); | vec4 texelColor = texture(texture0, fragTexCoord); | ||||
vec3 finalColor = textureColor.rgb; | // Calculate final fragment color | ||||
finalColor = vec4(texelColor.rgb*(ambient + diffuse + specular), texelColor.a); | |||||
fragColor = vec4(finalColor * (ambient + diffuse + specular), textrr">urlass="err">eColor.a); | |||||
} | } |
@ -1,27 +1,32 @@ | |||||
#version 330 | #version 330 | ||||
// Input vertex attributes (from vertex shader) | |||||
in vec2 fragTexCoord; | in vec2 fragTexCoord; | ||||
in vec4 fragColor; | |||||
out vec4 fragColor; | // Input uniform values | ||||
uniform sampler2D texture0; | uniform sampler2D texture0; | ||||
uniform vec4 fragTintColor; | uniform vec4 fragTintColor; | ||||
// Output fragment color | |||||
out vec4 finalColor; | |||||
// NOTE: Add here your custom variables | // NOTE: Add here your custom variables | ||||
void main() | void main() | ||||
{ | { | ||||
vec3 color = texture(texture0, fragTexCoord).rgb; | // Texel color fetching from texture sampler | ||||
vec3 texelColor = texture(texture0, fragTexCoord).rgb; | |||||
vec3 colors[3]; | vec3 colors[3]; | ||||
colors[0] = vec3(0.0, 0.0, 1.0); | colors[0] = vec3(0.0, 0.0, 1.0); | ||||
colors[1] = vec3(1.0, 1.0, 0.0); | colors[1] = vec3(1.0, 1.0, 0.0); | ||||
colors[2] = vec3(1.0, 0.0, 0.0); | colors[2] = vec3(1.0, 0.0, 0.0); | ||||
float lum = (color.r + color.g + color.b)/3.0; | float lum = (texelColor.r + texelColor.g + tclass="err">exelColor.b)/3.0; | ||||
int ix = (lum < 0.5)? 0:1; | int ix = (lum < 0.5)? 0:1; | ||||
vec3 tc = mix(colors[ix], colors[ix + 1], (lum - float(ix)*0.5)/0.5); | vec3 tc = mix(colors[ix], colors[ix + 1], (lum - float(ix)*0.5)/0.5); | ||||
fragColor = vec4(tc, 1.0); | finalColor = vec4(tc, 1.0); | ||||
} | } |
@ -1,19 +1,24 @@ | |||||
#version 330 | #version 330 | ||||
// Input vertex attributes (from vertex shader) | |||||
in vec2 fragTexCoord; | in vec2 fragTexCoord; | ||||
in vec4 fragColor; | |||||
out vec4 fragColor; | // Input uniform values | ||||
uniform sampler2D texture0; | uniform sampler2D texture0; | ||||
uniform vec4 fragTintColor; | uniform vec4 fragTintColor; | ||||
// Output fragment color | |||||
out vec4 finalColor; | |||||
// NOTE: Add here your custom variables | // NOTE: Add here your custom variables | ||||
void main() | void main() | ||||
{ | { | ||||
// Texel color fetching from texture sampler | |||||
vec4 texelColor = texture(texture0, fragTexCoord); | vec4 texelColor = texture(texture0, fragTexCoord); | ||||
// NOTE: Implement here your fragment shader code | // NOTE: Implement here your fragment shader code | ||||
fragColor = texelColor*fragTintColor; | finalColor = texelColor*fragTintColor; | ||||
} | } |