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,5 +1,5 @@
1
1
  /*global define*/
2
- define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/HermiteSpline', 'Core/Math', 'Core/Matrix3', 'Core/OrientationInterpolator', 'Core/Quaternion', 'Scene/PerspectiveFrustum', 'Scene/PerspectiveOffCenterFrustum', 'Scene/SceneMode', 'ThirdParty/Tween'], function(
2
+ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/HermiteSpline', 'Core/Math', 'Core/Matrix3', 'Core/Quaternion', 'Core/QuaternionSpline', 'Scene/PerspectiveFrustum', 'Scene/PerspectiveOffCenterFrustum', 'Scene/SceneMode', 'ThirdParty/Tween'], function(
3
3
  Cartesian2,
4
4
  Cartesian3,
5
5
  clone,
@@ -9,8 +9,8 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
9
9
  HermiteSpline,
10
10
  CesiumMath,
11
11
  Matrix3,
12
- OrientationInterpolator,
13
12
  Quaternion,
13
+ QuaternionSpline,
14
14
  PerspectiveFrustum,
15
15
  PerspectiveOffCenterFrustum,
16
16
  SceneMode,
@@ -69,28 +69,6 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
69
69
  return Math.max(dx, dy);
70
70
  }
71
71
 
72
- function createSpline(points) {
73
- if (points.length > 2) {
74
- return new HermiteSpline(points);
75
- }
76
-
77
- // only two points, use linear interpolation
78
- var p = points[0];
79
- var q = points[1];
80
-
81
- return {
82
- getControlPoints : function() {
83
- return points;
84
- },
85
-
86
- evaluate : function(time, result) {
87
- time = CesiumMath.clamp(time, p.time, q.time);
88
- var t = (time - p.time) / (q.time - p.time);
89
- return Cartesian3.lerp(p.point, q.point, t, result);
90
- }
91
- };
92
- }
93
-
94
72
  function createPath3D(camera, ellipsoid, start, end, duration) {
95
73
  // get minimum altitude from which the whole ellipsoid is visible
96
74
  var radius = ellipsoid.getMaximumRadius();
@@ -120,28 +98,12 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
120
98
  var axis, angle, rotation, middle;
121
99
  if (Cartesian3.magnitude(end) > maxStartAlt && dot > 0.75) {
122
100
  middle = Cartesian3.add(Cartesian3.multiplyByScalar(Cartesian3.subtract(start, end), 0.5), end);
123
-
124
- points = [{
125
- point : start
126
- }, {
127
- point : middle
128
- }, {
129
- point : end
130
- }];
101
+ points = [ start, middle, end ];
131
102
  } else if (Cartesian3.magnitude(start) > maxStartAlt && dot > 0) {
132
103
  middle = Cartesian3.add(Cartesian3.multiplyByScalar(Cartesian3.subtract(start, aboveEnd), 0.5), aboveEnd);
133
-
134
- points = [{
135
- point : start
136
- }, {
137
- point : middle
138
- }, {
139
- point : end
140
- }];
104
+ points = [ start, middle, end ];
141
105
  } else {
142
- points = [{
143
- point : start
144
- }];
106
+ points = [ start ];
145
107
 
146
108
  angle = Math.acos(Cartesian3.dot(Cartesian3.normalize(afterStart), Cartesian3.normalize(aboveEnd)));
147
109
  axis = Cartesian3.cross(aboveEnd, afterStart);
@@ -153,50 +115,58 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
153
115
  var startCondition = angle - increment;
154
116
  for ( var i = startCondition; i > 0.0; i = i - increment) {
155
117
  rotation = Matrix3.fromQuaternion(Quaternion.fromAxisAngle(axis, i));
156
- points.push({
157
- point : Matrix3.multiplyByVector(rotation, aboveEnd)
158
- });
118
+ points.push(Matrix3.multiplyByVector(rotation, aboveEnd));
159
119
  }
160
120
 
161
- points.push({
162
- point : end
163
- });
121
+ points.push(end);
164
122
  }
165
123
 
124
+ var times = new Array(points.length);
166
125
  var scalar = duration / (points.length - 1);
167
126
  for ( var k = 0; k < points.length; ++k) {
168
- points[k].time = k * scalar;
127
+ times[k] = k * scalar;
169
128
  }
170
129
 
171
- return createSpline(points);
130
+ return new HermiteSpline({
131
+ points : points,
132
+ times : times
133
+ });
172
134
  }
