From 783b308990e7c4ef0837a102a138778f73e4d2b7 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sun, 15 Feb 2015 15:23:19 -0500 Subject: Added bloom! --- shaders/bloom1.fragment | 53 +++++++++++++++++++++++++++++++++++++++++++++ shaders/bloom1.vertex | 11 ++++++++++ shaders/bloom2.fragment | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ shaders/bloom2.vertex | 11 ++++++++++ shaders/final.fragment | 50 +++++++++++++++++++++++++++++++++++++------ shaders/final.vertex | 23 +++++++++++++++++--- 6 files changed, 195 insertions(+), 10 deletions(-) create mode 100644 shaders/bloom1.fragment create mode 100644 shaders/bloom1.vertex create mode 100644 shaders/bloom2.fragment create mode 100644 shaders/bloom2.vertex (limited to 'shaders') diff --git a/shaders/bloom1.fragment b/shaders/bloom1.fragment new file mode 100644 index 0000000..77031f2 --- /dev/null +++ b/shaders/bloom1.fragment @@ -0,0 +1,53 @@ +#version 330 core + +in vec2 UV; + +out vec3 color; + +uniform sampler2D screenTex; +uniform float iGlobalTime; + +float nrand(vec2 n) +{ + return fract(sin(dot(n.xy, vec2(19.9898, 78.233))) * 43758.5453); +} + +vec2 rot2d(vec2 p, float a) +{ + vec2 sc = vec2(sin(a), cos(a)); + return vec2(dot(p, vec2(sc.y, -sc.x)), dot(p, sc.xy)); +} + +void main() +{ + const int NUM_TAPS = 12; + float max_siz = 1.0; + + vec2 fTaps_Poisson[NUM_TAPS]; + fTaps_Poisson[0] = vec2(-.326, -.406); + fTaps_Poisson[1] = vec2(-.840, -.074); + fTaps_Poisson[2] = vec2(-.696, .457); + fTaps_Poisson[3] = vec2(-.203, .621); + fTaps_Poisson[4] = vec2( .962, -.195); + fTaps_Poisson[5] = vec2( .473, -.480); + fTaps_Poisson[6] = vec2( .519, .767); + fTaps_Poisson[7] = vec2( .185, -.893); + fTaps_Poisson[8] = vec2( .507, .064); + fTaps_Poisson[9] = vec2( .896, .412); + fTaps_Poisson[10] = vec2(-.322, -.933); + fTaps_Poisson[11] = vec2(-.792, -.598); + + vec4 sum = vec4(0); + float rnd = 6.28 * nrand(UV + fract(iGlobalTime)); + vec4 basis = vec4(rot2d(vec2(1,0), rnd), rot2d(vec2(0,1), rnd)); + for (int i=0; i 0.0) + { + vec3 viewDir = normalize(-vertPos); + vec3 halfDir = normalize(camDirNorm + viewDir); + float specAngle = max(dot(halfDir, normnorm), 0.0); + colorspec = vec4(0.25,0.25,0.25,1) * pow(specAngle, Tuning_Spec_Power) * Tuning_Spec_Brightness; + }*/ + + vec4 emissive = sampleCRT(UV); + + vec4 nearfinal = colorfres + colordiff + colorspec + emissive; + vec4 final = nearfinal * mix(vec4(1,1,1,1), vec4(0,0,0,0), Tuning_Dimming); + + color = final.rgb; } diff --git a/shaders/final.vertex b/shaders/final.vertex index 825eb49..dda8626 100644 --- a/shaders/final.vertex +++ b/shaders/final.vertex @@ -4,11 +4,28 @@ layout(location = 0) in vec3 vertexPosition_modelspace; layout(location = 1) in vec3 vertexNormal; out vec2 UV; -out vec3 norm; +out vec3 normIn; +out vec3 camDirIn; +out vec3 lightDirIn; +//out vec3 vertPos; + +uniform mat4 MVP; +uniform mat4 worldMat; + +const vec3 Tuning_LightPos = vec3(1, 1, 1.0); void main() { - gl_Position = vec4(vertexPosition_modelspace,1); + gl_Position = MVP * vec4(vertexPosition_modelspace,1); UV = (vertexPosition_modelspace.xy+vec2(1,1))/2.0; - norm = vertexNormal; + normIn = vertexNormal; + + mat3 invWorldRot = transpose(mat3(worldMat[0].xyz, worldMat[1].xyz, worldMat[2].xyz)); + //mat3 invWorldRot = mat3(1.0f); + vec3 worldPos = (worldMat * vec4(vertexPosition_modelspace,1)).xyz; + camDirIn = invWorldRot * (vec3(0,0,1) - worldPos); + //camDir = worldPos; + lightDirIn = invWorldRot * (Tuning_LightPos - worldPos); + //vec4 vertPos4 = vec4(vertexPosition_modelspace,1); + //vertPos = vec3(vertPos4) / vertPos4.w; } -- cgit 1.4.1