From 6321075d93044c6747682a8e7280b5996da7ec52 Mon Sep 17 00:00:00 2001 From: hwc487 Date: Thu, 2 Feb 2012 11:57:58 -0800 Subject: added some additional shaders --- assets/shaders/Deform.frag.glsl | 29 +++++ assets/shaders/Fly.frag.glsl | 23 ++++ assets/shaders/ReliefTunnel.frag.glsl | 35 ++++++ assets/shaders/SquareTunnel.frag.glsl | 21 ++++ assets/shaders/Star.frag.glsl | 28 +++++ assets/shaders/Water.frag.glsl | 55 +++++++++ assets/shaders/ZInvert.frag.glsl | 23 ++++ js/helper-classes/RDGE/Materials/DeformMaterial.js | 133 +++++++++++++++++++++ js/helper-classes/RDGE/Materials/FlyMaterial.js | 133 +++++++++++++++++++++ .../RDGE/Materials/ReliefTunnelMaterial.js | 133 +++++++++++++++++++++ .../RDGE/Materials/SquareTunnelMaterial.js | 133 +++++++++++++++++++++ js/helper-classes/RDGE/Materials/StarMaterial.js | 133 +++++++++++++++++++++ js/helper-classes/RDGE/Materials/WaterMaterial.js | 133 +++++++++++++++++++++ .../RDGE/Materials/ZInvertMaterial.js | 133 +++++++++++++++++++++ js/helper-classes/RDGE/MaterialsLibrary.js | 21 ++++ js/panels/Materials/Materials.xml | 7 ++ .../materials-popup.reel/materials-popup.js | 7 ++ js/preloader/Preloader.js | 7 ++ 18 files changed, 1187 insertions(+) create mode 100644 assets/shaders/Deform.frag.glsl create mode 100644 assets/shaders/Fly.frag.glsl create mode 100644 assets/shaders/ReliefTunnel.frag.glsl create mode 100644 assets/shaders/SquareTunnel.frag.glsl create mode 100644 assets/shaders/Star.frag.glsl create mode 100644 assets/shaders/Water.frag.glsl create mode 100644 assets/shaders/ZInvert.frag.glsl create mode 100644 js/helper-classes/RDGE/Materials/DeformMaterial.js create mode 100644 js/helper-classes/RDGE/Materials/FlyMaterial.js create mode 100644 js/helper-classes/RDGE/Materials/ReliefTunnelMaterial.js create mode 100644 js/helper-classes/RDGE/Materials/SquareTunnelMaterial.js create mode 100644 js/helper-classes/RDGE/Materials/StarMaterial.js create mode 100644 js/helper-classes/RDGE/Materials/WaterMaterial.js create mode 100644 js/helper-classes/RDGE/Materials/ZInvertMaterial.js diff --git a/assets/shaders/Deform.frag.glsl b/assets/shaders/Deform.frag.glsl new file mode 100644 index 00000000..1dbe45a0 --- /dev/null +++ b/assets/shaders/Deform.frag.glsl @@ -0,0 +1,29 @@ +#ifdef GL_ES +precision highp float; +#endif + +uniform float u_time; +uniform vec2 u_resolution; +//uniform vec4 mouse; +uniform sampler2D u_tex0; + +void main(void) +{ + vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / u_resolution.xy; + //vec2 m = -1.0 + 2.0 * mouse.xy / u_resolution.xy; + vec2 m = vec2(-.8, .8); + + float a1 = atan(p.y-m.y,p.x-m.x); + float r1 = sqrt(dot(p-m,p-m)); + float a2 = atan(p.y+m.y,p.x+m.x); + float r2 = sqrt(dot(p+m,p+m)); + + vec2 uv; + uv.x = 0.2*u_time + (r1-r2)*0.25; + uv.y = sin(2.0*(a1-a2)); + + float w = r1*r2*0.8; + vec3 col = texture2D(u_tex0,uv).xyz; + + gl_FragColor = vec4(col/(.1+w),1.0); +} \ No newline at end of file diff --git a/assets/shaders/Fly.frag.glsl b/assets/shaders/Fly.frag.glsl new file mode 100644 index 00000000..f99b5ab8 --- /dev/null +++ b/assets/shaders/Fly.frag.glsl @@ -0,0 +1,23 @@ +#ifdef GL_ES +precision highp float; +#endif + +uniform vec2 u_resolution; +uniform float u_time; +uniform sampler2D u_tex0; + +void main(void) +{ + vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / u_resolution.xy; + vec2 uv; + + float an = u_time*.25; + + float x = p.x*cos(an)-p.y*sin(an); + float y = p.x*sin(an)+p.y*cos(an); + + uv.x = .25*x/abs(y); + uv.y = .20*u_time + .25/abs(y); + + gl_FragColor = vec4(texture2D(u_tex0,uv).xyz * y*y, 1.0); +} diff --git a/assets/shaders/ReliefTunnel.frag.glsl b/assets/shaders/ReliefTunnel.frag.glsl new file mode 100644 index 00000000..cee707db --- /dev/null +++ b/assets/shaders/ReliefTunnel.frag.glsl @@ -0,0 +1,35 @@ +#ifdef GL_ES +precision highp float; +#endif + +uniform vec2 u_resolution; +uniform float u_time; +uniform sampler2D u_tex0; + +void main(void) +{ + vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / u_resolution.xy; + vec2 uv; + + float r = sqrt( dot(p,p) ); + float a = atan(p.y,p.x) + 0.5*sin(0.5*r-0.5*u_time); + + float s = 0.5 + 0.5*cos(7.0*a); + s = smoothstep(0.0,1.0,s); + s = smoothstep(0.0,1.0,s); + s = smoothstep(0.0,1.0,s); + s = smoothstep(0.0,1.0,s); + + uv.x = u_time + 1.0/( r + .2*s); + uv.y = 3.0*a/3.1416; + + float w = (0.5 + 0.5*s)*r*r; + + vec3 col = texture2D(u_tex0,uv).xyz; + + float ao = 0.5 + 0.5*cos(7.0*a); + ao = smoothstep(0.0,0.4,ao)-smoothstep(0.4,0.7,ao); + ao = 1.0-0.5*ao*r; + + gl_FragColor = vec4(col*w*ao,1.0); +} diff --git a/assets/shaders/SquareTunnel.frag.glsl b/assets/shaders/SquareTunnel.frag.glsl new file mode 100644 index 00000000..51ef7b7c --- /dev/null +++ b/assets/shaders/SquareTunnel.frag.glsl @@ -0,0 +1,21 @@ +#ifdef GL_ES +precision highp float; +#endif + +uniform vec2 u_resolution; +uniform float u_time; +uniform sampler2D u_tex0; + +void main(void) +{ + vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / u_resolution.xy; + vec2 uv; + + float r = pow( pow(p.x*p.x,16.0) + pow(p.y*p.y,16.0), 1.0/32.0 ); + uv.x = .5*u_time + 0.5/r; + uv.y = 1.0*atan(p.y,p.x)/3.1416; + + vec3 col = texture2D(u_tex0,uv).xyz; + + gl_FragColor = vec4(col*r*r*r,1.0); +} diff --git a/assets/shaders/Star.frag.glsl b/assets/shaders/Star.frag.glsl new file mode 100644 index 00000000..f63fe605 --- /dev/null +++ b/assets/shaders/Star.frag.glsl @@ -0,0 +1,28 @@ +#ifdef GL_ES +precision highp float; +#endif + +uniform float u_time; +uniform vec2 u_resolution; +uniform sampler2D u_tex0; + +void main(void) +{ + vec2 uv; + + vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / u_resolution.xy; + float a = atan(p.y,p.x); + float r = sqrt(dot(p,p)); + float s = r * (1.0+0.8*cos(u_time*1.0)); + + uv.x = .02*p.y+.03*cos(-u_time+a*3.0)/s; + uv.y = .1*u_time +.02*p.x+.03*sin(-u_time+a*3.0)/s; + + float w = .9 + pow(max(1.5-r,0.0),4.0); + + w*=0.6+0.4*cos(u_time+3.0*a); + + vec3 col = texture2D(u_tex0,uv).xyz; + + gl_FragColor = vec4(col*w,1.0); +} \ No newline at end of file diff --git a/assets/shaders/Water.frag.glsl b/assets/shaders/Water.frag.glsl new file mode 100644 index 00000000..5b71a658 --- /dev/null +++ b/assets/shaders/Water.frag.glsl @@ -0,0 +1,55 @@ +#ifdef GL_ES +precision highp float; +#endif + +uniform sampler2D u_tex0; +uniform float u_time; +uniform vec2 u_resolution; + +const float speedx = 1./ 0.1; +const float speedy = 1./ .01; +const float speedr = 1./ 0.01; +const float delta = 20.; +const float intence = 10.; +const int dif = 7; + +float col(vec2 coord) +{ + float delta_theta = 3.1415926535897932 / float(dif); + float col = 0.; + float theta = 0.; + theta = u_time/200.; + + coord.x += u_time/speedx; + coord.y += u_time/speedy; + for (int i = 0; i < dif; i++) + { + coord.x += u_time/speedr; + theta = theta + delta_theta; + col = col + cos( (coord.x*cos(theta) - coord.y*sin(theta))*20. ); + } + + return cos(col); +} + +void main(void) +{ + vec2 p = (gl_FragCoord.xy) / u_resolution.xy; + + vec2 c1 = p; + vec2 c2 = p; + + c2.x = c2.x+u_resolution.x/delta; + float dx = (col(c1)-col(c2))/delta; + + c2 = p; + c2.y = c2.y + u_resolution.y/delta; + float dy = (col(c1)-col(c2))/delta; + + c1.x = c1.x+dx; + c1.y = -(c1.y+dy); + + float alpha = 1.+dot(dx,dy)*intence; + if (alpha < 0.7) alpha = 0.7; + gl_FragColor = texture2D(u_tex0,c1)*(alpha); +} diff --git a/assets/shaders/ZInvert.frag.glsl b/assets/shaders/ZInvert.frag.glsl new file mode 100644 index 00000000..b1fd1748 --- /dev/null +++ b/assets/shaders/ZInvert.frag.glsl @@ -0,0 +1,23 @@ +#ifdef GL_ES +precision highp float; +#endif + +uniform vec2 u_resolution; +uniform float u_time; +uniform sampler2D u_tex0; + +void main(void) +{ + vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / u_resolution.xy; + vec2 uv; + + float a = atan(p.y,p.x); + float r = sqrt(dot(p,p)); + + uv.x = cos(0.6+u_time) + cos(cos(1.2+u_time)+a)/r; + uv.y = cos(0.3+u_time) + sin(cos(2.0+u_time)+a)/r; + + vec3 col = texture2D(u_tex0,uv*.25).xyz; + + gl_FragColor = vec4(col*r*r,1.0); +} \ No newline at end of file diff --git a/js/helper-classes/RDGE/Materials/DeformMaterial.js b/js/helper-classes/RDGE/Materials/DeformMaterial.js new file mode 100644 index 00000000..ddc97383 --- /dev/null +++ b/js/helper-classes/RDGE/Materials/DeformMaterial.js @@ -0,0 +1,133 @@ +/* + This file contains proprietary software owned by Motorola Mobility, Inc.
+ No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+ (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. +
*/ + + + +/////////////////////////////////////////////////////////////////////// +// Class GLMaterial +// RDGE representation of a material. +/////////////////////////////////////////////////////////////////////// +function DeformMaterial() +{ + // initialize the inherited members + this.inheritedFrom = PulseMaterial; + this.inheritedFrom(); + + /////////////////////////////////////////////////////////////////////// + // Instance variables + /////////////////////////////////////////////////////////////////////// + this._name = "DeformMaterial"; + this._shaderName = "deform"; + + this._texMap = 'assets/images/rocky-normal.jpg'; + + this._time = 0.0; + this._dTime = 0.01; + + /////////////////////////////////////////////////////////////////////// + // Properties + /////////////////////////////////////////////////////////////////////// + // all defined in parent PulseMaterial.js + // load the local default value + this._propValues[ this._propNames[0] ] = this._texMap.slice(0); + + /////////////////////////////////////////////////////////////////////// + // Material Property Accessors + /////////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////////// + + + /////////////////////////////////////////////////////////////////////// + // Methods + /////////////////////////////////////////////////////////////////////// + // duplcate method requirde + this.dup = function( world ) + { + // allocate a new uber material + var newMat = new DeformMaterial(); + + // copy over the current values; + var propNames = [], propValues = [], propTypes = [], propLabels = []; + this.getAllProperties( propNames, propValues, propTypes, propLabels); + var n = propNames.length; + for (var i=0; i + This file contains proprietary software owned by Motorola Mobility, Inc.
+ No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+ (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. + */ + + + +/////////////////////////////////////////////////////////////////////// +// Class GLMaterial +// RDGE representation of a material. +/////////////////////////////////////////////////////////////////////// +function FlyMaterial() +{ + // initialize the inherited members + this.inheritedFrom = PulseMaterial; + this.inheritedFrom(); + + /////////////////////////////////////////////////////////////////////// + // Instance variables + /////////////////////////////////////////////////////////////////////// + this._name = "FlyMaterial"; + this._shaderName = "tunnel"; + + this._texMap = 'assets/images/rocky-normal.jpg'; + + this._time = 0.0; + this._dTime = 0.01; + + /////////////////////////////////////////////////////////////////////// + // Properties + /////////////////////////////////////////////////////////////////////// + // all defined in parent PulseMaterial.js + // load the local default value + this._propValues[ this._propNames[0] ] = this._texMap.slice(0); + + /////////////////////////////////////////////////////////////////////// + // Material Property Accessors + /////////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////////// + + + /////////////////////////////////////////////////////////////////////// + // Methods + /////////////////////////////////////////////////////////////////////// + // duplcate method requirde + this.dup = function( world ) + { + // allocate a new uber material + var newMat = new FlyMaterial(); + + // copy over the current values; + var propNames = [], propValues = [], propTypes = [], propLabels = []; + this.getAllProperties( propNames, propValues, propTypes, propLabels); + var n = propNames.length; + for (var i=0; i + This file contains proprietary software owned by Motorola Mobility, Inc.
+ No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+ (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. + */ + + + +/////////////////////////////////////////////////////////////////////// +// Class GLMaterial +// RDGE representation of a material. +/////////////////////////////////////////////////////////////////////// +function ReliefTunnelMaterial() +{ + // initialize the inherited members + this.inheritedFrom = PulseMaterial; + this.inheritedFrom(); + + /////////////////////////////////////////////////////////////////////// + // Instance variables + /////////////////////////////////////////////////////////////////////// + this._name = "ReliefTunnelMaterial"; + this._shaderName = "tunnel"; + + this._texMap = 'assets/images/rocky-normal.jpg'; + + this._time = 0.0; + this._dTime = 0.01; + + /////////////////////////////////////////////////////////////////////// + // Properties + /////////////////////////////////////////////////////////////////////// + // all defined in parent PulseMaterial.js + // load the local default value + this._propValues[ this._propNames[0] ] = this._texMap.slice(0); + + /////////////////////////////////////////////////////////////////////// + // Material Property Accessors + /////////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////////// + + + /////////////////////////////////////////////////////////////////////// + // Methods + /////////////////////////////////////////////////////////////////////// + // duplcate method requirde + this.dup = function( world ) + { + // allocate a new uber material + var newMat = new ReliefTunnelMaterial(); + + // copy over the current values; + var propNames = [], propValues = [], propTypes = [], propLabels = []; + this.getAllProperties( propNames, propValues, propTypes, propLabels); + var n = propNames.length; + for (var i=0; i + This file contains proprietary software owned by Motorola Mobility, Inc.
+ No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+ (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. + */ + + + +/////////////////////////////////////////////////////////////////////// +// Class GLMaterial +// RDGE representation of a material. +/////////////////////////////////////////////////////////////////////// +function SquareTunnelMaterial() +{ + // initialize the inherited members + this.inheritedFrom = PulseMaterial; + this.inheritedFrom(); + + /////////////////////////////////////////////////////////////////////// + // Instance variables + /////////////////////////////////////////////////////////////////////// + this._name = "SquareTunnelMaterial"; + this._shaderName = "tunnel"; + + this._texMap = 'assets/images/rocky-normal.jpg'; + + this._time = 0.0; + this._dTime = 0.01; + + /////////////////////////////////////////////////////////////////////// + // Properties + /////////////////////////////////////////////////////////////////////// + // all defined in parent PulseMaterial.js + // load the local default value + this._propValues[ this._propNames[0] ] = this._texMap.slice(0); + + /////////////////////////////////////////////////////////////////////// + // Material Property Accessors + /////////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////////// + + + /////////////////////////////////////////////////////////////////////// + // Methods + /////////////////////////////////////////////////////////////////////// + // duplcate method requirde + this.dup = function( world ) + { + // allocate a new uber material + var newMat = new SquareTunnelMaterial(); + + // copy over the current values; + var propNames = [], propValues = [], propTypes = [], propLabels = []; + this.getAllProperties( propNames, propValues, propTypes, propLabels); + var n = propNames.length; + for (var i=0; i + This file contains proprietary software owned by Motorola Mobility, Inc.
+ No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+ (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. + */ + + + +/////////////////////////////////////////////////////////////////////// +// Class GLMaterial +// RDGE representation of a material. +/////////////////////////////////////////////////////////////////////// +function StarMaterial() +{ + // initialize the inherited members + this.inheritedFrom = PulseMaterial; + this.inheritedFrom(); + + /////////////////////////////////////////////////////////////////////// + // Instance variables + /////////////////////////////////////////////////////////////////////// + this._name = "StarMaterial"; + this._shaderName = "star"; + + this._texMap = 'assets/images/rocky-normal.jpg'; + + this._time = 0.0; + this._dTime = 0.01; + + /////////////////////////////////////////////////////////////////////// + // Properties + /////////////////////////////////////////////////////////////////////// + // all defined in parent PulseMaterial.js + // load the local default value + this._propValues[ this._propNames[0] ] = this._texMap.slice(0); + + /////////////////////////////////////////////////////////////////////// + // Material Property Accessors + /////////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////////// + + + /////////////////////////////////////////////////////////////////////// + // Methods + /////////////////////////////////////////////////////////////////////// + // duplcate method requirde + this.dup = function( world ) + { + // allocate a new uber material + var newMat = new StarMaterial(); + + // copy over the current values; + var propNames = [], propValues = [], propTypes = [], propLabels = []; + this.getAllProperties( propNames, propValues, propTypes, propLabels); + var n = propNames.length; + for (var i=0; i + This file contains proprietary software owned by Motorola Mobility, Inc.
+ No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+ (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. + */ + + + +/////////////////////////////////////////////////////////////////////// +// Class GLMaterial +// RDGE representation of a material. +/////////////////////////////////////////////////////////////////////// +function WaterMaterial() +{ + // initialize the inherited members + this.inheritedFrom = PulseMaterial; + this.inheritedFrom(); + + /////////////////////////////////////////////////////////////////////// + // Instance variables + /////////////////////////////////////////////////////////////////////// + this._name = "WaterMaterial"; + this._shaderName = "water"; + + this._texMap = 'assets/images/rocky-normal.jpg'; + + this._time = 0.0; + this._dTime = 0.01; + + /////////////////////////////////////////////////////////////////////// + // Properties + /////////////////////////////////////////////////////////////////////// + // all defined in parent PulseMaterial.js + // load the local default value + this._propValues[ this._propNames[0] ] = this._texMap.slice(0); + + /////////////////////////////////////////////////////////////////////// + // Material Property Accessors + /////////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////////// + + + /////////////////////////////////////////////////////////////////////// + // Methods + /////////////////////////////////////////////////////////////////////// + // duplcate method requirde + this.dup = function( world ) + { + // allocate a new uber material + var newMat = new WaterMaterial(); + + // copy over the current values; + var propNames = [], propValues = [], propTypes = [], propLabels = []; + this.getAllProperties( propNames, propValues, propTypes, propLabels); + var n = propNames.length; + for (var i=0; i + This file contains proprietary software owned by Motorola Mobility, Inc.
+ No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+ (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. + */ + + + +/////////////////////////////////////////////////////////////////////// +// Class GLMaterial +// RDGE representation of a material. +/////////////////////////////////////////////////////////////////////// +function ZInvertMaterial() +{ + // initialize the inherited members + this.inheritedFrom = PulseMaterial; + this.inheritedFrom(); + + /////////////////////////////////////////////////////////////////////// + // Instance variables + /////////////////////////////////////////////////////////////////////// + this._name = "ZInvertMaterial"; + this._shaderName = "zinvert"; + + this._texMap = 'assets/images/rocky-normal.jpg'; + + this._time = 0.0; + this._dTime = 0.01; + + /////////////////////////////////////////////////////////////////////// + // Properties + /////////////////////////////////////////////////////////////////////// + // all defined in parent PulseMaterial.js + // load the local default value + this._propValues[ this._propNames[0] ] = this._texMap.slice(0); + + /////////////////////////////////////////////////////////////////////// + // Material Property Accessors + /////////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////////// + + + /////////////////////////////////////////////////////////////////////// + // Methods + /////////////////////////////////////////////////////////////////////// + // duplcate method requirde + this.dup = function( world ) + { + // allocate a new uber material + var newMat = new ZInvertMaterial(); + + // copy over the current values; + var propNames = [], propValues = [], propTypes = [], propLabels = []; + this.getAllProperties( propNames, propValues, propTypes, propLabels); + var n = propNames.length; + for (var i=0; i + + + + + + + diff --git a/js/panels/Materials/materials-popup.reel/materials-popup.js b/js/panels/Materials/materials-popup.reel/materials-popup.js index afdc3628..bce2e42b 100644 --- a/js/panels/Materials/materials-popup.reel/materials-popup.js +++ b/js/panels/Materials/materials-popup.reel/materials-popup.js @@ -246,6 +246,13 @@ exports.MaterialsPopup = Montage.create(Component, { (materialID === "RadialBlurMaterial") || (materialID === "PulseMaterial") || (materialID === "TunnelMaterial") || + (materialID === "ReliefTunnelMaterial") || + (materialID === "SquareTunnelMaterial") || + (materialID === "FlyMaterial") || + (materialID === "WaterMaterial") || + (materialID === "ZInvertMaterial") || + (materialID === "DeformMaterial") || + (materialID === "StarMaterial") || (materialID === "TwistMaterial") || (materialID === "KeleidoscopeMaterial") || (materialID === "JuliaMaterial") || diff --git a/js/preloader/Preloader.js b/js/preloader/Preloader.js index 3daeb1b4..12028e32 100755 --- a/js/preloader/Preloader.js +++ b/js/preloader/Preloader.js @@ -70,6 +70,13 @@ exports.Preloader = Montage.create(Component, { {"type":"js", "url":"js/helper-classes/RDGE/Materials/RadialBlurMaterial.js"}, {"type":"js", "url":"js/helper-classes/RDGE/Materials/PulseMaterial.js"}, {"type":"js", "url":"js/helper-classes/RDGE/Materials/TunnelMaterial.js"}, + {"type":"js", "url":"js/helper-classes/RDGE/Materials/ReliefTunnelMaterial.js"}, + {"type":"js", "url":"js/helper-classes/RDGE/Materials/SquareTunnelMaterial.js"}, + {"type":"js", "url":"js/helper-classes/RDGE/Materials/FlyMaterial.js"}, + {"type":"js", "url":"js/helper-classes/RDGE/Materials/WaterMaterial.js"}, + {"type":"js", "url":"js/helper-classes/RDGE/Materials/ZInvertMaterial.js"}, + {"type":"js", "url":"js/helper-classes/RDGE/Materials/DeformMaterial.js"}, + {"type":"js", "url":"js/helper-classes/RDGE/Materials/StarMaterial.js"}, {"type":"js", "url":"js/helper-classes/RDGE/Materials/TwistMaterial.js"}, {"type":"js", "url":"js/helper-classes/RDGE/Materials/KeleidoscopeMaterial.js"}, {"type":"js", "url":"js/helper-classes/RDGE/Materials/JuliaMaterial.js"}, -- cgit v1.2.3 From 4ebae7378608750192f8d3bb392a54222ca0ec2f Mon Sep 17 00:00:00 2001 From: hwc487 Date: Thu, 2 Feb 2012 13:56:25 -0800 Subject: Added the 'animate' flag to the pulse material --- js/helper-classes/RDGE/Materials/RadialBlurMaterial.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/js/helper-classes/RDGE/Materials/RadialBlurMaterial.js b/js/helper-classes/RDGE/Materials/RadialBlurMaterial.js index 9acb4213..732800cf 100644 --- a/js/helper-classes/RDGE/Materials/RadialBlurMaterial.js +++ b/js/helper-classes/RDGE/Materials/RadialBlurMaterial.js @@ -37,6 +37,8 @@ function RadialBlurMaterial() this.getTextureMap = function() { return this._texMap.slice(0); } this.setTextureMap = function(m) { this._propValues[this._propNames[0]] = m.slice(0); this.updateTexture(); } + this.isAnimated = function() { return true; } + /////////////////////////////////////////////////////////////////////// // Material Property Accessors /////////////////////////////////////////////////////////////////////// -- cgit v1.2.3 From 3d5b5f7c5efb25b5e605d5d120b57f2dde33fd23 Mon Sep 17 00:00:00 2001 From: hwc487 Date: Fri, 3 Feb 2012 15:18:45 -0800 Subject: Added a counter to the renderer that tracks the number of unloaded texture maps. Started vertex deformations. --- js/helper-classes/RDGE/GLMaterial.js | 11 ++ js/helper-classes/RDGE/GLRectangle.js | 148 +++++++++++++++++++-- js/helper-classes/RDGE/GLWorld.js | 25 ++-- js/helper-classes/RDGE/Materials/FlatMaterial.js | 1 + .../RDGE/Materials/LinearGradientMaterial.js | 4 +- js/helper-classes/RDGE/src/core/script/renderer.js | 13 ++ 6 files changed, 178 insertions(+), 24 deletions(-) diff --git a/js/helper-classes/RDGE/GLMaterial.js b/js/helper-classes/RDGE/GLMaterial.js index c633f679..07a98ab5 100644 --- a/js/helper-classes/RDGE/GLMaterial.js +++ b/js/helper-classes/RDGE/GLMaterial.js @@ -31,6 +31,11 @@ function GLMaterial( world ) this._texture; + // vertex deformation variables + this._hasVertexDeformation = false; + this._vertexDeformationRange = [0, 0, 1, 1]; // (xMin, yMin, xMax, yMax) + this._vertexDeformationTolerance = 0.05; + // RDGE variables this._shader; this._materialNode; @@ -66,6 +71,12 @@ function GLMaterial( world ) // Any material needing continuous rendering should override this method this.isAnimated = function() { return false; } + // the vertex shader can apply deformations requiring refinement in + // certain areas. + this.hasVertexDeformation = function() { return this._hasVertexDeformation; } + this.getVertexDeformationRange = function() { return this._vertexDeformationRange.slice(); } + this.getVertexDeformationTolerance = function() { return this._vertexDeformationTolerance; } + /////////////////////////////////////////////////////////////////////// // Common Material Methods diff --git a/js/helper-classes/RDGE/GLRectangle.js b/js/helper-classes/RDGE/GLRectangle.js index 1bb4bcac..e72b4488 100644 --- a/js/helper-classes/RDGE/GLRectangle.js +++ b/js/helper-classes/RDGE/GLRectangle.js @@ -280,7 +280,7 @@ function GLRectangle() // stroke var strokeMaterial = this.makeStrokeMaterial(); - prim = this.createStroke([x,y], 2*xFill, 2*yFill, strokeSize, tlRadius, blRadius, brRadius, trRadius, strokeMaterial) + prim = this.createStroke([x,y], 2*xFill, 2*yFill, strokeSize, tlRadius, blRadius, brRadius, trRadius); this._primArray.push( prim ); this._materialNodeArray.push( strokeMaterial.getMaterialNode() ); @@ -486,7 +486,7 @@ function GLRectangle() this.createStroke = function(ctr, width, height, strokeWidth, tlRad, blRad, brRad, trRad, material) { // create the geometry - var prim = RectangleStroke.create( ctr, width, height, strokeWidth, tlRad, blRad, brRad, trRad) + var prim = RectangleStroke.create( ctr, width, height, strokeWidth, tlRad, blRad, brRad, trRad, material) return prim; } @@ -496,9 +496,9 @@ function GLRectangle() // special the (common) case of no rounded corners var prim if ((tlRad <= 0) && (blRad <= 0) && (brRad <= 0) && (trRad <= 0)) - prim = RectangleGeometry.create( ctr, width, height ); + prim = RectangleGeometry.create( ctr, width, height, material ); else - prim = RectangleFill.create( ctr, width, height, tlRad, blRad, brRad, trRad); + prim = RectangleFill.create( ctr, width, height, tlRad, blRad, brRad, trRad, material); return prim; } @@ -747,7 +747,7 @@ function GLRectangle() } RectangleFill = {}; -RectangleFill.create = function( rectCtr, width, height, tlRad, blRad, brRad, trRad) +RectangleFill.create = function( rectCtr, width, height, tlRad, blRad, brRad, trRad, material) { var x = rectCtr[0], y = rectCtr[1], z = 0.0; var hw = 0.5*width, hh = 0.5*height; @@ -834,6 +834,17 @@ RectangleFill.create = function( rectCtr, width, height, tlRad, blRad, brRad, j++; } + //refine the mesh for vertex deformations + if (material) + { + if (material.hasVertexDeformation()) + { + var paramRange = material.getVertexDeformationRange(); + var tolerance = material.getVertexDeformationTolerance(); + nVertices = ShapePrimitive.refineMesh( this.vertices, this.normals, this.uvs, this.indices, nVertices, paramRange, tolerance ); + } + } + // create the RDGE primitive var prim = ShapePrimitive.create(this.vertices, this.normals, this.uvs, this.indices, g_Engine.getContext().renderer.TRIANGLES, nVertices); return prim; @@ -906,7 +917,7 @@ RectangleFill.getRoundedCorner = function(ctr, startPt, vertices) RectangleStroke = {}; -RectangleStroke.create = function( rectCtr, width, height, strokeWidth, tlRad, blRad, brRad, trRad) +RectangleStroke.create = function( rectCtr, width, height, strokeWidth, tlRad, blRad, brRad, trRad, material) { var x = rectCtr[0], y = rectCtr[1], z = 0.0; var hw = 0.5*width, hh = 0.5*height, sw = strokeWidth; @@ -1097,6 +1108,17 @@ RectangleStroke.create = function( rectCtr, width, height, strokeWidth, tlRad, k++; } + //refine the mesh for vertex deformations + if (material) + { + if (material.hasVertexDeformation()) + { + var paramRange = material.getVertexDeformationRange(); + var tolerance = material.getVertexDeformationTolerance(); + nVertices = ShapePrimitive.refineMesh( this.vertices, this.normals, this.uvs, this.indices, nVertices, paramRange, tolerance ); + } + } + // create the RDGE primitive var prim = ShapePrimitive.create(this.vertices, this.normals, this.uvs, this.indices, g_Engine.getContext().renderer.TRIANGLES, nVertices); return prim; @@ -1141,7 +1163,7 @@ RectangleStroke.getUV = RectangleFill.getUV; // Helper function for generating Three.js geometry RectangleGeometry = {}; -RectangleGeometry.create = function( ctr, width, height ) +RectangleGeometry.create = function( ctr, width, height, material ) { var x = ctr[0], y = ctr[1], z = 0.0; var hw = 0.5*width, hh = 0.5*height; @@ -1179,6 +1201,17 @@ RectangleGeometry.create = function( ctr, width, height ) RectangleGeometry.pushIndices( 2, 1, 0 ); RectangleGeometry.pushIndices( 0, 3, 2 ); + //refine the mesh for vertex deformations + if (material) + { + if (material.hasVertexDeformation()) + { + var paramRange = material.getVertexDeformationRange(); + var tolerance = material.getVertexDeformationTolerance(); + nVertices = ShapePrimitive.refineMesh( this.vertices, this.normals, this.uvs, this.indices, nVertices, paramRange, tolerance ); + } + } + // create the RDGE primitive var prim = ShapePrimitive.create(this.vertices, this.normals, this.uvs, this.indices, g_Engine.getContext().renderer.TRIANGLES, nVertices); return prim; @@ -1249,4 +1282,103 @@ ShapePrimitive.create = function(coords, normals, uvs, indices, primType, ver renderer.createPrimitive(prim, vertexCount); return prim; -} \ No newline at end of file +} + + +ShapePrimitive.refineMesh = function( verts, norms, uvs, indices, nVertices, paramRange, tolerance ) +{ + // get the param range + var pUMin = paramRange[0], pVMin = paramRange[1], + pUMax = paramRange[2], pVMax = paramRange[3]; + var iTriangle = 0; + var nTriangles = indices.length/3; + var index = 0; + while (iTriangle < nTriangles) + { + // get the indices of the 3 vertices + var i0 = indices[index], + i1 = indices[index+1], + i2 = indices[index+2]; + + // get the uv values + var vrtIndex = 3*iTriangle; + var iuv0 = 2 * i0, + iuv1 = 2 * i1, + iuv2 = 2 * i2; + var u0 = uvs[iuv0], v0 = uvs[iuv0+1], + u1 = uvs[iuv1], v1 = uvs[iuv1+1], + u2 = uvs[iuv2], v2 = uvs[iuv2+1]; + + // find the u and v range + var uMin = u0, vMin = v0; + if (u1 < uMin) uMin = u1; if (v1 < vMin) vMin = v1; + if (u2 < uMin) uMin = u2; if (v2 < vMin) vMin = v2; + var uMax = u0, vMax = v0; + if (u1 > uMax) uMax = u1; if (v1 > vMax) vMax = v1; + if (u2 > uMax) uMax = u2; if (v2 > vMax) vMax = v2; + + // if the parameter range of the triangle is outside the + // desired parameter range, advance to the next polygon and continue + if ((uMin > pUMax) || (uMax < pUMin) || (vMin > pVMax) || (vMax < pVMin)) + { + // go to the next triangle + iTriangle++; + index += 3; + } + else + { + // check thesize of the triangle in uv space. If small enough, advance + // to the next triangle. If not small enough, split the triangle into 3; + var du = uMax - uMin, dv = vMax - vMin; + if ((du < tolerance) && (dv < tolerance)) + { + iTriangle++; + index += 3; + } + else // split the triangle + { + //calculate the position of the new vertex + var iPt0 = 3 * i0, + iPt1 = 3 * i1, + iPt2 = 3 * i2; + var x0 = verts[iPt0], y0 = verts[iPt0+1], z0 = verts[iPt0+2], + x1 = verts[iPt1], y1 = verts[iPt1+1], z1 = verts[iPt1+2], + x2 = verts[iPt2], y2 = verts[iPt2+1], z2 = verts[iPt2+2]; + var xMid = (x0 + x1 + x2)/3.0, + yMid = (y0 + y1 + y2)/3.0, + zMid = (z0 + z1 + z2)/3.0; + + // calculate the uv value of the new coordinate + var uMid = (u0 + u1 + u2)/3.0, + vMid = (v0 + v1 + v2)/3.0; + + // calculate the normal for the new coordinate + var nx0 = norms[iPt0], ny0 = norms[iPt0+1], nz0 = norms[iPt0+2], + nx1 = norms[iPt1], ny1 = norms[iPt1+1], nz1 = norms[iPt1+2], + nx2 = norms[iPt2], ny2 = norms[iPt2+1], nz2 = norms[iPt2+2]; + var nxMid = (nx0 + nx1 + nx2), + nyMid = (ny0 + ny1 + ny2), + nzMid = (nz0 + nz1 + nz2); + var nrm = VecUtils.vecNormalize(3, [nxMid, nyMid, nzMid], 1.0 ); + + // push the new vertex + verts.push(nrm[0]); verts.push(nrm[1]); verts.push(nrm[2]); + uvs.push(uMid), uvs.push(vMid); + norms.push(nrm[0]); norms.push(nrm[1]); norms.push(nrm[2]); + var iMidVrt = nVertices; + nVertices++; + + // split the current triangle into 3 + indices[index+2] = iMidVrt; + indices.push(i1); indices.push(i2); indices.push(iMidVrt); nTriangles++; + indices.push(i2); indices.push(i0); indices.push(iMidVrt); nTriangles++; + + // by not advancing 'index', we examine the first of the 3 triangles generated above + } + } + } + return nVertices; +} + + + diff --git a/js/helper-classes/RDGE/GLWorld.js b/js/helper-classes/RDGE/GLWorld.js index 819f89db..c97e29d4 100644 --- a/js/helper-classes/RDGE/GLWorld.js +++ b/js/helper-classes/RDGE/GLWorld.js @@ -225,19 +225,15 @@ function GLWorld( canvas, use3D ) { if (this._useWebGL) { - if (this._allMapsLoaded) + var ctx = g_Engine.getContext(); + var ctx1 = g_Engine.ctxMan.handleToObject(this._canvas.rdgeCtxHandle); + if (ctx1 != ctx) console.log( "***** different contexts (2) *****" ); + var aRenderer = ctx1.renderer; + var renderer = ctx.renderer; + if (renderer != aRenderer) console.log( "***** DIFFERENT RENDERERS *****" ); + + if (renderer.unloadedTextureCount <= 0) { - var ctx = g_Engine.getContext(); - //console.log( "RDGE state: " + ctx.ctxStateManager.currentState().name); - - ///////////////////////////// - var ctx1 = g_Engine.ctxMan.handleToObject(this._canvas.rdgeCtxHandle); - if (ctx1 != ctx) console.log( "***** different contexts (2) *****" ); - var aRenderer = ctx1.renderer; - ////////////////////////////////////////// - - var renderer = ctx.renderer; - if (renderer != aRenderer) console.log( "***** DIFFERENT RENDERERS *****" ); renderer.disableCulling(); this.myScene.render(); //console.log( "render" ); @@ -249,8 +245,8 @@ function GLWorld( canvas, use3D ) if (!this.hasAnimatedMaterials()) { //this.myScene.render(); - //this._canvas.task.stop(); - this._renderCount = 10; + this._canvas.task.stop(); + //this._renderCount = 10; } } else if (this._renderCount >= 0) @@ -259,7 +255,6 @@ function GLWorld( canvas, use3D ) if (this._renderCount <= 0) this._canvas.task.stop(); } - } } else diff --git a/js/helper-classes/RDGE/Materials/FlatMaterial.js b/js/helper-classes/RDGE/Materials/FlatMaterial.js index 3e3ae25e..c8eb3b6c 100644 --- a/js/helper-classes/RDGE/Materials/FlatMaterial.js +++ b/js/helper-classes/RDGE/Materials/FlatMaterial.js @@ -121,6 +121,7 @@ function FlatMaterial() flatShaderDef = { 'shaders': { // shader files + //'defaultVShader':"assets/shaders/Taper.vert.glsl", 'defaultVShader':"assets/shaders/Basic.vert.glsl", 'defaultFShader':"assets/shaders/Basic.frag.glsl", }, diff --git a/js/helper-classes/RDGE/Materials/LinearGradientMaterial.js b/js/helper-classes/RDGE/Materials/LinearGradientMaterial.js index ce965296..8b23d77e 100644 --- a/js/helper-classes/RDGE/Materials/LinearGradientMaterial.js +++ b/js/helper-classes/RDGE/Materials/LinearGradientMaterial.js @@ -135,8 +135,10 @@ function LinearGradientMaterial() // duplcate method requirde this.dup = function() { return new LinearGradientMaterial(); } - this.init = function() + this.init = function( world ) { + this.setWorld( world ); + // set up the shader this._shader = new jshader(); this._shader.def = linearGradientMaterialDef; diff --git a/js/helper-classes/RDGE/src/core/script/renderer.js b/js/helper-classes/RDGE/src/core/script/renderer.js index 517947df..04cb36a7 100644 --- a/js/helper-classes/RDGE/src/core/script/renderer.js +++ b/js/helper-classes/RDGE/src/core/script/renderer.js @@ -359,9 +359,11 @@ _renderer = function(canvas) { * @param wrap - optional "CLAMP or "REPEAT", default is clamp * @param mips - optional true/false value to create mipmaps, the default is true */ + this.unloadedTextureCount = 0; _texparams = function(wrap, mips) { this.wrap = wrap, this.mips = mips }; this.createTexture = function(url, wrap, mips) { var texture = this.ctx.createTexture(); + this.unloadedTextureCount++; if (wrap === undefined) wrap = "CLAMP"; @@ -379,7 +381,18 @@ _renderer = function(canvas) { stateMan.RDGEInitState.loadTexture(texture); //console.log( "loaded texture: " + texture.lookUpName ); if (texture.callback) texture.callback( texture ); + this.context.renderer.unloadedTextureCount--; + if (this.context.renderer.unloadedTextureCount < 0) + console.log( "more textures loaded then created..." ); }; + texture.image.onerror = function() { + this.context.renderer.unloadedTextureCount--; + if (texture.callback) texture.callback( texture ); + console.log( "Error loading texture: " + texture.image.src ); + if (this.context.renderer.unloadedTextureCount < 0) + console.log( "more textures loaded then created..." ); + } + } return texture; } -- cgit v1.2.3 From 465636cc0676d7fb83939d6fdb9204e474d47d46 Mon Sep 17 00:00:00 2001 From: hwc487 Date: Mon, 6 Feb 2012 13:08:26 -0800 Subject: Removed an unnecessary (and incorrect) snapping calculation. --- js/helper-classes/3D/snap-manager.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/js/helper-classes/3D/snap-manager.js b/js/helper-classes/3D/snap-manager.js index 8819f637..7e1260bf 100644 --- a/js/helper-classes/3D/snap-manager.js +++ b/js/helper-classes/3D/snap-manager.js @@ -977,7 +977,7 @@ var SnapManager = exports.SnapManager = Montage.create(Component, { viewUtils.setViewportObj( stage ); MathUtils.makeDimension3( screenPt ); - this.hSnapToElements( stage, screenPt, hitRecs, 0, screenPt ); + this.hSnapToElements( stage, hitRecs, 0, screenPt ); return; } @@ -985,7 +985,7 @@ var SnapManager = exports.SnapManager = Montage.create(Component, { hSnapToElements : { - value: function( elt, parentPt, hitRecs, depth, globalScrPt ) + value: function( elt, hitRecs, depth, globalScrPt ) { // hit test the current object var hit; @@ -994,8 +994,7 @@ var SnapManager = exports.SnapManager = Montage.create(Component, { // if the element is in the 2D cache snapping is done there if (elt.elementModel && !elt.elementModel.isIn2DSnapCache) { - var scrPt = viewUtils.parentToChild( parentPt, elt, false ); - hit = this.snapToElement( elt, scrPt, globalScrPt ); + hit = this.snapToElement( elt, globalScrPt ); if (hit) { //hitRecs.push( hit ); @@ -1017,14 +1016,14 @@ var SnapManager = exports.SnapManager = Montage.create(Component, { } // test the rest of the tree var n = elt.childElementCount; - var eltPt = viewUtils.parentToChild( parentPt, elt, true ); + //var eltPt = viewUtils.parentToChild( parentPt, elt, true ); if (n > 0) { for (var i=0; i 0) { xMin = pt[0]; xMax = pt[0] + width; } + else { xMax = pt[0]; xMin = pt[0] + width; } + if (height > 0) { yMin = pt[1]; yMax = pt[1] + height; } + else { yMax = pt[1]; yMin = pt[1] + height; } + + // get the bounds of the element in global screen space + var bounds = ViewUtils.getElementViewBounds3D( elt ); + var bounds3D = []; + for (var i=0; i<4; i++) + bounds3D[i] = ViewUtils.localToGlobal( bounds[i], elt ); + + // get the min/maxs for the element + var xMinElt = bounds3D[0][0], xMaxElt = bounds3D[0][0], + yMinElt = bounds3D[0][1], yMaxElt = bounds3D[0][1]; + for (var i=1; i<4; i++) + { + if (bounds3D[i][0] < xMinElt) xMinElt = bounds3D[i][0]; + else if (bounds3D[i][0] > xMaxElt) xMaxElt = bounds3D[i][0]; + if (bounds3D[i][1] < yMinElt) yMinElt = bounds3D[i][1]; + else if (bounds3D[i][1] > yMaxElt) yMaxElt = bounds3D[i][1]; + } + + // test 1. Overall bounding box test + if ((xMaxElt < xMin) || (xMinElt > xMax) || (yMaxElt < yMin) || (yMinElt > yMax)) + return false; + + // test 2. See if any of the corners of the element are contained in the rectangle + var rect = Object.create(Rectangle, {}); + rect.set( pt[0], pt[1], width, height ); + for (var i=0; i<4; i++) + { + if (rect.contains( bounds3D[i][0], bounds3D[i][1] )) return true; + } + + // test 3. Bounding box tests on individual edges of the element + for (var i=0; i<4; i++) + { + var pt0 = bounds3D[i], + pt1 = bounds3D[(i+1)%4]; + + // get the extremes of the edge + if (pt0[0] < pt1[0]) { xMinElt = pt0[0]; xMaxElt = pt1[0]; } + else { xMaxElt = pt0[0]; xMinElt = pt1[0]; } + if (pt0[1] < pt1[1]) { yMinElt = pt0[1]; yMaxElt = pt1[1]; } + else { yMaxElt = pt0[1]; yMinElt = pt1[1]; } + + if ((xMaxElt < xMin) || (xMinElt > xMax) || (yMaxElt < yMin) || (yMinElt > yMax)) + continue; + else + { + // intersect the element edge with the 4 sides of the rectangle + // vertical edges + var xRect = xMin; + for (var j=0; j<2; j++) + { + if ((xMinElt < xRect) && (xMaxElt > xRect)) +