cesium 0.22.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/Cesium.js +5 -2
  3. data/app/assets/javascripts/Core/Cartesian2.js +58 -0
  4. data/app/assets/javascripts/Core/Cartesian3.js +67 -7
  5. data/app/assets/javascripts/Core/Cartesian4.js +63 -0
  6. data/app/assets/javascripts/Core/CatmullRomSpline.js +183 -163
  7. data/app/assets/javascripts/Core/CorridorGeometry.js +2 -2
  8. data/app/assets/javascripts/Core/Ellipsoid.js +16 -0
  9. data/app/assets/javascripts/Core/ExtentGeometry.js +9 -2
  10. data/app/assets/javascripts/Core/ExtentOutlineGeometry.js +2 -2
  11. data/app/assets/javascripts/Core/GeometryPipeline.js +23 -23
  12. data/app/assets/javascripts/Core/HermiteSpline.js +260 -155
  13. data/app/assets/javascripts/Core/IndexDatatype.js +43 -34
  14. data/app/assets/javascripts/Core/LinearSpline.js +118 -0
  15. data/app/assets/javascripts/Core/Math.js +34 -3
  16. data/app/assets/javascripts/Core/Matrix2.js +26 -0
  17. data/app/assets/javascripts/Core/Matrix3.js +98 -0
  18. data/app/assets/javascripts/Core/Matrix4.js +42 -0
  19. data/app/assets/javascripts/Core/ObjectOrientedBoundingBox.js +396 -0
  20. data/app/assets/javascripts/Core/PolygonGeometry.js +87 -47
  21. data/app/assets/javascripts/Core/PolygonGeometryLibrary.js +20 -17
  22. data/app/assets/javascripts/Core/PolygonOutlineGeometry.js +68 -40
  23. data/app/assets/javascripts/Core/PolygonPipeline.js +19 -9
  24. data/app/assets/javascripts/Core/PrimitiveType.js +33 -36
  25. data/app/assets/javascripts/Core/Quaternion.js +147 -1
  26. data/app/assets/javascripts/Core/QuaternionSpline.js +160 -0
  27. data/app/assets/javascripts/Core/Spline.js +121 -0
  28. data/app/assets/javascripts/Core/Transforms.js +0 -2
  29. data/app/assets/javascripts/Core/loadArrayBuffer.js +5 -1
  30. data/app/assets/javascripts/Core/loadBlob.js +5 -1
  31. data/app/assets/javascripts/Core/loadText.js +4 -1
  32. data/app/assets/javascripts/Core/loadWithXhr.js +30 -14
  33. data/app/assets/javascripts/DynamicScene/PolylineOutlineMaterialProperty.js +2 -2
  34. data/app/assets/javascripts/Renderer/AutomaticUniforms.js +41 -41
  35. data/app/assets/javascripts/Renderer/Context.js +171 -201
  36. data/app/assets/javascripts/Renderer/CubeMapFace.js +2 -2
  37. data/app/assets/javascripts/Renderer/DrawCommand.js +2 -2
  38. data/app/assets/javascripts/Renderer/PixelFormat.js +22 -28
  39. data/app/assets/javascripts/Renderer/ShaderProgram.js +65 -46
  40. data/app/assets/javascripts/Renderer/Texture.js +1 -1
  41. data/app/assets/javascripts/Renderer/TextureMagnificationFilter.js +7 -9
  42. data/app/assets/javascripts/Renderer/TextureMinificationFilter.js +19 -25
  43. data/app/assets/javascripts/Renderer/TextureWrap.js +11 -13
  44. data/app/assets/javascripts/Renderer/UniformDatatype.js +29 -29
  45. data/app/assets/javascripts/Renderer/VertexArray.js +43 -35
  46. data/app/assets/javascripts/Scene/ArcGisMapServerImageryProvider.js +1 -2
  47. data/app/assets/javascripts/Scene/BillboardCollection.js +10 -1
  48. data/app/assets/javascripts/Scene/CameraFlightPath.js +58 -101
  49. data/app/assets/javascripts/Scene/CentralBody.js +1 -4
  50. data/app/assets/javascripts/Scene/CentralBodySurface.js +1 -2
  51. data/app/assets/javascripts/Scene/CesiumTerrainProvider.js +1 -2
  52. data/app/assets/javascripts/Scene/CustomSensorVolume.js +17 -3
  53. data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +20 -5
  54. data/app/assets/javascripts/Scene/EllipsoidSurfaceAppearance.js +1 -2
  55. data/app/assets/javascripts/Scene/FrameState.js +1 -3
  56. data/app/assets/javascripts/Scene/GoogleEarthImageryProvider.js +2 -5
  57. data/app/assets/javascripts/Scene/OpenStreetMapImageryProvider.js +1 -2
  58. data/app/assets/javascripts/Scene/OrthographicFrustum.js +1 -2
  59. data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +1 -2
  60. data/app/assets/javascripts/Scene/Polygon.js +1 -3
  61. data/app/assets/javascripts/Scene/Polyline.js +5 -2
  62. data/app/assets/javascripts/Scene/PolylineCollection.js +4 -6
  63. data/app/assets/javascripts/Scene/Primitive.js +19 -13
  64. data/app/assets/javascripts/Scene/PrimitivePipeline.js +1 -1
  65. data/app/assets/javascripts/Scene/Scene.js +7 -10
  66. data/app/assets/javascripts/Scene/SceneTransforms.js +1 -3
  67. data/app/assets/javascripts/Scene/SceneTransitioner.js +11 -11
  68. data/app/assets/javascripts/Scene/SingleTileImageryProvider.js +1 -2
  69. data/app/assets/javascripts/Scene/TexturePool.js +1 -1
  70. data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +1 -2
  71. data/app/assets/javascripts/Scene/VRTheWorldTerrainProvider.js +1 -2
  72. data/app/assets/javascripts/Scene/ViewportQuad.js +1 -3
  73. data/app/assets/javascripts/Scene/WebMapServiceImageryProvider.js +1 -2
  74. data/app/assets/javascripts/ThirdParty/knockout-3.0.0.js +6 -3
  75. data/app/assets/javascripts/Widgets/CesiumWidget/CesiumWidget.js +4 -3
  76. data/app/assets/javascripts/Widgets/SceneModePicker/SceneModePickerViewModel.js +1 -1
  77. data/app/assets/javascripts/Widgets/Viewer/Viewer.js +5 -5
  78. data/app/assets/javascripts/Widgets/Viewer/viewerDragDropMixin.js +13 -13
  79. data/app/assets/javascripts/Widgets/Viewer/viewerDynamicObjectMixin.js +6 -6
  80. data/app/assets/javascripts/Widgets/widgets.css +1 -1
  81. data/lib/cesium/version.rb +1 -1
  82. metadata +6 -3
  83. data/app/assets/javascripts/Core/OrientationInterpolator.js +0 -106
