aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--js/helper-classes/RDGE/GLMaterial.js11
-rw-r--r--js/helper-classes/RDGE/GLRectangle.js148
-rw-r--r--js/helper-classes/RDGE/GLWorld.js25
-rw-r--r--js/helper-classes/RDGE/Materials/FlatMaterial.js1
-rw-r--r--js/helper-classes/RDGE/Materials/LinearGradientMaterial.js4
-rw-r--r--js/helper-classes/RDGE/src/core/script/renderer.js13
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 )
31 31
32 this._texture; 32 this._texture;
33 33
34 // vertex deformation variables
35 this._hasVertexDeformation = false;
36 this._vertexDeformationRange = [0, 0, 1, 1]; // (xMin, yMin, xMax, yMax)
37 this._vertexDeformationTolerance = 0.05;
38
34 // RDGE variables 39 // RDGE variables
35 this._shader; 40 this._shader;
36 this._materialNode; 41 this._materialNode;
@@ -66,6 +71,12 @@ function GLMaterial( world )
66 // Any material needing continuous rendering should override this method 71 // Any material needing continuous rendering should override this method
67 this.isAnimated = function() { return false; } 72 this.isAnimated = function() { return false; }
68 73
74 // the vertex shader can apply deformations requiring refinement in
75 // certain areas.
76 this.hasVertexDeformation = function() { return this._hasVertexDeformation; }
77 this.getVertexDeformationRange = function() { return this._vertexDeformationRange.slice(); }
78 this.getVertexDeformationTolerance = function() { return this._vertexDeformationTolerance; }
79
69 80
70 /////////////////////////////////////////////////////////////////////// 81 ///////////////////////////////////////////////////////////////////////
71 // Common Material Methods 82 // 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()
280 280
281 // stroke 281 // stroke
282 var strokeMaterial = this.makeStrokeMaterial(); 282 var strokeMaterial = this.makeStrokeMaterial();
283 prim = this.createStroke([x,y], 2*xFill, 2*yFill, strokeSize, tlRadius, blRadius, brRadius, trRadius, strokeMaterial) 283 prim = this.createStroke([x,y], 2*xFill, 2*yFill, strokeSize, tlRadius, blRadius, brRadius, trRadius);
284 this._primArray.push( prim ); 284 this._primArray.push( prim );
285 this._materialNodeArray.push( strokeMaterial.getMaterialNode() ); 285 this._materialNodeArray.push( strokeMaterial.getMaterialNode() );
286 286
@@ -486,7 +486,7 @@ function GLRectangle()
486 this.createStroke = function(ctr, width, height, strokeWidth, tlRad, blRad, brRad, trRad, material) 486 this.createStroke = function(ctr, width, height, strokeWidth, tlRad, blRad, brRad, trRad, material)
487 { 487 {
488 // create the geometry 488 // create the geometry
489 var prim = RectangleStroke.create( ctr, width, height, strokeWidth, tlRad, blRad, brRad, trRad) 489 var prim = RectangleStroke.create( ctr, width, height, strokeWidth, tlRad, blRad, brRad, trRad, material)
490 return prim; 490 return prim;
491 } 491 }
492 492
@@ -496,9 +496,9 @@ function GLRectangle()
496 // special the (common) case of no rounded corners 496 // special the (common) case of no rounded corners
497 var prim 497 var prim
498 if ((tlRad <= 0) && (blRad <= 0) && (brRad <= 0) && (trRad <= 0)) 498 if ((tlRad <= 0) && (blRad <= 0) && (brRad <= 0) && (trRad <= 0))
499 prim = RectangleGeometry.create( ctr, width, height ); 499 prim = RectangleGeometry.create( ctr, width, height, material );
500 else 500 else
501 prim = RectangleFill.create( ctr, width, height, tlRad, blRad, brRad, trRad); 501 prim = RectangleFill.create( ctr, width, height, tlRad, blRad, brRad, trRad, material);
502 502
503 return prim; 503 return prim;
504 } 504 }
@@ -747,7 +747,7 @@ function GLRectangle()
747 } 747 }
748 748
749RectangleFill = {}; 749RectangleFill = {};
750RectangleFill.create = function( rectCtr, width, height, tlRad, blRad, brRad, trRad) 750RectangleFill.create = function( rectCtr, width, height, tlRad, blRad, brRad, trRad, material)
751{ 751{
752 var x = rectCtr[0], y = rectCtr[1], z = 0.0; 752 var x = rectCtr[0], y = rectCtr[1], z = 0.0;
753 var hw = 0.5*width, hh = 0.5*height; 753 var hw = 0.5*width, hh = 0.5*height;
@@ -834,6 +834,17 @@ RectangleFill.create = function( rectCtr, width, height, tlRad, blRad, brRad,
834 j++; 834 j++;
835 } 835 }
836 836
837 //refine the mesh for vertex deformations
838 if (material)
839 {
840 if (material.hasVertexDeformation())
841 {
842 var paramRange = material.getVertexDeformationRange();
843 var tolerance = material.getVertexDeformationTolerance();
844 nVertices = ShapePrimitive.refineMesh( this.vertices, this.normals, this.uvs, this.indices, nVertices, paramRange, tolerance );
845 }
846 }
847
837 // create the RDGE primitive 848 // create the RDGE primitive
838 var prim = ShapePrimitive.create(this.vertices, this.normals, this.uvs, this.indices, g_Engine.getContext().renderer.TRIANGLES, nVertices); 849 var prim = ShapePrimitive.create(this.vertices, this.normals, this.uvs, this.indices, g_Engine.getContext().renderer.TRIANGLES, nVertices);
839 return prim; 850 return prim;
@@ -906,7 +917,7 @@ RectangleFill.getRoundedCorner = function(ctr, startPt, vertices)
906 917
907 918
908RectangleStroke = {}; 919RectangleStroke = {};
909RectangleStroke.create = function( rectCtr, width, height, strokeWidth, tlRad, blRad, brRad, trRad) 920RectangleStroke.create = function( rectCtr, width, height, strokeWidth, tlRad, blRad, brRad, trRad, material)
910{ 921{
911 var x = rectCtr[0], y = rectCtr[1], z = 0.0; 922 var x = rectCtr[0], y = rectCtr[1], z = 0.0;
912 var hw = 0.5*width, hh = 0.5*height, sw = strokeWidth; 923 var hw = 0.5*width, hh = 0.5*height, sw = strokeWidth;
@@ -1097,6 +1108,17 @@ RectangleStroke.create = function( rectCtr, width, height, strokeWidth, tlRad,
1097 k++; 1108 k++;
1098 } 1109 }
1099 1110
1111 //refine the mesh for vertex deformations
1112 if (material)
1113 {
1114 if (material.hasVertexDeformation())
1115 {
1116 var paramRange = material.getVertexDeformationRange();
1117 var tolerance = material.getVertexDeformationTolerance();
1118 nVertices = ShapePrimitive.refineMesh( this.vertices, this.normals, this.uvs, this.indices, nVertices, paramRange, tolerance );
1119 }
1120 }
1121
1100 // create the RDGE primitive 1122 // create the RDGE primitive
1101 var prim = ShapePrimitive.create(this.vertices, this.normals, this.uvs, this.indices, g_Engine.getContext().renderer.TRIANGLES, nVertices); 1123 var prim = ShapePrimitive.create(this.vertices, this.normals, this.uvs, this.indices, g_Engine.getContext().renderer.TRIANGLES, nVertices);
1102 return prim; 1124 return prim;
@@ -1141,7 +1163,7 @@ RectangleStroke.getUV = RectangleFill.getUV;
1141 1163
1142// Helper function for generating Three.js geometry 1164// Helper function for generating Three.js geometry
1143RectangleGeometry = {}; 1165RectangleGeometry = {};
1144RectangleGeometry.create = function( ctr, width, height ) 1166RectangleGeometry.create = function( ctr, width, height, material )
1145{ 1167{
1146 var x = ctr[0], y = ctr[1], z = 0.0; 1168 var x = ctr[0], y = ctr[1], z = 0.0;
1147 var hw = 0.5*width, hh = 0.5*height; 1169 var hw = 0.5*width, hh = 0.5*height;
@@ -1179,6 +1201,17 @@ RectangleGeometry.create = function( ctr, width, height )
1179 RectangleGeometry.pushIndices( 2, 1, 0 ); 1201 RectangleGeometry.pushIndices( 2, 1, 0 );
1180 RectangleGeometry.pushIndices( 0, 3, 2 ); 1202 RectangleGeometry.pushIndices( 0, 3, 2 );
1181 1203
1204 //refine the mesh for vertex deformations
1205 if (material)
1206 {
1207 if (material.hasVertexDeformation())
1208 {
1209 var paramRange = material.getVertexDeformationRange();
1210 var tolerance = material.getVertexDeformationTolerance();
1211 nVertices = ShapePrimitive.refineMesh( this.vertices, this.normals, this.uvs, this.indices, nVertices, paramRange, tolerance );
1212 }
1213 }
1214
1182 // create the RDGE primitive 1215 // create the RDGE primitive
1183 var prim = ShapePrimitive.create(this.vertices, this.normals, this.uvs, this.indices, g_Engine.getContext().renderer.TRIANGLES, nVertices); 1216 var prim = ShapePrimitive.create(this.vertices, this.normals, this.uvs, this.indices, g_Engine.getContext().renderer.TRIANGLES, nVertices);
1184 return prim; 1217 return prim;
@@ -1249,4 +1282,103 @@ ShapePrimitive.create = function(coords, normals, uvs, indices, primType, ver
1249 renderer.createPrimitive(prim, vertexCount); 1282 renderer.createPrimitive(prim, vertexCount);
1250 1283
1251 return prim; 1284 return prim;
1252} \ No newline at end of file 1285}
1286
1287
1288ShapePrimitive.refineMesh = function( verts, norms, uvs, indices, nVertices, paramRange, tolerance )
1289{
1290 // get the param range
1291 var pUMin = paramRange[0], pVMin = paramRange[1],
1292 pUMax = paramRange[2], pVMax = paramRange[3];
1293 var iTriangle = 0;
1294 var nTriangles = indices.length/3;
1295 var index = 0;
1296 while (iTriangle < nTriangles)
1297 {
1298 // get the indices of the 3 vertices
1299 var i0 = indices[index],
1300 i1 = indices[index+1],
1301 i2 = indices[index+2];
1302
1303 // get the uv values
1304 var vrtIndex = 3*iTriangle;
1305 var iuv0 = 2 * i0,
1306 iuv1 = 2 * i1,
1307 iuv2 = 2 * i2;
1308 var u0 = uvs[iuv0], v0 = uvs[iuv0+1],
1309 u1 = uvs[iuv1], v1 = uvs[iuv1+1],
1310 u2 = uvs[iuv2], v2 = uvs[iuv2+1];
1311
1312 // find the u and v range
1313 var uMin = u0, vMin = v0;
1314 if (u1 < uMin) uMin = u1; if (v1 < vMin) vMin = v1;
1315 if (u2 < uMin) uMin = u2; if (v2 < vMin) vMin = v2;
1316 var uMax = u0, vMax = v0;
1317 if (u1 > uMax) uMax = u1; if (v1 > vMax) vMax = v1;
1318 if (u2 > uMax) uMax = u2; if (v2 > vMax) vMax = v2;
1319
1320 // if the parameter range of the triangle is outside the
1321 // desired parameter range, advance to the next polygon and continue
1322 if ((uMin > pUMax) || (uMax < pUMin) || (vMin > pVMax) || (vMax < pVMin))
1323 {
1324 // go to the next triangle
1325 iTriangle++;
1326 index += 3;