aboutsummaryrefslogtreecommitdiff
path: root/js/helper-classes/3D
diff options
context:
space:
mode:
authorValerio Virgillito2012-04-24 15:38:05 -0700
committerValerio Virgillito2012-04-24 15:38:05 -0700
commitd0893407d35f4e05bbe2fd41c2b70151984fe481 (patch)
tree33643dfc1daabb0604b04b78a89003d562045c9d /js/helper-classes/3D
parent4b5cc9cf1f01552f61c08b9299b6e99366432e03 (diff)
parentd3a6350163ada5644d34ed8d5c2a00cef4db2afc (diff)
downloadninja-d0893407d35f4e05bbe2fd41c2b70151984fe481.tar.gz
Merge branch 'refs/heads/master' into stage-document-architecture
Diffstat (limited to 'js/helper-classes/3D')
-rwxr-xr-xjs/helper-classes/3D/vec-utils.js19
-rwxr-xr-xjs/helper-classes/3D/view-utils.js85
2 files changed, 75 insertions, 29 deletions
diff --git a/js/helper-classes/3D/vec-utils.js b/js/helper-classes/3D/vec-utils.js
index 4eacd856..0916c840 100755
--- a/js/helper-classes/3D/vec-utils.js
+++ b/js/helper-classes/3D/vec-utils.js
@@ -113,6 +113,25 @@ var VecUtils = exports.VecUtils = Object.create(Object.prototype,
113 } 113 }
114 }, 114 },
115 115
116 vecDistSq : {
117 value: function( dimen, a, b ) {
118 var sum;
119
120 if ((a.length < dimen) || (b.length < dimen))
121 {
122 throw new Error( "dimension error in VecUtils.vecDistSq" );
123 }
124
125 var sum = 0.0;
126 for (var i=0; i<dimen; i++)
127 {
128 var d = a[i] - b[i];
129 sum += d*d;
130 }
131 return sum;
132 }
133 },
134
116 vecDot : { 135 vecDot : {
117 value: function( dimen, v0, v1 ) { 136 value: function( dimen, v0, v1 ) {
118 if ((v0.length < dimen) || (v1.length < dimen)) 137 if ((v0.length < dimen) || (v1.length < dimen))
diff --git a/js/helper-classes/3D/view-utils.js b/js/helper-classes/3D/view-utils.js
index ee822f1f..40a19b90 100755
--- a/js/helper-classes/3D/view-utils.js
+++ b/js/helper-classes/3D/view-utils.js
@@ -246,7 +246,6 @@ exports.ViewUtils = Montage.create(Component, {
246 var worldPt = MathUtils.transformPoint( viewPt, mat ); 246 var worldPt = MathUtils.transformPoint( viewPt, mat );
247 var stageWorldPt = this.postViewToStageWorld( worldPt, elt ); 247 var stageWorldPt = this.postViewToStageWorld( worldPt, elt );
248 this.popViewportObj(); 248 this.popViewportObj();
249
250 return stageWorldPt; 249 return stageWorldPt;
251 } 250 }
252 }, 251 },
@@ -841,43 +840,21 @@ exports.ViewUtils = Montage.create(Component, {
841 }, 840 },
842 841
843 getStageWorldToGlobalMatrix: 842 getStageWorldToGlobalMatrix:
844 { 843 {
845 value: function() 844 value: function()
846 { 845 {
847 var stage = this.application.ninja.currentDocument.documentRoot; 846 var stage = this.application.ninja.currentDocument.documentRoot;
848 //projMat;
849
850 // get the matrix to the parent
851 //var mat = Matrix.I(4);
852 847
853 this.pushViewportObj( stage ); 848 this.pushViewportObj( stage );
849 // put the point into screen space of the stage - requires
850 // a translation to the top/left only
854 var cop = this.getCenterOfProjection(); 851 var cop = this.getCenterOfProjection();
855 var v2s = Matrix.Translation([cop[0], cop[1], 0]); 852 var v2s = Matrix.Translation([cop[0], cop[1], 0]);
856 this.popViewportObj(); 853 this.popViewportObj();
857 854
858 /* 855 // append the localToGlobal matrix of the stage.
859 var p = this.getPerspectiveDistFromElement(stage);
860 if(p)
861 {
862 projMat = glmat4.scale( Matrix.I(4), [p,p,p], [] );
863 projMat[11] = -1;
864 }
865 else
866 {
867 mat = v2s;
868 }
869 // offset to the parent
870 var offset = this.getElementOffset( stage );
871 var offMat = Matrix.Translation([offset[0], offset[1], 0]);
872 //mat = offMat.multiply( mat );
873 glmat4.multiply( offMat, mat, mat );
874 this.popViewportObj();
875 */
876
877 // append the localToGlobal matrix of the stage.
878 var mat = this.getLocalToGlobalMatrix( stage ); 856 var mat = this.getLocalToGlobalMatrix( stage );
879 glmat4.multiply( mat, v2s ); 857 glmat4.multiply( mat, v2s );
880
881 return mat; 858 return mat;
882 } 859 }
883 }, 860 },
@@ -1056,6 +1033,56 @@ exports.ViewUtils = Montage.create(Component, {
1056 } 1033 }
1057 }, 1034 },
1058 1035
1036 getLocalToStageWorldMatrix: {
1037 value: function( elt, shouldProject, shouldLocalTransform ) {
1038 var mat = Matrix.I(4);
1039 while (elt)
1040 {
1041 this.pushViewportObj( elt );
1042 var cop = this.getCenterOfProjection();
1043 var s2v = Matrix.Translation([-cop[0], -cop[1], 0]);
1044 var objMat = this.getMatrixFromElement( elt );
1045 var projMat;
1046 if(shouldProject)
1047 {
1048 //projMat = Matrix.I(4).multiply( this.getPerspectiveDistFromElement(elt) );
1049 var pDist = this.getPerspectiveDistFromElement(elt);
1050 var projMat = glmat4.scale(Matrix.I(4), [pDist,pDist,pDist], []);
1051 projMat[11] = -1;
1052 projMat[15] = 1400;
1053 }
1054 var v2s = Matrix.Translation([cop[0], cop[1], 0]);
1055 this.popViewportObj();
1056
1057 // multiply all the matrices together
1058 //mat = s2v.multiply( mat );
1059 glmat4.multiply( s2v, mat, mat );
1060 if (elt === this._stageElement) break;
1061 //mat = objMat.multiply( mat );
1062 if (shouldLocalTransform) {
1063 glmat4.multiply( objMat, mat, mat );
1064 }
1065 if(shouldProject)
1066 {
1067 //mat = projMat.multiply( mat );
1068 glmat4.multiply( projMat, mat, mat );
1069 }
1070 //mat = v2s.multiply( mat );
1071 glmat4.multiply( v2s, mat, mat );
1072
1073 // offset to the parent
1074 var offset = this.getElementOffset( elt );
1075 var offMat = Matrix.Translation([offset[0], offset[1], 0]);
1076 //mat = offMat.multiply( mat );
1077 glmat4.multiply( offMat, mat, mat );
1078
1079 elt = elt.parentElement;
1080 }
1081
1082 return mat;
1083 }
1084 },
1085
1059 getUpVectorFromMatrix: { 1086 getUpVectorFromMatrix: {
1060 value: function( mat ) { 1087 value: function( mat ) {
1061 //var inv = mat.inverse(); 1088 //var inv = mat.inverse();