diff options
-rw-r--r-- | assets/shaders/radialBlur.frag.glsl | 75 | ||||
-rwxr-xr-x | js/helper-classes/3D/StageLine.js | 187 | ||||
-rwxr-xr-x | js/helper-classes/3D/math-utils.js | 9 | ||||
-rwxr-xr-x | js/lib/rdge/materials/material.js | 2 | ||||
-rw-r--r-- | js/lib/rdge/materials/taper-material.js | 2 | ||||
-rw-r--r-- | js/lib/rdge/materials/twist-vert-material.js | 2 |
6 files changed, 245 insertions, 32 deletions
diff --git a/assets/shaders/radialBlur.frag.glsl b/assets/shaders/radialBlur.frag.glsl new file mode 100644 index 00000000..953e6f07 --- /dev/null +++ b/assets/shaders/radialBlur.frag.glsl | |||
@@ -0,0 +1,75 @@ | |||
1 | |||
2 | /* <copyright> | ||
3 | Copyright (c) 2012, Motorola Mobility LLC. | ||
4 | All Rights Reserved. | ||
5 | |||
6 | Redistribution and use in source and binary forms, with or without | ||
7 | modification, are permitted provided that the following conditions are met: | ||
8 | |||
9 | * Redistributions of source code must retain the above copyright notice, | ||
10 | this list of conditions and the following disclaimer. | ||
11 | |||
12 | * Redistributions in binary form must reproduce the above copyright notice, | ||
13 | this list of conditions and the following disclaimer in the documentation | ||
14 | and/or other materials provided with the distribution. | ||
15 | |||
16 | * Neither the name of Motorola Mobility LLC nor the names of its | ||
17 | contributors may be used to endorse or promote products derived from this | ||
18 | software without specific prior written permission. | ||
19 | |||
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
23 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | ||
24 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
25 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
26 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
27 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
28 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
29 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
30 | POSSIBILITY OF SUCH DAMAGE. | ||
31 | </copyright> */ | ||
32 | |||
33 | #ifdef GL_ES | ||
34 | precision highp float; | ||
35 | #endif | ||
36 | |||
37 | uniform vec2 u_resolution; | ||
38 | uniform float u_time; | ||
39 | uniform float u_speed; | ||
40 | uniform sampler2D u_tex0; | ||
41 | |||
42 | |||
43 | void main(void) | ||
44 | { | ||
45 | vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / u_resolution.xy; | ||
46 | vec2 s = p; | ||
47 | |||
48 | float time = u_time * u_speed; | ||
49 | float c1 = 1.1*time, c2 = 1.2*time, c3 = 0.6+1.1*time; | ||
50 | float sc3 = sin(c3), st = sin(time); | ||
51 | |||
52 | const float iterCount = 40.0; | ||
53 | const int iIterCount = int( iterCount ); | ||
54 | |||
55 | vec3 sum = vec3(0.0); | ||
56 | vec2 delta = -p/iterCount; | ||
57 | vec2 uv; | ||
58 | for( int i=0; i<iIterCount; i++ ) | ||
59 | { | ||
60 | vec2 q = vec2( sin(c1 + s.x), sin(c2 + s.y) ); | ||
61 | float a = atan(q.y,q.x); | ||
62 | float rsq = abs(dot(q,q)) + 1.0; | ||
63 | uv.x = st + s.x*rsq; | ||
64 | uv.y = sc3 + s.y*rsq; | ||
65 | vec3 res = texture2D(u_tex0, uv*.5).xyz; | ||
66 | |||
67 | res = smoothstep(0.1,1.0,res*res); | ||
68 | sum += res; | ||
69 | s += delta; | ||
70 | } | ||
71 | sum /= iterCount; | ||
72 | float r = 1.5/(1.0+dot(p,p)); | ||
73 | |||
74 | gl_FragColor = vec4( sum*r, 1.0); | ||
75 | } \ No newline at end of file | ||
diff --git a/js/helper-classes/3D/StageLine.js b/js/helper-classes/3D/StageLine.js index 5aaa325a..f9abc5ce 100755 --- a/js/helper-classes/3D/StageLine.js +++ b/js/helper-classes/3D/StageLine.js | |||
@@ -34,6 +34,7 @@ POSSIBILITY OF SUCH DAMAGE. | |||
34 | // The line class represents a line intersected with all planes on the scene | 34 | // The line class represents a line intersected with all planes on the scene |
35 | /////////////////////////////////////////////////////////////////////// | 35 | /////////////////////////////////////////////////////////////////////// |
36 | var vecUtils = require("js/helper-classes/3D/vec-utils").VecUtils; | 36 | var vecUtils = require("js/helper-classes/3D/vec-utils").VecUtils; |
37 | var viewUtils = require( "js/helper-classes/3D/view-utils").ViewUtils; | ||
37 | var LinePlaneIntersectRec = require("js/helper-classes/3D/LinePlaneIntersectRec").LinePlaneIntersectRec; | 38 | var LinePlaneIntersectRec = require("js/helper-classes/3D/LinePlaneIntersectRec").LinePlaneIntersectRec; |
38 | 39 | ||
39 | var StageLine = exports.StageLine = Object.create(Object.prototype, { | 40 | var StageLine = exports.StageLine = Object.create(Object.prototype, { |
@@ -96,7 +97,7 @@ var StageLine = exports.StageLine = Object.create(Object.prototype, { | |||
96 | if (minPt[2] > plane.getZMax()) return; | 97 | if (minPt[2] > plane.getZMax()) return; |
97 | 98 | ||
98 | // get the boundary points for the plane | 99 | // get the boundary points for the plane |
99 | var boundaryPts = plane.getBoundaryPoints(); | 100 | var boundaryPts = plane.getBoundaryPoints().slice(); |
100 | 101 | ||
101 | // get the points and direction vector for the current line | 102 | // get the points and direction vector for the current line |
102 | var pt0 = this.getPoint0(), pt1 = this.getPoint1(); | 103 | var pt0 = this.getPoint0(), pt1 = this.getPoint1(); |
@@ -115,7 +116,8 @@ var StageLine = exports.StageLine = Object.create(Object.prototype, { | |||
115 | 116 | ||
116 | // see if the intersection point is contained in the bounds | 117 | // see if the intersection point is contained in the bounds |
117 | //var contains = this.boundaryContainsPoint( boundaryPts, plane.isBackFacing(), pt ); | 118 | //var contains = this.boundaryContainsPoint( boundaryPts, plane.isBackFacing(), pt ); |
118 | var contains = MathUtils.boundaryContainsPoint( boundaryPts, pt, plane.isBackFacing() ); | 119 | var onEdge = []; |
120 | var contains = MathUtils.boundaryContainsPoint( boundaryPts, pt, plane.isBackFacing(), onEdge ); | ||
119 | if (contains == MathUtils.INSIDE) | 121 | if (contains == MathUtils.INSIDE) |
120 | { | 122 | { |
121 | // add the intersection | 123 | // add the intersection |
@@ -130,23 +132,40 @@ var StageLine = exports.StageLine = Object.create(Object.prototype, { | |||
130 | { | 132 | { |
131 | if (MathUtils.fpCmp(t,1.0) < 0) | 133 | if (MathUtils.fpCmp(t,1.0) < 0) |
132 | { | 134 | { |
133 | // take the dot product between the line and the normal to the plane | 135 | // determine if the intersection is on a front side (no intersection) of the polygons |
134 | // to determine the change in visibility | 136 | //var ctr = [ 0.5*(boundaryPts[0][0] + boundaryPts[2][0]), 0.5*(boundaryPts[0][1] + boundaryPts[2][1]), 0.5*(boundaryPts[0][2] + boundaryPts[2][2]) ]; |
135 | var vec = vecUtils.vecSubtract( 3, pt1, pt0 ); | 137 | //var vec = vecUtils.vecSubtract(3, pt, ctr ); |
136 | var dot = vecUtils.vecDot( 3, vec, plane.getPlaneEq() ); | 138 | if (this.edgeGoesBehindPlane( plane, boundaryPts, onEdge[0], onEdge[1], pt0, pt1 )) |
137 | var sign = MathUtils.fpSign( dot ); | ||
138 | if (sign == 0) | ||
139 | throw new Error( "coplanar intersection being treated as not coplanar" ); | ||
140 | if (!plane.isBackFacing()) | ||
141 | { | 139 | { |
142 | if (sign < 0) | 140 | this.addIntersection( plane, t, 1 ); |
143 | this.addIntersection( plane, t, 1 ); | ||
144 | } | 141 | } |
145 | else | 142 | else if (this.edgeGoesBehindPlane( plane, boundaryPts, onEdge[0], onEdge[1], pt1, pt0 )) |
146 | { | 143 | { |
147 | if (sign > 0) | 144 | this.addIntersection( plane, t, -1 ); |
148 | this.addIntersection( plane, t, -1 ); | 145 | } |
146 | |||
147 | /* | ||
148 | if ( !this.edgeIsFrontFacing(boundaryPts, planeEq, plane.isBackFacing(), onEdge[0], onEdge[1]) ) | ||
149 | { | ||
150 | // take the dot product between the line and the normal to the plane | ||
151 | // to determine the change in visibility | ||
152 | var vec = vecUtils.vecSubtract( 3, pt1, pt0 ); | ||
153 | var dot = vecUtils.vecDot( 3, vec, planeEq ); | ||
154 | var sign = MathUtils.fpSign( dot ); | ||
155 | if (sign == 0) | ||
156 | throw new Error( "coplanar intersection being treated as not coplanar" ); | ||
157 | if (!plane.isBackFacing()) | ||
158 | { | ||
159 | if (sign < 0) | ||
160 | this.addIntersection( plane, t, 1 ); | ||
161 | } | ||
162 | else | ||
163 | { | ||
164 | if (sign > 0) | ||
165 | this.addIntersection( plane, t, -1 ); | ||
166 | } | ||
149 | } | 167 | } |
168 | */ | ||
150 | } | 169 | } |
151 | } | 170 | } |
152 | } | 171 | } |
@@ -208,18 +227,122 @@ var StageLine = exports.StageLine = Object.create(Object.prototype, { | |||
208 | } | 227 | } |
209 | }, | 228 | }, |
210 | 229 | ||
230 | edgeGoesBehindPlane: | ||
231 | { | ||
232 | value: function( plane, boundaryPts, iEdge, t, lPt0, lPt1 ) | ||
233 | { | ||
234 | var rtnVal = false; | ||
235 | |||
236 | if ( MathUtils.fpCmp(t,1.0) == 0 ) | ||
237 | { | ||
238 | iEdge = (iEdge + 1) % 4; | ||
239 | t = 0.0; | ||
240 | } | ||
241 | |||
242 | // boundary points (line points: lPt0, lPt1) | ||
243 | var bPt0, bPt1, bPt2, bVec, bVec0, bVec1, lVec, d; | ||
244 | |||
245 | var planeEq = plane.getPlaneEq(); | ||
246 | if (MathUtils.fpSign(t) == 0) | ||
247 | { | ||
248 | // get the 3 relevant points. The line goes through pt1. | ||
249 | bPt0 = boundaryPts[(iEdge+3)%4].slice(); | ||
250 | bPt1 = boundaryPts[iEdge].slice(); | ||
251 | bPt2 = boundaryPts[(iEdge+1)%4].slice(); | ||
252 | bVec0 = vecUtils.vecSubtract(2, bPt0, bPt1); | ||
253 | bVec1 = vecUtils.vecSubtract(2, bPt2, bPt1); | ||
254 | lVec = vecUtils.vecSubtract(2, lPt1, bPt1); | ||
255 | |||
256 | var c0 = vecUtils.vecCross(2, bVec1, lVec), | ||
257 | c1 = vecUtils.vecCross(2, lVec, bVec0); | ||
258 | // if ((MathUtils.fpSign(c0) < 0) && (MathUtils.fpSign(c1) < 0)) | ||
259 | // rtnVal = true; | ||
260 | if (!plane.isBackFacing() && (MathUtils.fpSign(c0) < 0) && (MathUtils.fpSign(c1) < 0)) | ||
261 | rtnVal = true; | ||
262 | else if (plane.isBackFacing() && (MathUtils.fpSign(c0) > 0) && (MathUtils.fpSign(c1) > 0)) | ||
263 | rtnVal = true; | ||
264 | |||
265 | d = vecUtils.vecDot(3, lPt1, planeEq) + planeEq[3]; | ||
266 | if (rtnVal && (MathUtils.fpSign(d) > 0)) rtnVal = false; | ||
267 | } | ||
268 | else | ||
269 | { | ||
270 | bPt0 = boundaryPts[iEdge].slice(); | ||
271 | bPt1 = boundaryPts[(iEdge+1)%4].slice(); | ||
272 | bVec = vecUtils.vecSubtract(3, bPt1, bPt0); | ||
273 | lVec = vecUtils.vecSubtract(3, lPt1, lPt0); | ||
274 | |||
275 | var backFacing = plane.isBackFacing(); | ||
276 | var bNormal = vecUtils.vecCross(3, [0,0,1], bVec); |