@@ -1,20 +1,12 @@
1
1
  /*global define*/
2
- define(['Core/Enumeration', 'Core/defined', 'Core/DeveloperError', 'Core/FeatureDetection', 'Core/Math'], function(
3
- Enumeration,
2
+ define(['Core/defined', 'Core/DeveloperError', 'Core/Math'], function(
4
3
  defined,
5
4
  DeveloperError,
6
- FeatureDetection,
7
5
  CesiumMath) {
8
6
  "use strict";
9
7
 
10
- // Bail out if the browser doesn't support typed arrays, to prevent the setup function
11
- // from failing, since we won't be able to create a WebGL context anyway.
12
- if (!FeatureDetection.supportsTypedArrays()) {
13
- return {};
14
- }
15
-
16
8
  /**
17
- * Enumerations for WebGL index datatypes. These corresponds to the
9
+ * Constants for WebGL index datatypes. These corresponds to the
18
10
  * <code>type</code> parameter of <a href="http://www.khronos.org/opengles/sdk/docs/man/xhtml/glDrawElements.xml">drawElements</a>.
19
11
  *
20
12
  * @alias IndexDatatype
@@ -22,40 +14,57 @@ define(['Core/Enumeration', 'Core/defined', 'Core/DeveloperError', 'Core/Feature
22
14
  */
23
15
  var IndexDatatype = {
24
16
  /**
25
- * 8-bit unsigned byte enumeration corresponding to <code>UNSIGNED_BYTE</code> and the type
17
+ * 0x1401. 8-bit unsigned byte corresponding to <code>UNSIGNED_BYTE</code> and the type
26
18
  * of an element in <code>Uint8Array</code>.
27
19
  *
28
- * @type {Enumeration}
20
+ * @type {Number}
29
21
  * @constant
30
- * @default 0x1401
31
22
  */
32
- UNSIGNED_BYTE : new Enumeration(0x1401, 'UNSIGNED_BYTE', {
33
- sizeInBytes : Uint8Array.BYTES_PER_ELEMENT
34
- }),
23
+ UNSIGNED_BYTE : 0x1401,
35
24
 
36
25
  /**
37
- * 16-bit unsigned short enumeration corresponding to <code>UNSIGNED_SHORT</code> and the type
26
+ * 0x1403. 16-bit unsigned short corresponding to <code>UNSIGNED_SHORT</code> and the type
38
27
  * of an element in <code>Uint16Array</code>.
39
28
  *
40
- * @type {Enumeration}
29
+ * @type {Number}
41
30
  * @constant
42
- * @default 0x1403
43
31
  */
44
- UNSIGNED_SHORT : new Enumeration(0x1403, 'UNSIGNED_SHORT', {
45
- sizeInBytes : Uint16Array.BYTES_PER_ELEMENT
46
- }),
32
+ UNSIGNED_SHORT : 0x1403,
47
33
 
48
34
  /**
49
- * 32-bit unsigned int enumeration corresponding to <code>UNSIGNED_INT</code> and the type
35
+ * 0x1405. 32-bit unsigned int corresponding to <code>UNSIGNED_INT</code> and the type
50
36
  * of an element in <code>Uint32Array</code>.
51
37
  *
52
- * @type {Enumeration}
38
+ * @type {Number}
53
39
  * @constant
54
- * @default 0x1405
55
40
  */
56
- UNSIGNED_INT : new Enumeration(0x1405, 'UNSIGNED_INT', {
57
- sizeInBytes : Uint32Array.BYTES_PER_ELEMENT
58
- })
41
+ UNSIGNED_INT : 0x1405
42
+ };
43
+
44
+ /**
45
+ * Returns the size, in bytes, of the corresponding datatype.
46
+ *
47
+ * @param {IndexDatatype} indexDatatype The index datatype to get the size of.
48
+ *
49
+ * @returns {Number} The size in bytes.
50
+ *
51
+ * @exception {DeveloperError} indexDatatype is required and must be a valid IndexDatatype constant.
52
+ *
53
+ * @example
54
+ * // Returns 2
55
+ * var size = IndexDatatype.getSizeInBytes(IndexDatatype.UNSIGNED_SHORT);
56
+ */
57
+ IndexDatatype.getSizeInBytes = function(indexDatatype) {
58
+ switch(indexDatatype) {
59
+ case IndexDatatype.UNSIGNED_BYTE:
60
+ return Uint8Array.BYTES_PER_ELEMENT;
61
+ case IndexDatatype.UNSIGNED_SHORT:
62
+ return Uint16Array.BYTES_PER_ELEMENT;
63
+ case IndexDatatype.UNSIGNED_INT:
64
+ return Uint32Array.BYTES_PER_ELEMENT;
65
+ }
66
+
67
+ throw new DeveloperError('indexDatatype is required and must be a valid IndexDatatype constant.');
59
68
  };
60
69
 
61
70
  /**
@@ -63,18 +72,18 @@ define(['Core/Enumeration', 'Core/defined', 'Core/DeveloperError', 'Core/Feature
63
72
  *
64
73
  * @param {IndexDatatype} indexDatatype The index datatype to validate.
65
74
  *
66
- * @returns {Boolean} <code>true</code> if the provided index datatype is a valid enumeration value; otherwise, <code>false</code>.
75
+ * @returns {Boolean} <code>true</code> if the provided index datatype is a valid value; otherwise, <code>false</code>.
67
76
  *
68
77
  * @example
69
78
  * if (!IndexDatatype.validate(indexDatatype)) {
70
- * throw new DeveloperError('indexDatatype must be a valid enumeration value.');
79
+ * throw new DeveloperError('indexDatatype must be a valid value.');
71
80
  * }
72
81
  */
73
82
  IndexDatatype.validate = function(indexDatatype) {
74
- return defined(indexDatatype) && defined(indexDatatype.value) &&
75
- (indexDatatype.value === IndexDatatype.UNSIGNED_BYTE.value ||
76
- indexDatatype.value === IndexDatatype.UNSIGNED_SHORT.value ||
77
- indexDatatype.value === IndexDatatype.UNSIGNED_INT.value);
83
+ return defined(indexDatatype) &&
84
+ (indexDatatype === IndexDatatype.UNSIGNED_BYTE ||
85
+ indexDatatype === IndexDatatype.UNSIGNED_SHORT ||
86
+ indexDatatype === IndexDatatype.UNSIGNED_INT);
78
87
  };
79
88
 
80
89
  /**
@@ -0,0 +1,118 @@
1
+ /*global define*/
2
+ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Spline', 'Core/Cartesian3'], function(
3
+ defaultValue,
4
+ defined,
5
+ DeveloperError,
6
+ Spline,
7
+ Cartesian3) {
8
+ "use strict";
9
+
10
+ /**
11
+ * A spline that uses piecewise linear interpolation to create a curve.
12
+ *
13
+ * @alias LinearSpline
14
+ * @constructor
15
+ *
16
+ * @param {Array} options.times The array of control point times.
17
+ * @param {Array} options.points The array of control points.
18
+ *
19
+ * @exception {DeveloperError} points is required.
20
+ * @exception {DeveloperError} points.length must be greater than or equal to 2.
21
+ * @exception {DeveloperError} times is required.
22
+ * @exception {DeveloperError} times.length must be equal to points.length.
23
+ *
24
+ * @example
25
+ * var spline = new LinearSpline({
26
+ * times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ],
27
+ * points : [
28
+ * new Cartesian3(1235398.0, -4810983.0, 4146266.0),
29
+ * new Cartesian3(1372574.0, -5345182.0, 4606657.0),
30
+ * new Cartesian3(-757983.0, -5542796.0, 4514323.0),
31
+ * new Cartesian3(-2821260.0, -5248423.0, 4021290.0),
32
+ * new Cartesian3(-2539788.0, -4724797.0, 3620093.0)
33
+ * ]
34
+ * });
35
+ */
36
+ var LinearSpline = function(options) {
37
+ options = defaultValue(options, defaultValue.EMPTY_OBJECT);
38
+
39
+ var points = options.points;
40
+ var times = options.times;
41
+
42
+ if (!defined(points)) {
43
+ throw new DeveloperError('points is required.');
44
+ }
45
+
46
+ if (points.length < 2) {
47
+ throw new DeveloperError('points.length must be greater than or equal to 2.');
48
+ }
49
+
50
+ if (!defined(times)) {
51
+ throw new DeveloperError('times is required.');
52
+ }
53
+
54
+ if (times.length !== points.length) {
55
+ throw new DeveloperError('times.length must be equal to points.length.');
56
+ }
57
+
58
+ /**
59
+ * An array of times for the control points.
60
+ * @type {Array}
61
+ * @readonly
62
+ */
63
+ this.times = times;
64
+
65
+ /**
66
+ * An array of {@link Cartesian3} control points.
67
+ * @type {Array}
68
+ * @readonly
69
+ */
70
+ this.points = points;
71
+
72
+ this._lastTimeIndex = 0;
73
+ };
74
+
75
+ /**
76
+ * Finds an index <code>i</code> in <code>times</code> such that the parameter
77
+ * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.
78
+ * @memberof QuaternionSpline
79
+ *
80
+ * @param {Number} time The time.
81
+ * @returns {Number} The index for the element at the start of the interval.
82
+ *
83
+ * @exception {DeveloperError} time is required.
84
+ * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>
85
+ * is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element
86
+ * in the array <code>times</code>.
87
+ */
88
+ LinearSpline.prototype.findTimeInterval = Spline.prototype.findTimeInterval;
89
+
90
+ /**
91
+ * Evaluates the curve at a given time.
92
+ * @memberof LinearSpline
93
+ *
94
+ * @param {Number} time The time at which to evaluate the curve.
95
+ * @param {Cartesian3} [result] The object onto which to store the result.
96
+ * @returns {Cartesian3} The modified result parameter or a new instance of the point on the curve at the given time.
97
+ *
98
+ * @exception {DeveloperError} time is required.
99
+ * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>
100
+ * is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element
101
+ * in the array <code>times</code>.
102
+ */
103
+ LinearSpline.prototype.evaluate = function(time, result) {
104
+ var points = this.points;
105
+ var times = this.times;
106
+
107
+ var i = this._lastTimeIndex = this.findTimeInterval(time, this._lastTimeIndex);
108
+ var u = (time - times[i]) / (times[i + 1] - times[i]);
109
+
110
+ if (!defined(result)) {
111
+ result = new Cartesian3();
112
+ }
113
+
114
+ return Cartesian3.lerp(points[i], points[i + 1], u, result);
115
+ };
116
+
117
+ return LinearSpline;
118
+ });
@@ -535,19 +535,50 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'ThirdParty/
535
535
  *
536
536
  * @returns {Boolean} <code>true</code> if the number if a power of two; otherwise, <code>false</code>.
537
537
  *
538
+ * @exception {DeveloperError} A number greater than or equal to 0 is required.
539
+ *
538
540
  * @example
539
541
  * var t = CesiumMath.isPowerOfTwo(16); // true
540
542
  * var f = CesiumMath.isPowerOfTwo(20); // false
543
+ */
544
+ CesiumMath.isPowerOfTwo = function(n) {
545
+ if (typeof n !== 'number' || n < 0) {
546
+ throw new DeveloperError('A number greater than or equal to 0 is required.');
547
+ }
548
+
549
+ return (n !== 0) && ((n & (n - 1)) === 0);
550
+ };
551
+
552
+ /**
553
+ * Computes the next power-of-two integer greater than or equal to the provided positive integer.
554
+ *
555
+ * @memberof CesiumMath
556
+ *
557
+ * @param {Number} n The positive integer to test.
558
+ *
559
+ * @returns {Number} The next power-of-two integer.
541
560
  *
542
561
  * @exception {DeveloperError} A number greater than or equal to 0 is required.
562
+ *
563
+ * @example
564
+ * var n = CesiumMath.nextPowerOfTwo(29); // 32
565
+ * var m = CesiumMath.nextPowerOfTwo(32); // 32
543
566
  */
544
- CesiumMath.isPowerOfTwo = function(n) {
567
+ CesiumMath.nextPowerOfTwo = function(n) {
545
568
  if (typeof n !== 'number' || n < 0) {
546
569
  throw new DeveloperError('A number greater than or equal to 0 is required.');
547
570
  }
548
571
 
549
- var m = defaultValue(n, 0);
550
- return (m !== 0) && ((m & (m - 1)) === 0);
572
+ // From http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
573
+ --n;
574
+ n |= n >> 1;
575
+ n |= n >> 2;
576
+ n |= n >> 4;
577
+ n |= n >> 8;
578
+ n |= n >> 16;
579
+ ++n;
580
+
581
+ return n;
551
582
  };
552
583
 
553
584
  /**
@@ -543,6 +543,32 @@ define(['Core/Cartesian2', 'Core/defaultValue', 'Core/defined', 'Core/DeveloperE
543
543
  return result;
544
544
  };
545
545
 
546
+ /**
547
+ * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements.
548
+ * @memberof Matrix2
549
+ *
550
+ * @param {Matrix2} matrix The matrix with signed elements.
551
+ * @param {Matrix2} [result] The object onto which to store the result.
552
+ * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided.
553
+ *
554
+ * @exception {DeveloperError} matrix is required.
555
+ */
556
+ Matrix2.abs = function(matrix, result) {
557
+ if (!defined(matrix)) {
558
+ throw new DeveloperError('matrix is required');
559
+ }
560
+ if (!defined(result)) {
561
+ return new Matrix2(Math.abs(matrix[0]), Math.abs(matrix[2]),
562
+ Math.abs(matrix[1]), Math.abs(matrix[3]));
563
+ }
564
+ result[0] = Math.abs(matrix[0]);
565
+ result[1] = Math.abs(matrix[1]);
566
+ result[2] = Math.abs(matrix[2]);
567
+ result[3] = Math.abs(matrix[3]);
568
+
569
+ return result;
570
+ };
571
+
546
572
  /**
547
573
  * Compares the provided matrices componentwise and returns
548
574
  * <code>true</code> if they are equal, <code>false</code> otherwise.
@@ -939,6 +939,104 @@ define(['Core/Cartesian3', 'Core/defaultValue', 'Core/defined', 'Core/DeveloperE
939
939
  return result;
940
940
  };
941
941
 
942
+ /**
943
+ * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements.
944
+ * @memberof Matrix3
945
+ *
946
+ * @param {Matrix3} matrix The matrix with signed elements.
947
+ * @param {Matrix3} [result] The object onto which to store the result.
948
+ * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided.
949
+ *
950
+ * @exception {DeveloperError} matrix is required.
951
+ */
952
+ Matrix3.abs = function(matrix, result) {
953
+ if (!defined(matrix)) {
954
+ throw new DeveloperError('matrix is required');
955
+ }
956
+ if (!defined(result)) {
957
+ return new Matrix3(Math.abs(matrix[0]), Math.abs(matrix[3]), Math.abs(matrix[6]),
958
+ Math.abs(matrix[1]), Math.abs(matrix[4]), Math.abs(matrix[7]),
959
+ Math.abs(matrix[2]), Math.abs(matrix[5]), Math.abs(matrix[8]));
960
+ }
961
+ result[0] = Math.abs(matrix[0]);
962
+ result[1] = Math.abs(matrix[1]);
963
+ result[2] = Math.abs(matrix[2]);
964
+ result[3] = Math.abs(matrix[3]);
965
+ result[4] = Math.abs(matrix[4]);
966
+ result[5] = Math.abs(matrix[5]);
967
+ result[6] = Math.abs(matrix[6]);
968
+ result[7] = Math.abs(matrix[7]);
969
+ result[8] = Math.abs(matrix[8]);
970
+
971
+ return result;
972
+ };
973
+
974
+ /**
975
+ * Computes the determinant of the provided matrix.
976
+ * @memberof Matrix3
977
+ *
978
+ * @param {Matrix3} matrix The matrix to use.
979
+ * @returns {Number} The value of the determinant of the matrix.
980
+ *
981
+ * @exception {DeveloperError} matrix is required.
982
+ */
983
+ Matrix3.determinant = function(matrix) {
984
+ if (!defined(matrix)) {
985
+ throw new DeveloperError('matrix is required');
986
+ }
987
+
988
+ var m11 = matrix[0];
989
+ var m21 = matrix[3];
990
+ var m31 = matrix[6];
991
+ var m12 = matrix[1];
992
+ var m22 = matrix[4];
993
+ var m32 = matrix[7];
994
+ var m13 = matrix[2];
995
+ var m23 = matrix[5];
996
+ var m33 = matrix[8];
997
+
998
+ return m11 * (m22 * m33 - m23 * m32) + m12 * (m23 * m31 - m21 * m33) + m13 * (m21 * m32 - m22 * m31);
999
+ };
1000
+
1001
+ /**
1002
+ * Computes the inverse of the provided matrix.
1003
+ * @memberof Matrix3
1004
+ *
1005
+ * @param {Matrix3} matrix The matrix to invert.
1006
+ * @param {Matrix3} [result] The object onto which to store the result.
1007
+ * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided.
1008
+ *
1009
+ * @exception {DeveloperError} matrix is required.
1010
+ * @exception {DeveloperError} matrix is not invertible.
1011
+ */
1012
+ Matrix3.inverse = function(matrix, result) {
1013
+ if (!defined(matrix)) {
1014
+ throw new DeveloperError('matrix is required');
1015
+ }
1016
+
1017
+ var m11 = matrix[0];
1018
+ var m21 = matrix[1];
1019
+ var m31 = matrix[2];
1020
+ var m12 = matrix[3];
1021
+ var m22 = matrix[4];
1022
+ var m32 = matrix[5];
1023
+ var m13 = matrix[6];
1024
+ var m23 = matrix[7];
1025
+ var m33 = matrix[8];
1026
+
1027
+ var determinant = Matrix3.determinant(matrix);
1028
+
1029
+ if (Math.abs(determinant) <= CesiumMath.EPSILON15) {
1030
+ throw new DeveloperError('matrix is not invertible');
1031
+ }
1032
+
1033
+ var m = new Matrix3(m22 * m33 - m23 * m32, m13 * m32 - m12 * m33, m12 * m23 - m13 * m22,
1034
+ m23 * m31 - m21 * m33, m11 * m33 - m13 * m31, m13 * m21 - m11 * m23,
1035
+ m21 * m32 - m22 * m31, m12 * m31 - m11 * m32, m11 * m22 - m12 * m21);
1036
+ var scale = 1.0 / determinant;
1037
+ return Matrix3.multiplyByScalar(m, scale, result);
1038
+ };
1039
+
942
1040
  /**
943
1041
  * Compares the provided matrices componentwise and returns
944
1042
  * <code>true</code> if they are equal, <code>false</code> otherwise.
@@ -1681,6 +1681,48 @@ define(['Core/Cartesian3', 'Core/Cartesian4', 'Core/defaultValue', 'Core/defined
1681
1681
  return result;
1682
1682
  };
1683
1683
 
1684
+ /**
1685
+ * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements.
1686
+ * @memberof Matrix4
1687
+ *
1688
+ * @param {Matrix4} matrix The matrix with signed elements.
1689
+ * @param {Matrix4} [result] The object onto which to store the result.
1690
+ * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
1691
+ *
1692
+ * @exception {DeveloperError} matrix is required.
1693
+ */
1694
+ Matrix4.abs = function(matrix, result) {
1695
+ if (!defined(matrix)) {
1696
+ throw new DeveloperError('matrix is required');
1697
+ }
1698
+ if (!defined(result)) {
1699
+ return new Matrix4(Math.abs(matrix[0]), Math.abs(matrix[4]), Math.abs(matrix[8]), Math.abs(matrix[12]),
1700
+ Math.abs(matrix[1]), Math.abs(matrix[5]), Math.abs(matrix[9]), Math.abs(matrix[13]),
1701
+ Math.abs(matrix[2]), Math.abs(matrix[6]), Math.abs(matrix[10]), Math.abs(matrix[14]),
1702
+ Math.abs(matrix[3]), Math.abs(matrix[7]), Math.abs(matrix[11]), Math.abs(matrix[15]));
1703
+
1704
+ }
1705
+
1706
+ result[0] = Math.abs(matrix[0]);
1707
+ result[1] = Math.abs(matrix[1]);
1708
+ result[2] = Math.abs(matrix[2]);
1709
+ result[3] = Math.abs(matrix[3]);
1710
+ result[4] = Math.abs(matrix[4]);
1711
+ result[5] = Math.abs(matrix[5]);
1712
+ result[6] = Math.abs(matrix[6]);
1713
+ result[7] = Math.abs(matrix[7]);
1714
+ result[8] = Math.abs(matrix[8]);
1715
+ result[9] = Math.abs(matrix[9]);
1716
+ result[10] = Math.abs(matrix[10]);
1717
+ result[11] = Math.abs(matrix[11]);
1718
+ result[12] = Math.abs(matrix[12]);
1719
+ result[13] = Math.abs(matrix[13]);
1720
+ result[14] = Math.abs(matrix[14]);
1721
+ result[15] = Math.abs(matrix[15]);
1722
+
1723
+ return result;
1724
+ };
1725
+
1684
1726
  /**
1685
1727
  * Compares the provided matrices componentwise and returns
1686
1728
  * <code>true</code> if they are equal, <code>false</code> otherwise.