cesium 0.21 → 0.21.1
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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/Assets/Textures/moonSmall.jpg +0 -0
- data/app/assets/javascripts/Cesium.js +10 -1
- data/app/assets/javascripts/Core/Cartesian2.js +28 -0
- data/app/assets/javascripts/Core/Cartesian3.js +28 -0
- data/app/assets/javascripts/Core/Cartesian4.js +28 -0
- data/app/assets/javascripts/Core/CatmullRomSpline.js +3 -3
- data/app/assets/javascripts/Core/Clock.js +7 -7
- data/app/assets/javascripts/Core/Color.js +1 -1
- data/app/assets/javascripts/Core/ComponentDatatype.js +11 -7
- data/app/assets/javascripts/Core/CorridorGeometryLibrary.js +23 -29
- data/app/assets/javascripts/Core/Ellipsoid.js +6 -0
- data/app/assets/javascripts/Core/EllipsoidTangentPlane.js +5 -4
- data/app/assets/javascripts/Core/Event.js +2 -1
- data/app/assets/javascripts/Core/ExtentGeometry.js +1 -1
- data/app/assets/javascripts/Core/ExtentOutlineGeometry.js +1 -1
- data/app/assets/javascripts/Core/GeometryAttributes.js +1 -1
- data/app/assets/javascripts/Core/GeometryInstance.js +2 -2
- data/app/assets/javascripts/Core/GeometryPipeline.js +10 -7
- data/app/assets/javascripts/Core/HermiteSpline.js +1 -1
- data/app/assets/javascripts/Core/Iau2000Orientation.js +132 -0
- data/app/assets/javascripts/Core/IauOrientationAxes.js +98 -0
- data/app/assets/javascripts/Core/IauOrientationParameters.js +48 -0
- data/app/assets/javascripts/Core/IntersectionTests.js +5 -5
- data/app/assets/javascripts/Core/JulianDate.js +27 -5
- data/app/assets/javascripts/Core/Math.js +9 -0
- data/app/assets/javascripts/Core/Matrix2.js +1 -142
- data/app/assets/javascripts/Core/Matrix3.js +168 -153
- data/app/assets/javascripts/Core/Matrix4.js +0 -249
- data/app/assets/javascripts/Core/NearFarScalar.js +13 -0
- data/app/assets/javascripts/Core/PolygonGeometry.js +1 -1
- data/app/assets/javascripts/Core/PolygonOutlineGeometry.js +2 -2
- data/app/assets/javascripts/Core/PolygonPipeline.js +2 -2
- data/app/assets/javascripts/Core/PolylinePipeline.js +7 -3
- data/app/assets/javascripts/Core/PolylineVolumeGeometry.js +239 -0
- data/app/assets/javascripts/Core/PolylineVolumeGeometryLibrary.js +404 -0
- data/app/assets/javascripts/Core/PolylineVolumeOutlineGeometry.js +154 -0
- data/app/assets/javascripts/Core/Quaternion.js +37 -10
- data/app/assets/javascripts/Core/Shapes.js +26 -2
- data/app/assets/javascripts/Core/Simon1994PlanetaryPositions.js +3 -3
- data/app/assets/javascripts/Core/TimeInterval.js +28 -17
- data/app/assets/javascripts/Core/TimeIntervalCollection.js +30 -0
- data/app/assets/javascripts/Core/Transforms.js +5 -5
- data/app/assets/javascripts/Core/WallGeometryLibrary.js +2 -2
- data/app/assets/javascripts/Core/getFilenameFromUri.js +37 -0
- data/app/assets/javascripts/DynamicScene/ColorMaterialProperty.js +2 -2
- data/app/assets/javascripts/DynamicScene/CzmlDataSource.js +96 -18
- data/app/assets/javascripts/DynamicScene/DataSource.js +8 -0
- data/app/assets/javascripts/DynamicScene/DynamicBillboard.js +15 -3
- data/app/assets/javascripts/DynamicScene/DynamicBillboardVisualizer.js +6 -1
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizerUsingCustomSensor.js +1 -1
- data/app/assets/javascripts/DynamicScene/DynamicLabel.js +12 -1
- data/app/assets/javascripts/DynamicScene/DynamicLabelVisualizer.js +5 -0
- data/app/assets/javascripts/DynamicScene/DynamicObject.js +44 -17
- data/app/assets/javascripts/DynamicScene/DynamicObjectView.js +3 -3
- data/app/assets/javascripts/DynamicScene/DynamicPoint.js +12 -1
- data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +11 -2
- data/app/assets/javascripts/DynamicScene/DynamicPolyline.js +10 -30
- data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +5 -20
- data/app/assets/javascripts/DynamicScene/GeoJsonDataSource.js +26 -8
- data/app/assets/javascripts/DynamicScene/GridMaterialProperty.js +2 -2
- data/app/assets/javascripts/DynamicScene/ImageMaterialProperty.js +2 -2
- data/app/assets/javascripts/DynamicScene/PolylineOutlineMaterialProperty.js +66 -0
- data/app/assets/javascripts/DynamicScene/PositionProperty.js +3 -3
- data/app/assets/javascripts/DynamicScene/ReferenceProperty.js +1 -1
- data/app/assets/javascripts/DynamicScene/SampledProperty.js +14 -8
- data/app/assets/javascripts/Renderer/AutomaticUniforms.js +4 -3
- data/app/assets/javascripts/Renderer/Context.js +16 -2
- data/app/assets/javascripts/Renderer/UniformState.js +14 -14
- data/app/assets/javascripts/Scene/Billboard.js +102 -26
- data/app/assets/javascripts/Scene/BillboardCollection.js +69 -16
- data/app/assets/javascripts/Scene/Camera.js +7 -7
- data/app/assets/javascripts/Scene/CameraController.js +23 -12
- data/app/assets/javascripts/Scene/CameraFlightPath.js +11 -11
- data/app/assets/javascripts/Scene/CentralBodySurface.js +1 -1
- data/app/assets/javascripts/Scene/CustomSensorVolume.js +17 -2
- data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +79 -24
- data/app/assets/javascripts/Scene/ExtentPrimitive.js +17 -1
- data/app/assets/javascripts/Scene/Label.js +94 -18
- data/app/assets/javascripts/Scene/LabelCollection.js +6 -2
- data/app/assets/javascripts/Scene/Moon.js +150 -0
- data/app/assets/javascripts/Scene/Polygon.js +18 -1
- data/app/assets/javascripts/Scene/Polyline.js +32 -13
- data/app/assets/javascripts/Scene/PolylineCollection.js +7 -6
- data/app/assets/javascripts/Scene/Primitive.js +2 -2
- data/app/assets/javascripts/Scene/RectangularPyramidSensorVolume.js +12 -0
- data/app/assets/javascripts/Scene/Scene.js +122 -14
- data/app/assets/javascripts/Scene/SceneTransforms.js +2 -2
- data/app/assets/javascripts/Scene/SceneTransitioner.js +4 -4
- data/app/assets/javascripts/Scene/ScreenSpaceCameraController.js +1 -1
- data/app/assets/javascripts/Scene/SkyBox.js +53 -48
- data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +2 -2
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.glsl +36 -14
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +27 -9
- data/app/assets/javascripts/Shaders/Builtin/Functions/phong.glsl +13 -0
- data/app/assets/javascripts/Shaders/Builtin/Functions/phong.js +10 -0
- data/app/assets/javascripts/Shaders/EllipsoidFS.glsl +24 -0
- data/app/assets/javascripts/Shaders/EllipsoidFS.js +21 -1
- data/app/assets/javascripts/Widgets/CesiumWidget/CesiumWidget.js +30 -9
- data/app/assets/javascripts/Widgets/HomeButton/HomeButtonViewModel.js +6 -5
- data/app/assets/javascripts/Widgets/Viewer/Viewer.js +13 -0
- data/app/assets/javascripts/Widgets/Viewer/viewerDynamicObjectMixin.js +46 -4
- data/app/assets/javascripts/Workers/cesiumWorkerBootstrapper.js +16 -8
- data/app/assets/javascripts/Workers/createPolylineVolumeGeometry.js +23 -0
- data/app/assets/javascripts/Workers/createPolylineVolumeOutlineGeometry.js +23 -0
- data/lib/cesium/version.rb +1 -1
- metadata +15 -5
- data/test/dummy/tmp/pids/server.pid +0 -1
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/*global define*/
|
|
2
|
-
define(['Core/createGuid', 'Core/Cartographic', 'Core/Color', 'Core/defined', 'Core/DeveloperError', 'Core/RuntimeError', 'Core/Ellipsoid', 'Core/Event', 'Core/loadJson', 'DynamicScene/ConstantProperty', 'DynamicScene/DynamicObject', 'DynamicScene/DynamicPoint', 'DynamicScene/DynamicPolyline', 'DynamicScene/DynamicPolygon', 'DynamicScene/ColorMaterialProperty', 'DynamicScene/DynamicObjectCollection', 'ThirdParty/when', 'ThirdParty/topojson'], function(
|
|
2
|
+
define(['Core/createGuid', 'Core/Cartographic', 'Core/Color', 'Core/defined', 'Core/DeveloperError', 'Core/getFilenameFromUri', 'Core/RuntimeError', 'Core/Ellipsoid', 'Core/Event', 'Core/loadJson', 'DynamicScene/ConstantProperty', 'DynamicScene/DynamicObject', 'DynamicScene/DynamicPoint', 'DynamicScene/DynamicPolyline', 'DynamicScene/DynamicPolygon', 'DynamicScene/ColorMaterialProperty', 'DynamicScene/DynamicObjectCollection', 'ThirdParty/when', 'ThirdParty/topojson'], function(
|
|
3
3
|
createGuid,
|
|
4
4
|
Cartographic,
|
|
5
5
|
Color,
|
|
6
6
|
defined,
|
|
7
7
|
DeveloperError,
|
|
8
|
+
getFilenameFromUri,
|
|
8
9
|
RuntimeError,
|
|
9
10
|
Ellipsoid,
|
|
10
11
|
Event,
|
|
@@ -203,26 +204,26 @@ define(['Core/createGuid', 'Core/Cartographic', 'Core/Color', 'Core/defined', 'C
|
|
|
203
204
|
//default line
|
|
204
205
|
var defaultLine = new DynamicObject('GeoJsonDataSource.defaultLine');
|
|
205
206
|
var polyline = new DynamicPolyline();
|
|
206
|
-
|
|
207
|
+
var material = new ColorMaterialProperty();
|
|
208
|
+
material.color = new ConstantProperty(Color.YELLOW);
|
|
209
|
+
polyline.material = material;
|
|
207
210
|
polyline.width = new ConstantProperty(2);
|
|
208
|
-
polyline.outlineColor = new ConstantProperty(Color.BLACK);
|
|
209
|
-
polyline.outlineWidth = new ConstantProperty(1);
|
|
210
211
|
defaultLine.polyline = polyline;
|
|
211
212
|
|
|
212
213
|
//default polygon
|
|
213
214
|
var defaultPolygon = new DynamicObject('GeoJsonDataSource.defaultPolygon');
|
|
214
215
|
|
|
215
216
|
polyline = new DynamicPolyline();
|
|
216
|
-
|
|
217
|
+
material = new ColorMaterialProperty();
|
|
218
|
+
material.color = new ConstantProperty(Color.YELLOW);
|
|
219
|
+
polyline.material = material;
|
|
217
220
|
polyline.width = new ConstantProperty(1);
|
|
218
|
-
polyline.outlineColor = new ConstantProperty(Color.BLACK);
|
|
219
|
-
polyline.outlineWidth = new ConstantProperty(0);
|
|
220
221
|
defaultPolygon.polyline = polyline;
|
|
221
222
|
|
|
222
223
|
var polygon = new DynamicPolygon();
|
|
223
224
|
defaultPolygon.polygon = polygon;
|
|
224
225
|
|
|
225
|
-
|
|
226
|
+
material = new ColorMaterialProperty();
|
|
226
227
|
material.color = new ConstantProperty(new Color(1.0, 1.0, 0.0, 0.1));
|
|
227
228
|
polygon.material = material;
|
|
228
229
|
|
|
@@ -247,6 +248,18 @@ define(['Core/createGuid', 'Core/Cartographic', 'Core/Color', 'Core/defined', 'C
|
|
|
247
248
|
* @type {DynamicObject}
|
|
248
249
|
*/
|
|
249
250
|
this.defaultPolygon = defaultPolygon;
|
|
251
|
+
|
|
252
|
+
this._name = undefined;
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Gets the name of this data source.
|
|
257
|
+
* @memberof GeoJsonDataSource
|
|
258
|
+
*
|
|
259
|
+
* @returns {String} The name.
|
|
260
|
+
*/
|
|
261
|
+
GeoJsonDataSource.prototype.getName = function() {
|
|
262
|
+
return this._name;
|
|
250
263
|
};
|
|
251
264
|
|
|
252
265
|
/**
|
|
@@ -343,6 +356,11 @@ define(['Core/createGuid', 'Core/Cartographic', 'Core/Color', 'Core/defined', 'C
|
|
|
343
356
|
throw new DeveloperError('geoJson is required.');
|
|
344
357
|
}
|
|
345
358
|
|
|
359
|
+
this._name = undefined;
|
|
360
|
+
if (defined(source)) {
|
|
361
|
+
this._name = getFilenameFromUri(source);
|
|
362
|
+
}
|
|
363
|
+
|
|
346
364
|
var typeHandler = geoJsonObjectTypes[geoJson.type];
|
|
347
365
|
if (!defined(typeHandler)) {
|
|
348
366
|
throw new DeveloperError('Unsupported GeoJSON object type: ' + geoJson.type);
|
|
@@ -43,7 +43,7 @@ define(['Core/Cartesian2', 'Core/Color', 'Core/defined', 'DynamicScene/ConstantP
|
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
45
|
* Gets the {@link Material} type at the provided time.
|
|
46
|
-
* @memberof
|
|
46
|
+
* @memberof GridMaterialProperty
|
|
47
47
|
*
|
|
48
48
|
* @param {JulianDate} time The time for which to retrieve the type.
|
|
49
49
|
* @type {String} The type of material.
|
|
@@ -54,7 +54,7 @@ define(['Core/Cartesian2', 'Core/Color', 'Core/defined', 'DynamicScene/ConstantP
|
|
|
54
54
|
|
|
55
55
|
/**
|
|
56
56
|
* Gets the value of the property at the provided time.
|
|
57
|
-
* @memberof
|
|
57
|
+
* @memberof GridMaterialProperty
|
|
58
58
|
*
|
|
59
59
|
* @param {JulianDate} time The time for which to retrieve the value.
|
|
60
60
|
* @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.
|
|
@@ -26,7 +26,7 @@ define(['Core/Cartesian2', 'Core/defined', 'DynamicScene/ConstantProperty'], fun
|
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* Gets the {@link Material} type at the provided time.
|
|
29
|
-
* @memberof
|
|
29
|
+
* @memberof ImageMaterialProperty
|
|
30
30
|
*
|
|
31
31
|
* @param {JulianDate} time The time for which to retrieve the type.
|
|
32
32
|
* @type {String} The type of material.
|
|
@@ -37,7 +37,7 @@ define(['Core/Cartesian2', 'Core/defined', 'DynamicScene/ConstantProperty'], fun
|
|
|
37
37
|
|
|
38
38
|
/**
|
|
39
39
|
* Gets the value of the property at the provided time.
|
|
40
|
-
* @memberof
|
|
40
|
+
* @memberof ImageMaterialProperty
|
|
41
41
|
*
|
|
42
42
|
* @param {JulianDate} time The time for which to retrieve the value.
|
|
43
43
|
* @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/*global define*/
|
|
2
|
+
define(['Core/Color', 'Core/defined', 'DynamicScene/ConstantProperty'], function(
|
|
3
|
+
Color,
|
|
4
|
+
defined,
|
|
5
|
+
ConstantProperty) {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A {@link MaterialProperty} that maps to polyline outline {@link Material} uniforms.
|
|
10
|
+
* @alias PolylineOutlineMaterialProperty
|
|
11
|
+
* @constructor
|
|
12
|
+
*/
|
|
13
|
+
var PolylineOutlineMaterialProperty = function() {
|
|
14
|
+
/**
|
|
15
|
+
* A {@link Color} {@link Property} which determines the polyline's color.
|
|
16
|
+
* @type {Property}
|
|
17
|
+
* @default new ConstantProperty(Color.WHITE)
|
|
18
|
+
*/
|
|
19
|
+
this.color = new ConstantProperty(Color.WHITE);
|
|
20
|
+
/**
|
|
21
|
+
* A {@link Color} {@link Property} which determines the polyline's outline color.
|
|
22
|
+
* @type {Property}
|
|
23
|
+
* @default new ConstantProperty(Color.BLACK)
|
|
24
|
+
*/
|
|
25
|
+
this.outlineColor = new ConstantProperty(Color.BLACK);
|
|
26
|
+
/**
|
|
27
|
+
* A Number {@link Property} which determines the polyline's outline width.
|
|
28
|
+
* @type {Property}
|
|
29
|
+
* @default new ConstantProperty(1)
|
|
30
|
+
*/
|
|
31
|
+
this.outlineWidth = new ConstantProperty(1);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Gets the {@link Material} type at the provided time.
|
|
36
|
+
* @memberof PolylineOutlineMaterialProperty
|
|
37
|
+
*
|
|
38
|
+
* @param {JulianDate} time The time for which to retrieve the type.
|
|
39
|
+
* @type {String} The type of material.
|
|
40
|
+
*/
|
|
41
|
+
PolylineOutlineMaterialProperty.prototype.getType = function(time) {
|
|
42
|
+
return 'PolylineOutline';
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Gets the value of the property at the provided time.
|
|
47
|
+
* @memberof PolylineOutlineMaterialProperty
|
|
48
|
+
*
|
|
49
|
+
* @param {JulianDate} time The time for which to retrieve the value.
|
|
50
|
+
* @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.
|
|
51
|
+
* @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.
|
|
52
|
+
*
|
|
53
|
+
* @exception {DeveloperError} time is required.
|
|
54
|
+
*/
|
|
55
|
+
PolylineOutlineMaterialProperty.prototype.getValue = function(time, result) {
|
|
56
|
+
if (!defined(result)) {
|
|
57
|
+
result = {};
|
|
58
|
+
}
|
|
59
|
+
result.color = defined(this.color) ? this.color.getValue(time, result.color) : undefined;
|
|
60
|
+
result.outlineColor = defined(this.outlineColor) ? this.outlineColor.getValue(time, result.outlineColor) : undefined;
|
|
61
|
+
result.outlineWidth = defined(this.outlineWidth) ? this.outlineWidth.getValue(time) : undefined;
|
|
62
|
+
return result;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
return PolylineOutlineMaterialProperty;
|
|
66
|
+
});
|
|
@@ -83,12 +83,12 @@ define(['Core/Cartesian3', 'Core/defined', 'Core/defineProperties', 'Core/Develo
|
|
|
83
83
|
icrfToFixed = Transforms.computeTemeToPseudoFixedMatrix(time, scratchMatrix3);
|
|
84
84
|
}
|
|
85
85
|
if (inputFrame === ReferenceFrame.INERTIAL) {
|
|
86
|
-
return
|
|
86
|
+
return Matrix3.multiplyByVector(icrfToFixed, value, result);
|
|
87
87
|
}
|
|
88
88
|
if (inputFrame === ReferenceFrame.FIXED) {
|
|
89
|
-
return
|
|
89
|
+
return Matrix3.multiplyByVector(Matrix3.transpose(icrfToFixed, scratchMatrix3), value, result);
|
|
90
90
|
}
|
|
91
91
|
};
|
|
92
92
|
|
|
93
93
|
return PositionProperty;
|
|
94
|
-
});
|
|
94
|
+
});
|
|
@@ -52,28 +52,29 @@ define(['Core/binarySearch', 'Core/defaultValue', 'Core/defined', 'Core/definePr
|
|
|
52
52
|
return epoch.addSeconds(date);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
var timesSpliceArgs = [];
|
|
56
|
+
var valuesSpliceArgs = [];
|
|
57
|
+
|
|
55
58
|
var mergeNewSamples = function(epoch, times, values, newData, packedLength) {
|
|
56
59
|
var newDataIndex = 0;
|
|
57
60
|
var i;
|
|
58
61
|
var prevItem;
|
|
59
62
|
var timesInsertionPoint;
|
|
60
63
|
var valuesInsertionPoint;
|
|
61
|
-
var timesSpliceArgs;
|
|
62
|
-
var valuesSpliceArgs;
|
|
63
64
|
var currentTime;
|
|
64
65
|
var nextTime;
|
|
65
66
|
|
|
66
67
|
while (newDataIndex < newData.length) {
|
|
67
68
|
currentTime = convertDate(newData[newDataIndex], epoch);
|
|
68
69
|
timesInsertionPoint = binarySearch(times, currentTime, JulianDate.compare);
|
|
70
|
+
var timesSpliceArgsCount = 0;
|
|
71
|
+
var valuesSpliceArgsCount = 0;
|
|
69
72
|
|
|
70
73
|
if (timesInsertionPoint < 0) {
|
|
71
74
|
//Doesn't exist, insert as many additional values as we can.
|
|
72
75
|
timesInsertionPoint = ~timesInsertionPoint;
|
|
73
|
-
timesSpliceArgs = [];
|
|
74
76
|
|
|
75
77
|
valuesInsertionPoint = timesInsertionPoint * packedLength;
|
|
76
|
-
valuesSpliceArgs = [];
|
|
77
78
|
prevItem = undefined;
|
|
78
79
|
nextTime = times[timesInsertionPoint];
|
|
79
80
|
while (newDataIndex < newData.length) {
|
|
@@ -81,17 +82,22 @@ define(['Core/binarySearch', 'Core/defaultValue', 'Core/defined', 'Core/definePr
|
|
|
81
82
|
if ((defined(prevItem) && JulianDate.compare(prevItem, currentTime) >= 0) || (defined(nextTime) && JulianDate.compare(currentTime, nextTime) >= 0)) {
|
|
82
83
|
break;
|
|
83
84
|
}
|
|
84
|
-
timesSpliceArgs
|
|
85
|
+
timesSpliceArgs[timesSpliceArgsCount++] = currentTime;
|
|
85
86
|
newDataIndex = newDataIndex + 1;
|
|
86
87
|
for (i = 0; i < packedLength; i++) {
|
|
87
|
-
valuesSpliceArgs
|
|
88
|
+
valuesSpliceArgs[valuesSpliceArgsCount++] = newData[newDataIndex];
|
|
88
89
|
newDataIndex = newDataIndex + 1;
|
|
89
90
|
}
|
|
90
91
|
prevItem = currentTime;
|
|
91
92
|
}
|
|
92
93
|
|
|
93
|
-
|
|
94
|
-
|
|
94
|
+
if (timesSpliceArgsCount > 0) {
|
|
95
|
+
valuesSpliceArgs.length = valuesSpliceArgsCount;
|
|
96
|
+
arrayInsert(values, valuesInsertionPoint, valuesSpliceArgs);
|
|
97
|
+
|
|
98
|
+
timesSpliceArgs.length = timesSpliceArgsCount;
|
|
99
|
+
arrayInsert(times, timesInsertionPoint, timesSpliceArgs);
|
|
100
|
+
}
|
|
95
101
|
} else {
|
|
96
102
|
//Found an exact match
|
|
97
103
|
for (i = 0; i < packedLength; i++) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/*global define*/
|
|
2
|
-
define(['Core/Cartesian3', 'Renderer/UniformDatatype'],function(
|
|
2
|
+
define(['Core/Cartesian3', 'Core/Matrix4', 'Renderer/UniformDatatype'],function(
|
|
3
3
|
Cartesian3,
|
|
4
|
+
Matrix4,
|
|
4
5
|
UniformDatatype) {
|
|
5
6
|
"use strict";
|
|
6
7
|
|
|
@@ -1398,7 +1399,7 @@ define(['Core/Cartesian3', 'Renderer/UniformDatatype'],function(
|
|
|
1398
1399
|
},
|
|
1399
1400
|
|
|
1400
1401
|
getValue : function(uniformState) {
|
|
1401
|
-
return uniformState.getInverseView()
|
|
1402
|
+
return Matrix4.getTranslation(uniformState.getInverseView(), viewerPositionWCScratch);
|
|
1402
1403
|
}
|
|
1403
1404
|
},
|
|
1404
1405
|
|
|
@@ -1522,4 +1523,4 @@ define(['Core/Cartesian3', 'Renderer/UniformDatatype'],function(
|
|
|
1522
1523
|
}
|
|
1523
1524
|
}
|
|
1524
1525
|
};
|
|
1525
|
-
});
|
|
1526
|
+
});
|
|
@@ -83,6 +83,20 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
function makeGetterSetter(gl, propertyName, logFunc) {
|
|
87
|
+
return {
|
|
88
|
+
get : function() {
|
|
89
|
+
var value = gl[propertyName];
|
|
90
|
+
logFunc(gl, 'get: ' + propertyName, value);
|
|
91
|
+
return gl[propertyName];
|
|
92
|
+
},
|
|
93
|
+
set : function(value) {
|
|
94
|
+
gl[propertyName] = value;
|
|
95
|
+
logFunc(gl, 'set: ' + propertyName, value);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
86
100
|
function wrapGL(gl, logFunc) {
|
|
87
101
|
if (!logFunc) {
|
|
88
102
|
return gl;
|
|
@@ -110,7 +124,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
|
|
|
110
124
|
if (typeof property === 'function') {
|
|
111
125
|
glWrapper[propertyName] = wrapFunction(property);
|
|
112
126
|
} else {
|
|
113
|
-
glWrapper
|
|
127
|
+
Object.defineProperty(glWrapper, propertyName, makeGetterSetter(gl, propertyName, logFunc));
|
|
114
128
|
}
|
|
115
129
|
}
|
|
116
130
|
|
|
@@ -2495,7 +2509,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
|
|
|
2495
2509
|
*
|
|
2496
2510
|
* @memberof Context
|
|
2497
2511
|
*
|
|
2498
|
-
* @see
|
|
2512
|
+
* @see Scene#pick
|
|
2499
2513
|
*/
|
|
2500
2514
|
Context.prototype.createPickFramebuffer = function() {
|
|
2501
2515
|
return new PickFramebuffer(this);
|
|
@@ -25,20 +25,20 @@ define(['Core/Matrix3', 'Core/Matrix4', 'Core/Cartesian2', 'Core/Cartesian3', 'C
|
|
|
25
25
|
var UniformState = function() {
|
|
26
26
|
this._viewport = new BoundingRectangle();
|
|
27
27
|
this._viewportDirty = false;
|
|
28
|
-
this._viewportOrthographicMatrix = Matrix4.
|
|
29
|
-
this._viewportTransformation = Matrix4.
|
|
30
|
-
|
|
31
|
-
this._model = Matrix4.
|
|
32
|
-
this._view = Matrix4.
|
|
33
|
-
this._inverseView = Matrix4.
|
|
34
|
-
this._projection = Matrix4.
|
|
35
|
-
this._infiniteProjection = Matrix4.
|
|
28
|
+
this._viewportOrthographicMatrix = Matrix4.clone(Matrix4.IDENTITY);
|
|
29
|
+
this._viewportTransformation = Matrix4.clone(Matrix4.IDENTITY);
|
|
30
|
+
|
|
31
|
+
this._model = Matrix4.clone(Matrix4.IDENTITY);
|
|
32
|
+
this._view = Matrix4.clone(Matrix4.IDENTITY);
|
|
33
|
+
this._inverseView = Matrix4.clone(Matrix4.IDENTITY);
|
|
34
|
+
this._projection = Matrix4.clone(Matrix4.IDENTITY);
|
|
35
|
+
this._infiniteProjection = Matrix4.clone(Matrix4.IDENTITY);
|
|
36
36
|
this._entireFrustum = new Cartesian2();
|
|
37
37
|
this._currentFrustum = new Cartesian2();
|
|
38
38
|
this._pixelSize = 0.0;
|
|
39
39
|
|
|
40
40
|
this._frameState = undefined;
|
|
41
|
-
this._temeToPseudoFixed = Matrix3.
|
|
41
|
+
this._temeToPseudoFixed = Matrix3.clone(Matrix4.IDENTITY);
|
|
42
42
|
|
|
43
43
|
// Derived members
|
|
44
44
|
this._view3DDirty = true;
|
|
@@ -378,7 +378,7 @@ define(['Core/Matrix3', 'Core/Matrix4', 'Core/Cartesian2', 'Core/Cartesian3', 'C
|
|
|
378
378
|
if (this._inverseModelDirty) {
|
|
379
379
|
this._inverseModelDirty = false;
|
|
380
380
|
|
|
381
|
-
|
|
381
|
+
Matrix4.inverse(this._model, this._inverseModel);
|
|
382
382
|
}
|
|
383
383
|
|
|
384
384
|
return this._inverseModel;
|
|
@@ -1015,7 +1015,7 @@ define(['Core/Matrix3', 'Core/Matrix4', 'Core/Cartesian2', 'Core/Cartesian3', 'C
|
|
|
1015
1015
|
if (uniformState._encodedCameraPositionMCDirty) {
|
|
1016
1016
|
uniformState._encodedCameraPositionMCDirty = false;
|
|
1017
1017
|
|
|
1018
|
-
uniformState.getInverseModel()
|
|
1018
|
+
Matrix4.multiplyByPoint(uniformState.getInverseModel(), uniformState._cameraPosition, cameraPositionMC);
|
|
1019
1019
|
EncodedCartesian3.fromCartesian(cameraPositionMC, uniformState._encodedCameraPositionMC);
|
|
1020
1020
|
}
|
|
1021
1021
|
}
|
|
@@ -1131,9 +1131,9 @@ define(['Core/Matrix3', 'Core/Matrix4', 'Core/Cartesian2', 'Core/Cartesian3', 'C
|
|
|
1131
1131
|
var enuToFixed = Transforms.eastNorthUpToFixedFrame(position3D, ellipsoid, view2Dto3DMatrix4Scratch);
|
|
1132
1132
|
|
|
1133
1133
|
// Transform each camera direction to the fixed axes.
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1134
|
+
Matrix4.multiplyByVector(enuToFixed, r, r);
|
|
1135
|
+
Matrix4.multiplyByVector(enuToFixed, u, u);
|
|
1136
|
+
Matrix4.multiplyByVector(enuToFixed, d, d);
|
|
1137
1137
|
|
|
1138
1138
|
// Compute the view matrix based on the new fixed-frame camera position and directions.
|
|
1139
1139
|
if (!defined(result)) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*global define*/
|
|
2
|
-
define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/Cartesian2', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/NearFarScalar', 'Scene/HorizontalOrigin', 'Scene/VerticalOrigin', 'Scene/SceneMode', 'Scene/SceneTransforms'], function(
|
|
2
|
+
define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/Cartesian2', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/NearFarScalar', 'Core/Matrix4', 'Scene/HorizontalOrigin', 'Scene/VerticalOrigin', 'Scene/SceneMode', 'Scene/SceneTransforms'], function(
|
|
3
3
|
defaultValue,
|
|
4
4
|
defined,
|
|
5
5
|
DeveloperError,
|
|
@@ -8,6 +8,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
|
|
|
8
8
|
Cartesian3,
|
|
9
9
|
Cartesian4,
|
|
10
10
|
NearFarScalar,
|
|
11
|
+
Matrix4,
|
|
11
12
|
HorizontalOrigin,
|
|
12
13
|
VerticalOrigin,
|
|
13
14
|
SceneMode,
|
|
@@ -38,6 +39,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
|
|
|
38
39
|
* and add new billboards instead of modifying each one.
|
|
39
40
|
*
|
|
40
41
|
* @exception {DeveloperError} scaleByDistance.far must be greater than scaleByDistance.near
|
|
42
|
+
* @exception {DeveloperError} translucencyByDistance.far must be greater than translucencyByDistance.near
|
|
41
43
|
*
|
|
42
44
|
* @see BillboardCollection
|
|
43
45
|
* @see BillboardCollection#add
|
|
@@ -47,33 +49,39 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
|
|
|
47
49
|
*
|
|
48
50
|
* @demo <a href="http://cesium.agi.com/Cesium/Apps/Sandcastle/index.html?src=Billboards.html">Cesium Sandcastle Billboard Demo</a>
|
|
49
51
|
*/
|
|
50
|
-
var Billboard = function(
|
|
51
|
-
|
|
52
|
+
var Billboard = function(options, billboardCollection) {
|
|
53
|
+
options = defaultValue(options, EMPTY_OBJECT);
|
|
52
54
|
|
|
53
|
-
if (defined(
|
|
55
|
+
if (defined(options.scaleByDistance) && options.scaleByDistance.far <= options.scaleByDistance.near) {
|
|
54
56
|
throw new DeveloperError('scaleByDistance.far must be greater than scaleByDistance.near.');
|
|
55
57
|
}
|
|
58
|
+
if (defined(options.translucencyByDistance) &&
|
|
59
|
+
options.translucencyByDistance.far <= options.translucencyByDistance.near) {
|
|
60
|
+
throw new DeveloperError('translucencyByDistance.far must be greater than translucencyByDistance.near.');
|
|
61
|
+
}
|
|
56
62
|
|
|
57
|
-
this._show = defaultValue(
|
|
63
|
+
this._show = defaultValue(options.show, true);
|
|
58
64
|
|
|
59
|
-
this._position = Cartesian3.clone(defaultValue(
|
|
65
|
+
this._position = Cartesian3.clone(defaultValue(options.position, Cartesian3.ZERO));
|
|
60
66
|
this._actualPosition = Cartesian3.clone(this._position); // For columbus view and 2D
|
|
61
67
|
|
|
62
|
-
this._pixelOffset = Cartesian2.clone(defaultValue(
|
|
63
|
-
this._eyeOffset = Cartesian3.clone(defaultValue(
|
|
64
|
-
this._verticalOrigin = defaultValue(
|
|
65
|
-
this._horizontalOrigin = defaultValue(
|
|
66
|
-
this._scale = defaultValue(
|
|
67
|
-
this._imageIndex = defaultValue(
|
|
68
|
-
this._color = Color.clone(defaultValue(
|
|
69
|
-
this._rotation = defaultValue(
|
|
70
|
-
this._alignedAxis = Cartesian3.clone(defaultValue(
|
|
71
|
-
this._width =
|
|
72
|
-
this._height =
|
|
73
|
-
this._scaleByDistance =
|
|
68
|
+
this._pixelOffset = Cartesian2.clone(defaultValue(options.pixelOffset, Cartesian2.ZERO));
|
|
69
|
+
this._eyeOffset = Cartesian3.clone(defaultValue(options.eyeOffset, Cartesian3.ZERO));
|
|
70
|
+
this._verticalOrigin = defaultValue(options.verticalOrigin, VerticalOrigin.CENTER);
|
|
71
|
+
this._horizontalOrigin = defaultValue(options.horizontalOrigin, HorizontalOrigin.CENTER);
|
|
72
|
+
this._scale = defaultValue(options.scale, 1.0);
|
|
73
|
+
this._imageIndex = defaultValue(options.imageIndex, -1);
|
|
74
|
+
this._color = Color.clone(defaultValue(options.color, Color.WHITE));
|
|
75
|
+
this._rotation = defaultValue(options.rotation, 0.0);
|
|
76
|
+
this._alignedAxis = Cartesian3.clone(defaultValue(options.alignedAxis, Cartesian3.ZERO));
|
|
77
|
+
this._width = options.width;
|
|
78
|
+
this._height = options.height;
|
|
79
|
+
this._scaleByDistance = options.scaleByDistance;
|
|
80
|
+
this._translucencyByDistance = options.translucencyByDistance;
|
|
81
|
+
this._id = options.id;
|
|
74
82
|
|
|
75
83
|
this._pickId = undefined;
|
|
76
|
-
this._pickIdThis =
|
|
84
|
+
this._pickIdThis = options._pickIdThis;
|
|
77
85
|
this._billboardCollection = billboardCollection;
|
|
78
86
|
this._dirty = false;
|
|
79
87
|
this._index = -1; //Used only by BillboardCollection
|
|
@@ -91,7 +99,8 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
|
|
|
91
99
|
var ROTATION_INDEX = Billboard.ROTATION_INDEX = 9;
|
|
92
100
|
var ALIGNED_AXIS_INDEX = Billboard.ALIGNED_AXIS_INDEX = 10;
|
|
93
101
|
var SCALE_BY_DISTANCE_INDEX = Billboard.SCALE_BY_DISTANCE_INDEX = 11;
|
|
94
|
-
Billboard.
|
|
102
|
+
var TRANSLUCENCY_BY_DISTANCE_INDEX = Billboard.TRANSLUCENCY_BY_DISTANCE_INDEX = 12;
|
|
103
|
+
Billboard.NUMBER_OF_PROPERTIES = 13;
|
|
95
104
|
|
|
96
105
|
function makeDirty(billboard, propertyChanged) {
|
|
97
106
|
var billboardCollection = billboard._billboardCollection;
|
|
@@ -104,7 +113,8 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
|
|
|
104
113
|
Billboard.prototype.getPickId = function(context) {
|
|
105
114
|
if (!defined(this._pickId)) {
|
|
106
115
|
this._pickId = context.createPickId({
|
|
107
|
-
primitive : defaultValue(this._pickIdThis, this)
|
|
116
|
+
primitive : defaultValue(this._pickIdThis, this),
|
|
117
|
+
id : this._id
|
|
108
118
|
});
|
|
109
119
|
}
|
|
110
120
|
|
|
@@ -317,6 +327,59 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
|
|
|
317
327
|
this._scaleByDistance = NearFarScalar.clone(scale, this._scaleByDistance);
|
|
318
328
|
};
|
|
319
329
|
|
|
330
|
+
/**
|
|
331
|
+
* Returns the near and far translucency properties of a Billboard based on the billboard's distance from the camera.
|
|
332
|
+
*
|
|
333
|
+
* @memberof Billboard
|
|
334
|
+
*
|
|
335
|
+
* @returns {NearFarScalar} The near/far translucency values based on camera distance to the billboard
|
|
336
|
+
*
|
|
337
|
+
* @see Billboard#setTranslucencyByDistance
|
|
338
|
+
*/
|
|
339
|
+
Billboard.prototype.getTranslucencyByDistance = function() {
|
|
340
|
+
return this._translucencyByDistance;
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Sets near and far translucency properties of a Billboard based on the billboard's distance from the camera.
|
|
345
|
+
* A billboard's translucency will interpolate between the {@link NearFarScalar#nearValue} and
|
|
346
|
+
* {@link NearFarScalar#farValue} while the camera distance falls within the upper and lower bounds
|
|
347
|
+
* of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.
|
|
348
|
+
* Outside of these ranges the billboard's translucency remains clamped to the nearest bound. If undefined,
|
|
349
|
+
* translucencyByDistance will be disabled.
|
|
350
|
+
*
|
|
351
|
+
* @memberof Billboard
|
|
352
|
+
*
|
|
353
|
+
* @param {NearFarScalar} translucency The configuration of near and far distances and their respective translucency values
|
|
354
|
+
*
|
|
355
|
+
* @exception {DeveloperError} far distance must be greater than near distance.
|
|
356
|
+
*
|
|
357
|
+
* @see Billboard#getTranslucencyByDistance
|
|
358
|
+
*
|
|
359
|
+
* @example
|
|
360
|
+
* // Example 1.
|
|
361
|
+
* // Set a billboard's translucency to 1.0 when the
|
|
362
|
+
* // camera is 1500 meters from the billboard and disappear as
|
|
363
|
+
* // the camera distance approaches 8.0e6 meters.
|
|
364
|
+
* b.setTranslucencyByDistance(new NearFarScalar(1.5e2, 1.0, 8.0e6, 0.0));
|
|
365
|
+
*
|
|
366
|
+
* // Example 2.
|
|
367
|
+
* // disable translucency by distance
|
|
368
|
+
* b.setTranslucencyByDistance(undefined);
|
|
369
|
+
*/
|
|
370
|
+
Billboard.prototype.setTranslucencyByDistance = function(translucency) {
|
|
371
|
+
if (NearFarScalar.equals(this._translucencyByDistance, translucency)) {
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
if (translucency.far <= translucency.near) {
|
|
376
|
+
throw new DeveloperError('far distance must be greater than near distance.');
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
makeDirty(this, TRANSLUCENCY_BY_DISTANCE_INDEX);
|
|
380
|
+
this._translucencyByDistance = NearFarScalar.clone(translucency, this._translucencyByDistance);
|
|
381
|
+
};
|
|
382
|
+
|
|
320
383
|
/**
|
|
321
384
|
* Returns the 3D Cartesian offset applied to this billboard in eye coordinates.
|
|
322
385
|
*
|
|
@@ -773,13 +836,24 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
|
|
|
773
836
|
}
|
|
774
837
|
};
|
|
775
838
|
|
|
839
|
+
/**
|
|
840
|
+
* Returns the user-defined object returned when the billboard is picked.
|
|
841
|
+
*
|
|
842
|
+
* @memberof Billboard
|
|
843
|
+
*
|
|
844
|
+
* @returns {Object} The user-defined object returned when the billboard is picked.
|
|
845
|
+
*/
|
|
846
|
+
Billboard.prototype.getId = function() {
|
|
847
|
+
return this._id;
|
|
848
|
+
};
|
|
849
|
+
|
|
776
850
|
var tempCartesian4 = new Cartesian4();
|
|
777
851
|
Billboard._computeActualPosition = function(position, frameState, modelMatrix) {
|
|
778
852
|
if (frameState.mode === SceneMode.SCENE3D) {
|
|
779
853
|
return position;
|
|
780
854
|
}
|
|
781
855
|
|
|
782
|
-
|
|
856
|
+
Matrix4.multiplyByPoint(modelMatrix, position, tempCartesian4);
|
|
783
857
|
return SceneTransforms.computeActualWgs84Position(frameState, tempCartesian4);
|
|
784
858
|
};
|
|
785
859
|
|
|
@@ -790,8 +864,8 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
|
|
|
790
864
|
var projection = camera.frustum.projectionMatrix;
|
|
791
865
|
|
|
792
866
|
// Model to eye coordinates
|
|
793
|
-
var mv =
|
|
794
|
-
var positionEC =
|
|
867
|
+
var mv = Matrix4.multiply(view, modelMatrix);
|
|
868
|
+
var positionEC = Matrix4.multiplyByPoint(mv, position);
|
|
795
869
|
|
|
796
870
|
// Apply eye offset, e.g., czm_eyeOffset
|
|
797
871
|
var zEyeOffset = Cartesian3.multiplyComponents(eyeOffset, Cartesian3.normalize(positionEC));
|
|
@@ -799,7 +873,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
|
|
|
799
873
|
positionEC.y += eyeOffset.y + zEyeOffset.y;
|
|
800
874
|
positionEC.z += zEyeOffset.z;
|
|
801
875
|
|
|
802
|
-
var positionCC =
|
|
876
|
+
var positionCC = Matrix4.multiplyByVector(projection, positionEC); // clip coordinates
|
|
803
877
|
var positionWC = SceneTransforms.clipToWindowCoordinates(context, positionCC);
|
|
804
878
|
|
|
805
879
|
// Apply pixel offset
|
|
@@ -873,7 +947,9 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
|
|
|
873
947
|
Color.equals(this._color, other._color) &&
|
|
874
948
|
Cartesian2.equals(this._pixelOffset, other._pixelOffset) &&
|
|
875
949
|
Cartesian3.equals(this._eyeOffset, other._eyeOffset) &&
|
|
876
|
-
NearFarScalar.equals(this._scaleByDistance, other._scaleByDistance)
|
|
950
|
+
NearFarScalar.equals(this._scaleByDistance, other._scaleByDistance) &&
|
|
951
|
+
NearFarScalar.equals(this._translucencyByDistance, other._translucencyByDistance) &&
|
|
952
|
+
this._id === other._id;
|
|
877
953
|
};
|
|
878
954
|
|
|
879
955
|
Billboard.prototype._destroy = function() {
|