135
+
173
136
  var direction3D = new Cartesian3();
174
137
  var right3D = new Cartesian3();
175
138
  var up3D = new Cartesian3();
176
139
  var quat3D = new Quaternion();
177
- function createOrientations3D(camera, points, endDirection, endUp) {
178
- points[0].orientation = createQuaternion(camera.direction, camera.up);
140
+
141
+ function createOrientations3D(camera, path, endDirection, endUp) {
142
+ var points = path.points;
143
+ var orientations = new Array(points.length);
144
+ orientations[0] = createQuaternion(camera.direction, camera.up);
145
+
179
146
  var point;
180
147
  var length = points.length - 1;
181
148
  for (var i = 1; i < length; ++i) {
182
149
  point = points[i];
183
- Cartesian3.normalize(Cartesian3.negate(point.point, direction3D), direction3D);
150
+ Cartesian3.normalize(Cartesian3.negate(point, direction3D), direction3D);
184
151
  Cartesian3.normalize(Cartesian3.cross(direction3D, Cartesian3.UNIT_Z, right3D), right3D);
185
152
  Cartesian3.cross(right3D, direction3D, up3D);
186
- point.orientation = createQuaternion(direction3D, up3D, quat3D);
153
+ orientations[i] = createQuaternion(direction3D, up3D, quat3D);
187
154
  }
188
155
 
189
156
  point = points[length];
190
157
  if (defined(endDirection) && defined(endUp)) {
191
- point.orientation = createQuaternion(endDirection, endUp);
158
+ orientations[length] = createQuaternion(endDirection, endUp);
192
159
  } else {
193
- Cartesian3.normalize(Cartesian3.negate(point.point, direction3D), direction3D);
160
+ Cartesian3.normalize(Cartesian3.negate(point, direction3D), direction3D);
194
161
  Cartesian3.normalize(Cartesian3.cross(direction3D, Cartesian3.UNIT_Z, right3D), right3D);
195
162
  Cartesian3.cross(right3D, direction3D, up3D);
196
- point.orientation = createQuaternion(direction3D, up3D, quat3D);
163
+ orientations[length] = createQuaternion(direction3D, up3D, quat3D);
197
164
  }
198
165
 
199
- return new OrientationInterpolator(points);
166
+ return new QuaternionSpline({
167
+ points : orientations,
168
+ times : path.times
169
+ });
200
170
  }
201
171
 
202
172
  function createUpdate3D(frameState, destination, duration, direction, up) {
@@ -204,14 +174,14 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
204
174
  var ellipsoid = frameState.scene2D.projection.getEllipsoid();
205
175
 
206
176
  var path = createPath3D(camera, ellipsoid, camera.position, destination, duration);
207
- var orientations = createOrientations3D(camera, path.getControlPoints(), direction, up);
177
+ var orientations = createOrientations3D(camera, path, direction, up);
208
178
 
209
179
  var update = function(value) {
210
180
  var time = value.time;
211
181
  var orientation = orientations.evaluate(time);
212
182
  Matrix3.fromQuaternion(orientation, rotMatrix);
213
183
 
214
- camera.position = path.evaluate(time, camera.position);
184
+ camera.position = path.evaluate(time);
215
185
  camera.right = Matrix3.getRow(rotMatrix, 0, camera.right);
216
186
  camera.up = Matrix3.getRow(rotMatrix, 1, camera.up);
217
187
  camera.direction = Cartesian3.negate(Matrix3.getRow(rotMatrix, 2, camera.direction), camera.direction);
@@ -244,28 +214,12 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
244
214
  var middle;
245
215
  if (end.z > maxStartAlt) {
246
216
  middle = Cartesian3.add(Cartesian3.multiplyByScalar(Cartesian3.subtract(start, end), 0.5), end);
247
-
248
- points = [{
249
- point : start
250
- }, {
251
- point : middle
252
- }, {
253
- point : end
254
- }];
217
+ points = [ start, middle, end ];
255
218
  } else if (start.z > maxStartAlt) {
256
219
  middle = Cartesian3.add(Cartesian3.multiplyByScalar(Cartesian3.subtract(start, aboveEnd), 0.5), aboveEnd);
257
-
258
- points = [{
259
- point : start
260
- }, {
261
- point : middle
262
- }, {
263
- point : end
264
- }];
220
+ points = [ start, middle, end ];
265
221
  } else {
266
- points = [{
267
- point : start
268
- }];
222
+ points = [ start ];
269
223
 
270
224
  var v = Cartesian3.subtract(afterStart, aboveEnd);
271
225
  var distance = Cartesian3.magnitude(v);
@@ -274,45 +228,49 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
274
228
  var increment = incrementPercentage * distance;
275
229
  var startCondition = distance - increment;
276
230
  for ( var i = startCondition; i > 0.0; i = i - increment) {
277
- points.push({
278
- point : Cartesian3.add(Cartesian3.multiplyByScalar(v, i), aboveEnd)
279
- });
231
+ points.push(Cartesian3.add(Cartesian3.multiplyByScalar(v, i), aboveEnd));
280
232
  }
281
233
 
282
- points.push({
283
- point : end
284
- });
234
+ points.push(end);
285
235
  }
286
236
 
237
+ var times = new Array(points.length);
287
238
  var scalar = duration / (points.length - 1);
288
239
  for ( var k = 0; k < points.length; ++k) {
289
- points[k].time = k * scalar;
240
+ times[k] = k * scalar;
290
241
  }
291
242
 
292
- return createSpline(points);
243
+ return new HermiteSpline({
244
+ points : points,
245
+ times : times
246
+ });
293
247
  }
294
248
 
295
249
  var direction2D = Cartesian3.negate(Cartesian3.UNIT_Z);
296
250
  var right2D = Cartesian3.normalize(Cartesian3.cross(direction2D, Cartesian3.UNIT_Y));
297
251
  var up2D = Cartesian3.cross(right2D, direction2D);
298
252
  var quat = createQuaternion(direction2D, up2D);
299
- function createOrientations2D(camera, points, endDirection, endUp) {
300
- points[0].orientation = createQuaternion(camera.direction, camera.up);
301
- var point;
253
+
254
+ function createOrientations2D(camera, path, endDirection, endUp) {
255
+ var points = path.points;
256
+ var orientations = new Array(points.length);
257
+ orientations[0] = createQuaternion(camera.direction, camera.up);
258
+
302
259
  var length = points.length - 1;
303
260
  for (var i = 1; i < length; ++i) {
304
- point = points[i];
305
- point.orientation = quat;
261
+ orientations[i] = quat;
306
262
  }
307
263
 
308
- point = points[length];
309
264
  if (defined(endDirection) && defined(endUp)) {
310
- point.orientation = createQuaternion(endDirection, endUp);
265
+ orientations[length] = createQuaternion(endDirection, endUp);
311
266
  } else {
312
- point.orientation = quat;
267
+ orientations[length] = quat;
313
268
  }
314
269
 
315
- return new OrientationInterpolator(points);
270
+ return new QuaternionSpline({
271
+ points : orientations,
272
+ times : path.times
273
+ });
316
274
  }
317
275
 
318
276
  function createUpdateCV(frameState, destination, duration, direction, up) {
@@ -320,7 +278,7 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
320
278
  var ellipsoid = frameState.scene2D.projection.getEllipsoid();
321
279
 
322
280
  var path = createPath2D(camera, ellipsoid, Cartesian3.clone(camera.position), destination, duration);
323
- var orientations = createOrientations2D(camera, path.getControlPoints(), direction, up);
281
+ var orientations = createOrientations2D(camera, path, direction, up);
324
282
 
325
283
  var update = function(value) {
326
284
  var time = value.time;
@@ -344,8 +302,7 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
344
302
  start.z = camera.frustum.right - camera.frustum.left;
345
303
 
346
304
  var path = createPath2D(camera, ellipsoid, start, destination, duration);
347
- var points = path.getControlPoints();
348
- var orientations = createOrientations2D(camera, points, Cartesian3.negate(Cartesian3.UNIT_Z), up);
305
+ var orientations = createOrientations2D(camera, path, Cartesian3.negate(Cartesian3.UNIT_Z), up);
349
306
 
350
307
  var height = camera.position.z;
351
308
 
@@ -354,7 +311,7 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
354
311
  var orientation = orientations.evaluate(time);
355
312
  Matrix3.fromQuaternion(orientation, rotMatrix);
356
313
 
357
- camera.position = path.evaluate(time, camera.position);
314
+ camera.position = path.evaluate(time);
358
315
  var zoom = camera.position.z;
359
316
  camera.position.z = height;
360
317
 
@@ -1,5 +1,5 @@
1
1
  /*global define*/
2
- define(['Core/buildModuleUrl', 'Core/combine', 'Core/loadImage', 'Core/defaultValue', 'Core/defined', 'Core/destroyObject', 'Core/BoundingRectangle', 'Core/BoundingSphere', 'Core/Cartesian2', 'Core/Cartesian3', 'Core/Cartographic', 'Core/ComponentDatatype', 'Core/Ellipsoid', 'Core/Extent', 'Core/FeatureDetection', 'Core/GeographicProjection', 'Core/Geometry', 'Core/GeometryAttribute', 'Core/Intersect', 'Core/Math', 'Core/Matrix4', 'Core/Occluder', 'Core/PrimitiveType', 'Core/Transforms', 'Renderer/BufferUsage', 'Renderer/ClearCommand', 'Renderer/CommandLists', 'Renderer/DepthFunction', 'Renderer/DrawCommand', 'Renderer/createShaderSource', 'Scene/CentralBodySurface', 'Scene/CentralBodySurfaceShaderSet', 'Scene/CreditDisplay', 'Scene/EllipsoidTerrainProvider', 'Scene/ImageryLayerCollection', 'Scene/Material', 'Scene/SceneMode', 'Scene/TerrainProvider', 'Scene/ViewportQuad', 'Shaders/CentralBodyFS', 'Shaders/CentralBodyFSDepth', 'Shaders/CentralBodyFSPole', 'Shaders/CentralBodyVS', 'Shaders/CentralBodyVSDepth', 'Shaders/CentralBodyVSPole', 'ThirdParty/when'], function(
2
+ define(['Core/buildModuleUrl', 'Core/combine', 'Core/loadImage', 'Core/defaultValue', 'Core/defined', 'Core/destroyObject', 'Core/BoundingRectangle', 'Core/BoundingSphere', 'Core/Cartesian2', 'Core/Cartesian3', 'Core/Cartographic', 'Core/ComponentDatatype', 'Core/Ellipsoid', 'Core/Extent', 'Core/FeatureDetection', 'Core/GeographicProjection', 'Core/Geometry', 'Core/GeometryAttribute', 'Core/Intersect', 'Core/Math', 'Core/Matrix4', 'Core/Occluder', 'Core/PrimitiveType', 'Core/Transforms', 'Renderer/BufferUsage', 'Renderer/ClearCommand', 'Renderer/CommandLists', 'Renderer/DepthFunction', 'Renderer/DrawCommand', 'Renderer/createShaderSource', 'Scene/CentralBodySurface', 'Scene/CentralBodySurfaceShaderSet', 'Scene/EllipsoidTerrainProvider', 'Scene/ImageryLayerCollection', 'Scene/SceneMode', 'Scene/TerrainProvider', 'Shaders/CentralBodyFS', 'Shaders/CentralBodyFSDepth', 'Shaders/CentralBodyFSPole', 'Shaders/CentralBodyVS', 'Shaders/CentralBodyVSDepth', 'Shaders/CentralBodyVSPole', 'ThirdParty/when'], function(
3
3
  buildModuleUrl,
4
4
  combine,
5
5
  loadImage,
@@ -32,13 +32,10 @@ define(['Core/buildModuleUrl', 'Core/combine', 'Core/loadImage', 'Core/defaultVa
32
32
  createShaderSource,
33
33
  CentralBodySurface,
34
34
  CentralBodySurfaceShaderSet,
35
- CreditDisplay,
36
35
  EllipsoidTerrainProvider,
37
36
  ImageryLayerCollection,
38
- Material,
39
37
  SceneMode,
40
38
  TerrainProvider,
41
- ViewportQuad,
42
39
  CentralBodyFS,
43
40
  CentralBodyFSDepth,
44
41
  CentralBodyFSPole,
@@ -1,5 +1,5 @@
1
1
  /*global define*/
2
- define(['Core/defaultValue', 'Core/defined', 'Core/destroyObject', 'Core/BoundingSphere', 'Core/Cartesian2', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/FeatureDetection', 'Core/DeveloperError', 'Core/Ellipsoid', 'Core/EllipsoidalOccluder', 'Core/Intersect', 'Core/Matrix4', 'Core/PrimitiveType', 'Core/Queue', 'Core/WebMercatorProjection', 'Renderer/DrawCommand', 'Scene/ImageryLayer', 'Scene/ImageryState', 'Scene/SceneMode', 'Scene/TerrainProvider', 'Scene/TileReplacementQueue', 'Scene/TileState', 'ThirdParty/when'], function(
2
+ define(['Core/defaultValue', 'Core/defined', 'Core/destroyObject', 'Core/BoundingSphere', 'Core/Cartesian2', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/FeatureDetection', 'Core/DeveloperError', 'Core/EllipsoidalOccluder', 'Core/Intersect', 'Core/Matrix4', 'Core/PrimitiveType', 'Core/Queue', 'Core/WebMercatorProjection', 'Renderer/DrawCommand', 'Scene/ImageryLayer', 'Scene/ImageryState', 'Scene/SceneMode', 'Scene/TerrainProvider', 'Scene/TileReplacementQueue', 'Scene/TileState', 'ThirdParty/when'], function(
3
3
  defaultValue,
4
4
  defined,
5
5
  destroyObject,
@@ -9,7 +9,6 @@ define(['Core/defaultValue', 'Core/defined', 'Core/destroyObject', 'Core/Boundin
9
9
  Cartesian4,
10
10
  FeatureDetection,
11
11
  DeveloperError,
12
- Ellipsoid,
13
12
  EllipsoidalOccluder,
14
13
  Intersect,
15
14
  Matrix4,
@@ -1,10 +1,9 @@
1
1
  /*global define*/
2
- define(['Core/defaultValue', 'Core/defined', 'Core/loadArrayBuffer', 'Core/throttleRequestByServer', 'Core/writeTextToCanvas', 'Core/DeveloperError', 'Core/Event', 'Scene/Credit', 'Scene/GeographicTilingScheme', 'Scene/HeightmapTerrainData', 'Scene/TerrainProvider', 'ThirdParty/when'], function(
2
+ define(['Core/defaultValue', 'Core/defined', 'Core/loadArrayBuffer', 'Core/throttleRequestByServer', 'Core/DeveloperError', 'Core/Event', 'Scene/Credit', 'Scene/GeographicTilingScheme', 'Scene/HeightmapTerrainData', 'Scene/TerrainProvider', 'ThirdParty/when'], function(
3
3
  defaultValue,
4
4
  defined,
5
5
  loadArrayBuffer,
6
6
  throttleRequestByServer,
7
- writeTextToCanvas,
8
7
  DeveloperError,
9
8
  Event,
10
9
  Credit,
@@ -49,8 +49,11 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
49
49
  this._pickCommand = new DrawCommand();
50
50
  this._commandLists = new CommandLists();
51
51
 
52
+ this._boundingSphere = new BoundingSphere();
53
+ this._boundingSphereWC = new BoundingSphere();
54
+
52
55
  this._frontFaceColorCommand.primitiveType = PrimitiveType.TRIANGLES;
53
- this._frontFaceColorCommand.boundingVolume = new BoundingSphere();
56
+ this._frontFaceColorCommand.boundingVolume = this._boundingSphereWC;
54
57
  this._frontFaceColorCommand.owner = this;
55
58
 
56
59
  this._backFaceColorCommand.primitiveType = this._frontFaceColorCommand.primitiveType;
@@ -117,6 +120,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
117
120
  * sensor.modelMatrix = Transforms.eastNorthUpToFixedFrame(center);
118
121
  */
119
122
  this.modelMatrix = Matrix4.clone(defaultValue(options.modelMatrix, Matrix4.IDENTITY));
123
+ this._modelMatrix = new Matrix4();
120
124
 
121
125
  /**
122
126
  * DOC_TBA
@@ -268,7 +272,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
268
272
  boundingVolumePositions.push(p);
269
273
  }
270
274
 
271
- BoundingSphere.fromPoints(boundingVolumePositions, customSensorVolume._frontFaceColorCommand.boundingVolume);
275
+ BoundingSphere.fromPoints(boundingVolumePositions, customSensorVolume._boundingSphere);
272
276
 
273
277
  return positions;
274
278
  }
@@ -423,7 +427,8 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
423
427
  }
424
428
 
425
429
  // Recreate vertex buffer when directions change
426
- if ((this._directionsDirty) || (this._bufferUsage !== this.bufferUsage)) {
430
+ var directionsChanged = this._directionsDirty || (this._bufferUsage !== this.bufferUsage);
431
+ if (directionsChanged) {
427
432
  this._directionsDirty = false;
428
433
  this._bufferUsage = this.bufferUsage;
429
434
  this._va = this._va && this._va.destroy();
@@ -443,6 +448,15 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
443
448
  var pass = frameState.passes;
444
449
  this._commandLists.removeAll();
445
450
 
451
+ var modelMatrixChanged = !Matrix4.equals(this.modelMatrix, this._modelMatrix);
452
+ if (modelMatrixChanged) {
453
+ Matrix4.clone(this.modelMatrix, this._modelMatrix);
454
+ }
455
+
456
+ if (directionsChanged || modelMatrixChanged) {
457
+ BoundingSphere.transform(this._boundingSphere, this.modelMatrix, this._boundingSphereWC);
458
+ }
459
+
446
460
  this._frontFaceColorCommand.modelMatrix = this.modelMatrix;
447
461
  this._backFaceColorCommand.modelMatrix = this._frontFaceColorCommand.modelMatrix;
448
462
  this._pickCommand.modelMatrix = this._frontFaceColorCommand.modelMatrix;
@@ -1,9 +1,8 @@
1
1
  /*global define*/
2
- define(['Core/defaultValue', 'Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/combine', 'Core/defined', 'Core/DeveloperError', 'Core/destroyObject', 'Core/Matrix4', 'Core/BoundingSphere', 'Core/PrimitiveType', 'Renderer/CullFace', 'Renderer/BlendingState', 'Renderer/BufferUsage', 'Renderer/CommandLists', 'Renderer/DrawCommand', 'Renderer/createShaderSource', 'Scene/Material', 'Scene/SceneMode', 'Shaders/EllipsoidVS', 'Shaders/EllipsoidFS'], function(
2
+ define(['Core/defaultValue', 'Core/BoxGeometry', 'Core/Cartesian3', 'Core/combine', 'Core/defined', 'Core/DeveloperError', 'Core/destroyObject', 'Core/Matrix4', 'Core/BoundingSphere', 'Core/PrimitiveType', 'Renderer/CullFace', 'Renderer/BlendingState', 'Renderer/BufferUsage', 'Renderer/CommandLists', 'Renderer/DrawCommand', 'Renderer/createShaderSource', 'Scene/Material', 'Scene/SceneMode', 'Shaders/EllipsoidVS', 'Shaders/EllipsoidFS'], function(
3
3
  defaultValue,
4
4
  BoxGeometry,
5
5
  Cartesian3,
6
- Cartesian4,
7
6
  combine,
8
7
  defined,
9
8
  DeveloperError,
@@ -78,6 +77,7 @@ define(['Core/defaultValue', 'Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartes
78
77
  * @see EllipsoidPrimitive#modelMatrix
79
78
  */
80
79
  this.center = Cartesian3.clone(defaultValue(options.center, Cartesian3.ZERO));
80
+ this._center = new Cartesian3();
81
81
 
82
82
  /**
83
83
  * The radius of the ellipsoid along the <code>x</code>, <code>y</code>, and <code>z</code> axes in the ellipsoid's model coordinates.
@@ -120,6 +120,7 @@ define(['Core/defaultValue', 'Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartes
120
120
  * @see czm_model
121
121
  */
122
122
  this.modelMatrix = Matrix4.clone(defaultValue(options.modelMatrix, Matrix4.IDENTITY));
123
+ this._modelMatrix = new Matrix4();
123
124
  this._computedModelMatrix = new Matrix4();
124
125
 
125
126
  /**
@@ -281,6 +282,8 @@ define(['Core/defaultValue', 'Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartes
281
282
  this._va = getVertexArray(context);
282
283
  }
283
284
 
285
+ var boundingSphereDirty = false;
286
+
284
287
  var radii = this.radii;
285
288
  if (!Cartesian3.equals(this._radii, radii)) {
286
289
  Cartesian3.clone(radii, this._radii);
@@ -290,11 +293,23 @@ define(['Core/defaultValue', 'Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartes
290
293
  r.y = 1.0 / (radii.y * radii.y);
291
294
  r.z = 1.0 / (radii.z * radii.z);
292
295
 
293
- this._boundingSphere.radius = Cartesian3.getMaximumComponent(radii);
296
+ boundingSphereDirty = true;
294
297
  }
295
298
 
296
- // Translate model coordinates used for rendering such that the origin is the center of the ellipsoid.
297
- Matrix4.multiplyByTranslation(this.modelMatrix, this.center, this._computedModelMatrix);
299
+ if (!Matrix4.equals(this.modelMatrix, this._modelMatrix) || !Cartesian3.equals(this.center, this._center)) {
300
+ Matrix4.clone(this.modelMatrix, this._modelMatrix);
301
+ Cartesian3.clone(this.center, this._center);
302
+
303
+ // Translate model coordinates used for rendering such that the origin is the center of the ellipsoid.
304
+ Matrix4.multiplyByTranslation(this.modelMatrix, this.center, this._computedModelMatrix);
305
+ boundingSphereDirty = true;
306
+ }
307
+
308
+ if (boundingSphereDirty) {
309
+ Cartesian3.clone(Cartesian3.ZERO, this._boundingSphere.center);
310
+ this._boundingSphere.radius = Cartesian3.getMaximumComponent(radii);
311
+ BoundingSphere.transform(this._boundingSphere, this._computedModelMatrix, this._boundingSphere);
312
+ }
298
313
 
299
314
  var ellipsoidCommandLists = this._commandLists;
300
315
  ellipsoidCommandLists.removeAll();