diff options
author | hwc487 | 2012-05-22 16:40:42 -0700 |
---|---|---|
committer | hwc487 | 2012-05-22 16:40:42 -0700 |
commit | 08851078e89e9d4cb8fa341fa697a91be8de8ab9 (patch) | |
tree | fee8c0d38c1c540ef00c33e728346d765a4e699c /js/lib/geom/circle.js | |
parent | 50ede4afa801f53caff7939dad0408f9a0a8b744 (diff) | |
parent | 862ee363584dfba4bdd9abacbc3a3244c7ec66b5 (diff) | |
download | ninja-08851078e89e9d4cb8fa341fa697a91be8de8ab9.tar.gz |
Merge branch 'master' of github.com:Motorola-Mobility/ninja-internal into Textures
Conflicts:
js/lib/geom/shape-primitive.js
js/lib/rdge/materials/linear-gradient-material.js
Diffstat (limited to 'js/lib/geom/circle.js')
-rwxr-xr-x | js/lib/geom/circle.js | 124 |
1 files changed, 46 insertions, 78 deletions
diff --git a/js/lib/geom/circle.js b/js/lib/geom/circle.js index 425b869a..4a369844 100755 --- a/js/lib/geom/circle.js +++ b/js/lib/geom/circle.js | |||
@@ -311,6 +311,7 @@ exports.Circle = Object.create(GeomObj, { | |||
311 | 311 | ||
312 | if (fillPrim) { | 312 | if (fillPrim) { |
313 | fillMaterial = this.makeFillMaterial(); | 313 | fillMaterial = this.makeFillMaterial(); |
314 | fillMaterial.fitToPrimitive( fillPrim ); | ||
314 | 315 | ||
315 | this._primArray.push( fillPrim ); | 316 | this._primArray.push( fillPrim ); |
316 | this._materialNodeArray.push( fillMaterial.getMaterialNode() ); | 317 | this._materialNodeArray.push( fillMaterial.getMaterialNode() ); |
@@ -318,6 +319,7 @@ exports.Circle = Object.create(GeomObj, { | |||
318 | 319 | ||
319 | if (strokePrim0) { | 320 | if (strokePrim0) { |
320 | strokeMaterial0 = this.makeStrokeMaterial(); | 321 | strokeMaterial0 = this.makeStrokeMaterial(); |
322 | strokeMaterial0.fitToPrimitive( strokePrim0 ); | ||
321 | 323 | ||
322 | this._primArray.push( strokePrim0 ); | 324 | this._primArray.push( strokePrim0 ); |
323 | this._materialNodeArray.push( strokeMaterial0.getMaterialNode() ); | 325 | this._materialNodeArray.push( strokeMaterial0.getMaterialNode() ); |
@@ -325,6 +327,7 @@ exports.Circle = Object.create(GeomObj, { | |||
325 | 327 | ||
326 | if (strokePrim1) { | 328 | if (strokePrim1) { |
327 | strokeMaterial2 = this.makeStrokeMaterial(); | 329 | strokeMaterial2 = this.makeStrokeMaterial(); |
330 | strokeMaterial2.fitToPrimitive( strokePrim1 ); | ||
328 | 331 | ||
329 | this._primArray.push( strokePrim1 ); | 332 | this._primArray.push( strokePrim1 ); |
330 | this._materialNodeArray.push( strokeMaterial2.getMaterialNode() ); | 333 | this._materialNodeArray.push( strokeMaterial2.getMaterialNode() ); |
@@ -502,9 +505,9 @@ exports.Circle = Object.create(GeomObj, { | |||
502 | if(this._fillColor.gradientMode) { | 505 | if(this._fillColor.gradientMode) { |
503 | if(this._fillColor.gradientMode === "radial") { | 506 | if(this._fillColor.gradientMode === "radial") { |
504 | gradient = ctx.createRadialGradient(xCtr, yCtr, 0, | 507 | gradient = ctx.createRadialGradient(xCtr, yCtr, 0, |
505 | xCtr, yCtr, Math.max(this._width, this._height)/2); | 508 | xCtr, yCtr, Math.max(this._width, this._height)/2 - lineWidth); |
506 | } else { | 509 | } else { |
507 | gradient = ctx.createLinearGradient(lineWidth/2, this._height/2, this._width-lineWidth, this._height/2); | 510 | gradient = ctx.createLinearGradient(lineWidth, this._height/2, this._width-lineWidth, this._height/2); |
508 | } | 511 | } |
509 | colors = this._fillColor.color; | 512 | colors = this._fillColor.color; |
510 | 513 | ||
@@ -578,7 +581,7 @@ exports.Circle = Object.create(GeomObj, { | |||
578 | if (this._strokeColor) { | 581 | if (this._strokeColor) { |
579 | if(this._strokeColor.gradientMode) { | 582 | if(this._strokeColor.gradientMode) { |
580 | if(this._strokeColor.gradientMode === "radial") { | 583 | if(this._strokeColor.gradientMode === "radial") { |
581 | gradient = ctx.createRadialGradient(xCtr, yCtr, Math.min(xScale, yScale), | 584 | gradient = ctx.createRadialGradient(xCtr, yCtr, 0, |
582 | xCtr, yCtr, 0.5*Math.max(this._height, this._width)); | 585 | xCtr, yCtr, 0.5*Math.max(this._height, this._width)); |
583 | } else { | 586 | } else { |
584 | gradient = ctx.createLinearGradient(0, this._height/2, this._width, this._height/2); | 587 | gradient = ctx.createLinearGradient(0, this._height/2, this._width, this._height/2); |
@@ -801,79 +804,44 @@ exports.Circle = Object.create(GeomObj, { | |||
801 | } | 804 | } |
802 | }, | 805 | }, |
803 | 806 | ||
804 | /* | 807 | recalcTexMapCoords: { |
805 | this.getNearPoint = function( pt, dir ) { | 808 | value: function(vrts, uvs) { |
806 | var world = this.getWorld(); | 809 | var n = vrts.length/3; |
807 | if (!world) throw( "null world in getNearPoint" ); | 810 | if (n === 0) return; |
808 | 811 | var ivrt = 0, iuv = 0; | |
809 | // get a point on the plane of the circle | 812 | var uMin = 1.e8, uMax = -1.e8, |
810 | // the point is in NDC, as is the input parameters | 813 | vMin = 1.e8, vMax = -1.e8; |
811 | var mat = this.getMatrix(); | 814 | |
812 | var plane = [0,0,1,0]; | 815 | var i, index = 3; |
813 | plane = MathUtils.transformPlane( plane, mat ); | 816 | var xMin = vrts[0], xMax = vrts[0], |
814 | var projPt = MathUtils.vecIntersectPlane ( pt, dir, plane ); | 817 | yMin = vrts[1], yMax = vrts[1]; |
815 | 818 | for (i=1; i<n; i++) | |
816 | // transform the projected point back to the XY plane | 819 | { |
817 | //var invMat = mat.inverse(); | 820 | if (vrts[index] < xMin) xMin = vrts[index]; |
818 | var invMat = glmat4.inverse( mat, [] ); | 821 | else if (vrts[index] > xMax) xMax = vrts[index]; |
819 | var planePt = MathUtils.transformPoint( projPt, invMat ); | 822 | |
820 | 823 | if (vrts[index+1] < yMin) yMin = vrts[index+1]; | |
821 | // get the normalized device coordinates (NDC) for | 824 | else if (vrts[index+1] > yMax) yMax = vrts[index+1]; |
822 | // the position and radii. | 825 | |
823 | var vpw = world.getViewportWidth(), vph = world.getViewportHeight(); | 826 | index += 3; |
824 | var xNDC = 2*this._xOffset/vpw, yNDC = -2*this._yOffset/vph, | 827 | } |
825 | xRadNDC = this._width/vpw, yRadNDC = this._height/vph; | 828 | var ovalWidth = xMax - xMin, |
826 | var projMat = world.makePerspectiveMatrix(); | 829 | ovalHeight = yMax - yMin; |
827 | var z = -world.getViewDistance(); | 830 | for (i=0; i<n; i++) { |
828 | var planePtNDC = planePt.slice(0); | 831 | uvs[iuv] = (vrts[ivrt]-xMin)/ovalWidth; |
829 | planePtNDC[2] = z; | 832 | if (uvs[iuv] < uMin) uMin = uvs[iuv]; |
830 | planePtNDC = MathUtils.transformHomogeneousPoint( planePtNDC, projMat ); | 833 | if (uvs[iuv] > uMax) uMax = uvs[iuv]; |
831 | planePtNDC = MathUtils.applyHomogeneousCoordinate( planePtNDC ); | 834 | |
832 | 835 | iuv++; ivrt++; | |
833 | // get the gl coordinates | 836 | uvs[iuv] = (vrts[ivrt]-yMin)/ovalHeight; |
834 | var aspect = world.getAspect(); | 837 | if (uvs[iuv] < vMin) vMin = uvs[iuv]; |
835 | var zn = world.getZNear(), zf = world.getZFar(); | 838 | if (uvs[iuv] > vMax) vMax = uvs[iuv]; |
836 | var t = zn * Math.tan(world.getFOV() * Math.PI / 360.0), | 839 | iuv++; ivrt += 2; |
837 | b = -t, | 840 | } |
838 | r = aspect*t, | 841 | |
839 | l = -r; | 842 | //console.log( "remap" ); |
840 | 843 | //console.log( "uRange: " + uMin + " => " + uMax ); | |
841 | var angle = Math.atan2( planePtNDC[1] - yNDC, planePtNDC[0] - xNDC ); | 844 | //console.log( "vRange: " + vMin + " => " + vMax ); |
842 | var degrees = angle*180.0/Math.PI; | 845 | } |
843 | var objPt = [Math.cos(angle)*xRadNDC + xNDC, Math.sin(angle)*yRadNDC + yNDC, 0]; | 846 | } |
844 | |||
845 | // convert to GL coordinates | ||
846 | objPt[0] = -z*(r-l)/(2.0*zn)*objPt[0]; | ||
847 | objPt[1] = -z*(t-b)/(2.0*zn)*objPt[1]; | ||
848 | |||
849 | // re-apply the transform | ||
850 | objPt = MathUtils.transformPoint( objPt, mat ); | ||
851 | |||
852 | return objPt; | ||
853 | }; | ||
854 | */ | ||
855 | recalcTexMapCoords: { | ||
856 | value: function(vrts, uvs) { | ||
857 | var n = vrts.length/3; | ||
858 | var ivrt = 0, iuv = 0; | ||
859 | var uMin = 1.e8, uMax = -1.e8, | ||
860 | vMin = 1.e8, vMax = -1.e8; | ||
861 | |||
862 | for (var i=0; i<n; i++) { | ||
863 | uvs[iuv] = 0.5*(vrts[ivrt]/this._ovalWidth + 1); | ||
864 | if (uvs[iuv] < uMin) uMin = uvs[iuv]; | ||
865 | if (uvs[iuv] > uMax) uMax = uvs[iuv]; | ||
866 | |||
867 | iuv++; ivrt++; | ||
868 | uvs[iuv] = 0.5*(vrts[ivrt]/this._ovalHeight + 1); | ||
869 | if (uvs[iuv] < vMin) vMin = uvs[iuv]; | ||
870 | if (uvs[iuv] > vMax) vMax = uvs[iuv]; | ||
871 | iuv++; ivrt += 2; | ||
872 | } | ||
873 | |||
874 | //console.log( "remap: " + uvs ); | ||
875 | //console.log( "uRange: " + uMin + " => " + uMax ); | ||
876 | //console.log( "vRange: " + vMin + " => " + vMax ); | ||
877 | } | ||
878 | } | ||
879 | }); \ No newline at end of file | 847 | }); \ No newline at end of file |