diff --git a/Effects/display.eff b/Effects/display.eff index a5624dcf4..10c123072 100644 --- a/Effects/display.eff +++ b/Effects/display.eff @@ -22,6 +22,8 @@ <red-shift><use>/sim/rendering/rembrandt/cinema/red-shift</use></red-shift> <green-shift><use>/sim/rendering/rembrandt/cinema/green-shift</use></green-shift> <blue-shift><use>/sim/rendering/rembrandt/cinema/blue-shift</use></blue-shift> + <distortion><use>/sim/rendering/rembrandt/cinema/distortion</use></distortion> + <distortion-factor><use>/sim/rendering/rembrandt/cinema/distortion-factor</use></distortion-factor> </cinema> <buffer-nw-enabled><use>/sim/rendering/rembrandt/debug-buffer[0]/enabled</use></buffer-nw-enabled> @@ -39,6 +41,7 @@ <or> <property>/sim/rendering/rembrandt/cinema/vignette</property> <property>/sim/rendering/rembrandt/cinema/color-shift</property> + <property>/sim/rendering/rembrandt/cinema/distortion</property> </or> <equal> <value type="float">0.0</value> @@ -128,6 +131,17 @@ <type>float-vec3</type> <value><use>cinema/blue-shift</use></value> </uniform> + + <uniform> + <name>distortion</name> + <type>bool</type> + <value><use>cinema/distortion</use></value> + </uniform> + <uniform> + <name>distortionFactor</name> + <type>float-vec3</type> + <value><use>cinema/distortion-factor</use></value> + </uniform> </pass> </technique> <technique n="10"> diff --git a/Shaders/cinema.frag b/Shaders/cinema.frag index 1352e4215..4f1c9564e 100644 --- a/Shaders/cinema.frag +++ b/Shaders/cinema.frag @@ -10,6 +10,9 @@ uniform bool vignette; uniform float innerCircle; uniform float outerCircle; +uniform bool distortion; +uniform vec3 distortionFactor; + uniform vec2 fg_BufferSize; // uniform float osg_SimulationTime; // uniform float shutterFreq; @@ -21,6 +24,19 @@ uniform bool bloomBuffers; void main() { vec2 coords = gl_TexCoord[0].xy; + + if (distortion) { + vec2 c = 2.0 * coords - vec2(1.,1.); + c *= vec2( 1.0, fg_BufferSize.y / fg_BufferSize.x ); + float r = length(c); + + c += c * dot(distortionFactor.xy, vec2(r*r, r*r*r*r)); + c /= distortionFactor.z; + + c *= vec2( 1.0, fg_BufferSize.x / fg_BufferSize.y ); + coords = c * .5 + .5; + } + vec4 color = texture2D( lighting_tex, coords ); if (bloomEnabled && bloomBuffers) color = color + bloomStrength * texture2D( bloom_tex, coords ); diff --git a/gui/dialogs/rembrandt.xml b/gui/dialogs/rembrandt.xml index 2ea93a121..e19bbab64 100644 --- a/gui/dialogs/rembrandt.xml +++ b/gui/dialogs/rembrandt.xml @@ -462,8 +462,6 @@ </empty> </group> - <hrule/> - <group> <layout>hbox</layout> <halign>left</halign> @@ -720,6 +718,100 @@ </text> </group> + <group> + <layout>hbox</layout> + <halign>left</halign> + + <checkbox> + <halign>left</halign> + <label>Distortion</label> + <name>distortion</name> + <property>/sim/rendering/rembrandt/cinema/distortion</property> + <binding> + <command>dialog-apply</command> + <object-name>distortion</object-name> + </binding> + </checkbox> + <empty> + <pref-width>48</pref-width> + </empty> + <text> + <label>Factors</label> + <enable> + <property>/sim/rendering/rembrandt/cinema/distortion</property> + </enable> + </text> + <slider> + <name>distortion-factor-x</name> + <min>-0.5</min> + <max>0.5</max> + <step>0.01</step> + <property>/sim/rendering/rembrandt/cinema/distortion-factor/x</property> + <binding> + <command>dialog-apply</command> + <object-name>distortion-factor-x</object-name> + </binding> + <enable> + <property>/sim/rendering/rembrandt/cinema/distortion</property> + </enable> + </slider> + <text> + <label>1234</label> + <format>%.2f</format> + <live>true</live> + <property>/sim/rendering/rembrandt/cinema/distortion-factor/x</property> + <enable> + <property>/sim/rendering/rembrandt/cinema/distortion</property> + </enable> + </text> + <slider> + <name>distortion-factor-y</name> + <min>-0.5</min> + <max>0.5</max> + <step>0.01</step> + <property>/sim/rendering/rembrandt/cinema/distortion-factor/y</property> + <binding> + <command>dialog-apply</command> + <object-name>distortion-factor-y</object-name> + </binding> + <enable> + <property>/sim/rendering/rembrandt/cinema/distortion</property> + </enable> + </slider> + <text> + <label>1234</label> + <format>%.2f</format> + <live>true</live> + <property>/sim/rendering/rembrandt/cinema/distortion-factor/y</property> + <enable> + <property>/sim/rendering/rembrandt/cinema/distortion</property> + </enable> + </text> + <slider> + <name>distortion-factor-z</name> + <min>0.5</min> + <max>1.5</max> + <step>0.01</step> + <property>/sim/rendering/rembrandt/cinema/distortion-factor/z</property> + <binding> + <command>dialog-apply</command> + <object-name>distortion-factor-z</object-name> + </binding> + <enable> + <property>/sim/rendering/rembrandt/cinema/distortion</property> + </enable> + </slider> + <text> + <label>1234</label> + <format>%.2f</format> + <live>true</live> + <property>/sim/rendering/rembrandt/cinema/distortion-factor/z</property> + <enable> + <property>/sim/rendering/rembrandt/cinema/distortion</property> + </enable> + </text> + </group> + <hrule/> <group> diff --git a/preferences.xml b/preferences.xml index 02435746e..5ed9f96da 100644 --- a/preferences.xml +++ b/preferences.xml @@ -93,6 +93,12 @@ Started September 2000 by David Megginson, david@megginson.com <y type="float" userarchive="y">.534</y> <z type="float" userarchive="y">.131</z> </blue-shift> + <distortion type="bool">false</distortion> + <distortion-factor> + <x type="float" userarchive="y">0.0</x> + <y type="float" userarchive="y">0.0</y> + <z type="float" userarchive="y">1.0</z> + </distortion-factor> </cinema> <exposure type="float" userarchive="y">1.0</exposure> <use-color-for-depth type="bool">false</use-color-for-depth>