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
|
@@ -38,6 +38,7 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
38
38
|
var ROTATION_INDEX = Billboard.ROTATION_INDEX;
|
|
39
39
|
var ALIGNED_AXIS_INDEX = Billboard.ALIGNED_AXIS_INDEX;
|
|
40
40
|
var SCALE_BY_DISTANCE_INDEX = Billboard.SCALE_BY_DISTANCE_INDEX;
|
|
41
|
+
var TRANSLUCENCY_BY_DISTANCE_INDEX = Billboard.TRANSLUCENCY_BY_DISTANCE_INDEX;
|
|
41
42
|
var NUMBER_OF_PROPERTIES = Billboard.NUMBER_OF_PROPERTIES;
|
|
42
43
|
|
|
43
44
|
// PERFORMANCE_IDEA: Use vertex compression so we don't run out of
|
|
@@ -53,7 +54,8 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
53
54
|
pickColor : 7, // pickColor and color shared an index because pickColor is only used during
|
|
54
55
|
color : 7, // the 'pick' pass and 'color' is only used during the 'color' pass.
|
|
55
56
|
rotationAndAlignedAxis : 8,
|
|
56
|
-
scaleByDistance : 9
|
|
57
|
+
scaleByDistance : 9,
|
|
58
|
+
translucencyByDistance : 10
|
|
57
59
|
};
|
|
58
60
|
|
|
59
61
|
// Identifies to the VertexArrayFacade the attributes that are used only for the pick
|
|
@@ -131,6 +133,10 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
131
133
|
this._compiledShaderScaleByDistance = false;
|
|
132
134
|
this._compiledShaderScaleByDistancePick = false;
|
|
133
135
|
|
|
136
|
+
this._shaderTranslucencyByDistance = false;
|
|
137
|
+
this._compiledShaderTranslucencyByDistance = false;
|
|
138
|
+
this._compiledShaderTranslucencyByDistancePick = false;
|
|
139
|
+
|
|
134
140
|
this._propertiesChanged = new Uint32Array(NUMBER_OF_PROPERTIES);
|
|
135
141
|
|
|
136
142
|
this._maxSize = 0.0;
|
|
@@ -169,8 +175,8 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
169
175
|
* billboards.add({ imageIndex: 0, position : new Cartesian3(0.0, 0.0, 1000000.0) }); // up
|
|
170
176
|
* ]);
|
|
171
177
|
*/
|
|
172
|
-
this.modelMatrix = Matrix4.
|
|
173
|
-
this._modelMatrix = Matrix4.
|
|
178
|
+
this.modelMatrix = Matrix4.clone(Matrix4.IDENTITY);
|
|
179
|
+
this._modelMatrix = Matrix4.clone(Matrix4.IDENTITY);
|
|
174
180
|
|
|
175
181
|
this._mode = SceneMode.SCENE3D;
|
|
176
182
|
this._projection = undefined;
|
|
@@ -188,7 +194,8 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
188
194
|
BufferUsage.STATIC_DRAW, // COLOR_INDEX
|
|
189
195
|
BufferUsage.STATIC_DRAW, // ROTATION_INDEX
|
|
190
196
|
BufferUsage.STATIC_DRAW, // ALIGNED_AXIS_INDEX
|
|
191
|
-
BufferUsage.STATIC_DRAW
|
|
197
|
+
BufferUsage.STATIC_DRAW, // SCALE_BY_DISTANCE_INDEX
|
|
198
|
+
BufferUsage.STATIC_DRAW // TRANSLUCENCY_BY_DISTANCE_INDEX
|
|
192
199
|
];
|
|
193
200
|
|
|
194
201
|
var that = this;
|
|
@@ -230,9 +237,9 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
230
237
|
* horizontalOrigin : HorizontalOrigin.CENTER,
|
|
231
238
|
* verticalOrigin : VerticalOrigin.CENTER,
|
|
232
239
|
* scale : 1.0,
|
|
233
|
-
* scaleByDistance : new NearFarScalar(5e6, 1.0, 2e7, 0.0),
|
|
234
240
|
* imageIndex : 0,
|
|
235
|
-
* color : Color.WHITE
|
|
241
|
+
* color : Color.WHITE,
|
|
242
|
+
* id : undefined
|
|
236
243
|
* });
|
|
237
244
|
*
|
|
238
245
|
* // Example 2: Specify only the billboard's cartographic position.
|
|
@@ -660,6 +667,11 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
660
667
|
componentsPerAttribute : 4,
|
|
661
668
|
componentDatatype : ComponentDatatype.FLOAT,
|
|
662
669
|
usage : buffersUsage[SCALE_BY_DISTANCE_INDEX]
|
|
670
|
+
}, {
|
|
671
|
+
index : attributeIndices.translucencyByDistance,
|
|
672
|
+
componentsPerAttribute : 4,
|
|
673
|
+
componentDatatype : ComponentDatatype.FLOAT,
|
|
674
|
+
usage : buffersUsage[TRANSLUCENCY_BY_DISTANCE_INDEX]
|
|
663
675
|
}], 4 * numberOfBillboards); // 4 vertices per billboard
|
|
664
676
|
}
|
|
665
677
|
|
|
@@ -844,9 +856,9 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
844
856
|
var allPurposeWriters = vafWriters[allPassPurpose];
|
|
845
857
|
var writer = allPurposeWriters[attributeIndices.scaleByDistance];
|
|
846
858
|
var near = 0.0;
|
|
847
|
-
var nearValue =
|
|
848
|
-
var far =
|
|
849
|
-
var farValue =
|
|
859
|
+
var nearValue = 1.0;
|
|
860
|
+
var far = 1.0;
|
|
861
|
+
var farValue = 1.0;
|
|
850
862
|
|
|
851
863
|
var scale = billboard.getScaleByDistance();
|
|
852
864
|
if (defined(scale)) {
|
|
@@ -868,6 +880,35 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
868
880
|
writer(i + 3, near, nearValue, far, farValue);
|
|
869
881
|
}
|
|
870
882
|
|
|
883
|
+
function writeTranslucencyByDistance(billboardCollection, context, textureAtlasCoordinates, vafWriters, billboard) {
|
|
884
|
+
var i = billboard._index * 4;
|
|
885
|
+
var allPurposeWriters = vafWriters[allPassPurpose];
|
|
886
|
+
var writer = allPurposeWriters[attributeIndices.translucencyByDistance];
|
|
887
|
+
var near = 0.0;
|
|
888
|
+
var nearValue = 1.0;
|
|
889
|
+
var far = 1.0;
|
|
890
|
+
var farValue = 1.0;
|
|
891
|
+
|
|
892
|
+
var translucency = billboard.getTranslucencyByDistance();
|
|
893
|
+
if (defined(translucency)) {
|
|
894
|
+
near = translucency.near;
|
|
895
|
+
nearValue = translucency.nearValue;
|
|
896
|
+
far = translucency.far;
|
|
897
|
+
farValue = translucency.farValue;
|
|
898
|
+
|
|
899
|
+
if (nearValue !== 1.0 || farValue !== 1.0) {
|
|
900
|
+
// translucency by distance calculation in shader need not be enabled
|
|
901
|
+
// until a billboard with near and far !== 1.0 is found
|
|
902
|
+
billboardCollection._shaderTranslucencyByDistance = true;
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
writer(i + 0, near, nearValue, far, farValue);
|
|
907
|
+
writer(i + 1, near, nearValue, far, farValue);
|
|
908
|
+
writer(i + 2, near, nearValue, far, farValue);
|
|
909
|
+
writer(i + 3, near, nearValue, far, farValue);
|
|
910
|
+
}
|
|
911
|
+
|
|
871
912
|
function writeBillboard(billboardCollection, context, textureAtlasCoordinates, vafWriters, billboard) {
|
|
872
913
|
writePosition(billboardCollection, context, textureAtlasCoordinates, vafWriters, billboard);
|
|
873
914
|
writePixelOffset(billboardCollection, context, textureAtlasCoordinates, vafWriters, billboard);
|
|
@@ -878,6 +919,7 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
878
919
|
writeTextureCoordinatesAndImageSize(billboardCollection, context, textureAtlasCoordinates, vafWriters, billboard);
|
|
879
920
|
writeRotationAndAlignedAxis(billboardCollection, context, textureAtlasCoordinates, vafWriters, billboard);
|
|
880
921
|
writeScaleByDistance(billboardCollection, context, textureAtlasCoordinates, vafWriters, billboard);
|
|
922
|
+
writeTranslucencyByDistance(billboardCollection, context, textureAtlasCoordinates, vafWriters, billboard);
|
|
881
923
|
}
|
|
882
924
|
|
|
883
925
|
function recomputeActualPositions(billboardCollection, billboards, length, frameState, modelMatrix, recomputeBoundingVolume) {
|
|
@@ -920,11 +962,11 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
920
962
|
if (billboardCollection._mode !== mode ||
|
|
921
963
|
billboardCollection._projection !== projection ||
|
|
922
964
|
mode !== SceneMode.SCENE3D &&
|
|
923
|
-
!
|
|
965
|
+
!Matrix4.equals(modelMatrix, billboardCollection.modelMatrix)) {
|
|
924
966
|
|
|
925
967
|
billboardCollection._mode = mode;
|
|
926
968
|
billboardCollection._projection = projection;
|
|
927
|
-
|
|
969
|
+
Matrix4.clone(billboardCollection.modelMatrix, modelMatrix);
|
|
928
970
|
billboardCollection._createVertexArray = true;
|
|
929
971
|
|
|
930
972
|
if (mode === SceneMode.SCENE3D || mode === SceneMode.SCENE2D || mode === SceneMode.COLUMBUS_VIEW) {
|
|
@@ -1066,6 +1108,10 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
1066
1108
|
writers.push(writeScaleByDistance);
|
|
1067
1109
|
}
|
|
1068
1110
|
|
|
1111
|
+
if (properties[TRANSLUCENCY_BY_DISTANCE_INDEX]) {
|
|
1112
|
+
writers.push(writeTranslucencyByDistance);
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1069
1115
|
vafWriters = this._vaf.writers;
|
|
1070
1116
|
|
|
1071
1117
|
if ((billboardsToUpdateLength / billboardsLength) > 0.1) {
|
|
@@ -1140,19 +1186,23 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
1140
1186
|
});
|
|
1141
1187
|
}
|
|
1142
1188
|
|
|
1143
|
-
if (!defined(this._sp) ||
|
|
1144
|
-
(this.
|
|
1189
|
+
if (!defined(this._sp) ||
|
|
1190
|
+
(this._shaderRotation && !this._compiledShaderRotation) ||
|
|
1191
|
+
(this._shaderScaleByDistance && !this._compiledShaderScaleByDistance) ||
|
|
1192
|
+
(this._shaderTranslucencyByDistance && !this._compiledShaderTranslucencyByDistance)) {
|
|
1145
1193
|
this._sp = context.getShaderCache().replaceShaderProgram(
|
|
1146
1194
|
this._sp,
|
|
1147
1195
|
createShaderSource({
|
|
1148
1196
|
defines : [this._shaderRotation ? 'ROTATION' : '',
|
|
1149
|
-
this._shaderScaleByDistance ? 'EYE_DISTANCE_SCALING' : ''
|
|
1197
|
+
this._shaderScaleByDistance ? 'EYE_DISTANCE_SCALING' : '',
|
|
1198
|
+
this._shaderTranslucencyByDistance ? 'EYE_DISTANCE_TRANSLUCENCY' : ''],
|
|
1150
1199
|
sources : [BillboardCollectionVS]
|
|
1151
1200
|
}),
|
|
1152
1201
|
BillboardCollectionFS,
|
|
1153
1202
|
attributeIndices);
|
|
1154
1203
|
this._compiledShaderRotation = this._shaderRotation;
|
|
1155
1204
|
this._compiledShaderScaleByDistance = this._shaderScaleByDistance;
|
|
1205
|
+
this._compiledShaderTranslucencyByDistance = this._shaderTranslucencyByDistance;
|
|
1156
1206
|
}
|
|
1157
1207
|
|
|
1158
1208
|
va = this._vaf.vaByPurpose[colorPassPurpose];
|
|
@@ -1182,13 +1232,15 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
1182
1232
|
|
|
1183
1233
|
if (!defined(this._spPick) ||
|
|
1184
1234
|
(this._shaderRotation && !this._compiledShaderRotationPick) ||
|
|
1185
|
-
(this._shaderScaleByDistance && !this._compiledShaderScaleByDistancePick)
|
|
1235
|
+
(this._shaderScaleByDistance && !this._compiledShaderScaleByDistancePick) ||
|
|
1236
|
+
(this._shaderTranslucencyByDistance && !this._compiledShaderTranslucencyByDistancePick)) {
|
|
1186
1237
|
this._spPick = context.getShaderCache().replaceShaderProgram(
|
|
1187
1238
|
this._spPick,
|
|
1188
1239
|
createShaderSource({
|
|
1189
1240
|
defines : ['RENDER_FOR_PICK',
|
|
1190
1241
|
this._shaderRotation ? 'ROTATION' : '',
|
|
1191
|
-
this._shaderScaleByDistance ? 'EYE_DISTANCE_SCALING' : ''
|
|
1242
|
+
this._shaderScaleByDistance ? 'EYE_DISTANCE_SCALING' : '',
|
|
1243
|
+
this._shaderTranslucencyByDistance ? 'EYE_DISTANCE_TRANSLUCENCY' : ''],
|
|
1192
1244
|
sources : [BillboardCollectionVS]
|
|
1193
1245
|
}),
|
|
1194
1246
|
createShaderSource({
|
|
@@ -1198,6 +1250,7 @@ define(['Core/defined', 'Core/DeveloperError', 'Core/Color', 'Core/defaultValue'
|
|
|
1198
1250
|
attributeIndices);
|
|
1199
1251
|
this._compiledShaderRotationPick = this._shaderRotation;
|
|
1200
1252
|
this._compiledShaderScaleByDistancePick = this._shaderScaleByDistance;
|
|
1253
|
+
this._compiledShaderTranslucencyByDistancePick = this._shaderTranslucencyByDistance;
|
|
1201
1254
|
}
|
|
1202
1255
|
|
|
1203
1256
|
va = this._vaf.vaByPurpose[pickPassPurpose];
|
|
@@ -145,8 +145,8 @@ define(['Core/defined', 'Core/defineProperties', 'Core/DeveloperError', 'Core/Ma
|
|
|
145
145
|
u.x, u.y, u.z, -Cartesian3.dot(u, e),
|
|
146
146
|
-d.x, -d.y, -d.z, Cartesian3.dot(d, e),
|
|
147
147
|
0.0, 0.0, 0.0, 1.0);
|
|
148
|
-
camera._viewMatrix =
|
|
149
|
-
camera._invViewMatrix = camera._viewMatrix
|
|
148
|
+
camera._viewMatrix = Matrix4.multiply(viewMatrix, camera._invTransform);
|
|
149
|
+
camera._invViewMatrix = Matrix4.inverseTransformation(camera._viewMatrix);
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
function update(camera) {
|
|
@@ -179,11 +179,11 @@ define(['Core/defined', 'Core/defineProperties', 'Core/DeveloperError', 'Core/Ma
|
|
|
179
179
|
if (transformChanged) {
|
|
180
180
|
transform = camera._transform = Matrix4.clone(camera.transform);
|
|
181
181
|
|
|
182
|
-
camera._invTransform = camera._transform
|
|
182
|
+
camera._invTransform = Matrix4.inverseTransformation(camera._transform);
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
if (positionChanged || transformChanged) {
|
|
186
|
-
camera._positionWC = Cartesian3.fromCartesian4(
|
|
186
|
+
camera._positionWC = Cartesian3.fromCartesian4(Matrix4.multiplyByPoint(transform, position), camera._positionWC);
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
if (directionChanged || upChanged || rightChanged) {
|
|
@@ -205,15 +205,15 @@ define(['Core/defined', 'Core/defineProperties', 'Core/DeveloperError', 'Core/Ma
|
|
|
205
205
|
}
|
|
206
206
|
|
|
207
207
|
if (directionChanged || transformChanged) {
|
|
208
|
-
camera._directionWC = Cartesian3.fromCartesian4(
|
|
208
|
+
camera._directionWC = Cartesian3.fromCartesian4(Matrix4.multiplyByVector(transform, new Cartesian4(direction.x, direction.y, direction.z, 0.0)));
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
if (upChanged || transformChanged) {
|
|
212
|
-
camera._upWC = Cartesian3.fromCartesian4(
|
|
212
|
+
camera._upWC = Cartesian3.fromCartesian4(Matrix4.multiplyByVector(transform, new Cartesian4(up.x, up.y, up.z, 0.0)));
|
|
213
213
|
}
|
|
214
214
|
|
|
215
215
|
if (rightChanged || transformChanged) {
|
|
216
|
-
camera._rightWC = Cartesian3.fromCartesian4(
|
|
216
|
+
camera._rightWC = Cartesian3.fromCartesian4(Matrix4.multiplyByVector(transform, new Cartesian4(right.x, right.y, right.z, 0.0)));
|
|
217
217
|
}
|
|
218
218
|
|
|
219
219
|
if (positionChanged || directionChanged || upChanged || rightChanged || transformChanged) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*global define*/
|
|
2
|
-
define(['Core/defaultValue', 'Core/defined', 'Core/defineProperties', 'Core/Cartesian2', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/Cartographic', 'Core/DeveloperError', 'Core/Ellipsoid', 'Core/GeographicProjection', 'Core/IntersectionTests', 'Core/Math', 'Core/Matrix3', 'Core/Matrix4', 'Core/Quaternion', 'Core/Ray', 'Scene/SceneMode', 'ThirdParty/Tween'], function(
|
|
2
|
+
define(['Core/defaultValue', 'Core/defined', 'Core/defineProperties', 'Core/Cartesian2', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/Cartographic', 'Core/DeveloperError', 'Core/Ellipsoid', 'Core/GeographicProjection', 'Core/IntersectionTests', 'Core/Math', 'Core/Matrix3', 'Core/Matrix4', 'Core/Quaternion', 'Core/Ray', 'Core/Transforms', 'Scene/SceneMode', 'ThirdParty/Tween'], function(
|
|
3
3
|
defaultValue,
|
|
4
4
|
defined,
|
|
5
5
|
defineProperties,
|
|
@@ -16,6 +16,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/defineProperties', 'Core/Cart
|
|
|
16
16
|
Matrix4,
|
|
17
17
|
Quaternion,
|
|
18
18
|
Ray,
|
|
19
|
+
Transforms,
|
|
19
20
|
SceneMode,
|
|
20
21
|
Tween) {
|
|
21
22
|
"use strict";
|
|
@@ -343,7 +344,8 @@ define(['Core/defaultValue', 'Core/defined', 'Core/defineProperties', 'Core/Cart
|
|
|
343
344
|
}
|
|
344
345
|
|
|
345
346
|
var turnAngle = defaultValue(angle, this.defaultLookAmount);
|
|
346
|
-
var
|
|
347
|
+
var quaternion = Quaternion.fromAxisAngle(axis, -turnAngle, lookScratchQuaternion);
|
|
348
|
+
var rotation = Matrix3.fromQuaternion(quaternion, lookScratchMatrix);
|
|
347
349
|
|
|
348
350
|
var direction = this._camera.direction;
|
|
349
351
|
var up = this._camera.up;
|
|
@@ -396,7 +398,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/defineProperties', 'Core/Cart
|
|
|
396
398
|
var direction = Cartesian3.clone(camera.directionWC, appendTransformDirection);
|
|
397
399
|
|
|
398
400
|
oldTransform = camera.transform;
|
|
399
|
-
camera.transform =
|
|
401
|
+
camera.transform = Matrix4.multiply(transform, oldTransform);
|
|
400
402
|
|
|
401
403
|
var invTransform = camera.inverseTransform;
|
|
402
404
|
Cartesian3.clone(Matrix4.multiplyByVector(invTransform, position, position), camera.position);
|
|
@@ -462,7 +464,8 @@ define(['Core/defaultValue', 'Core/defined', 'Core/defineProperties', 'Core/Cart
|
|
|
462
464
|
var camera = this._camera;
|
|
463
465
|
|
|
464
466
|
var turnAngle = defaultValue(angle, this.defaultRotateAmount);
|
|
465
|
-
var
|
|
467
|
+
var quaternion = Quaternion.fromAxisAngle(axis, -turnAngle, rotateScratchQuaternion);
|
|
468
|
+
var rotation = Matrix3.fromQuaternion(quaternion, rotateScratchMatrix);
|
|
466
469
|
|
|
467
470
|
var oldTransform = appendTransform(this, transform);
|
|
468
471
|
Matrix3.multiplyByVector(rotation, camera.position, camera.position);
|
|
@@ -736,12 +739,20 @@ define(['Core/defaultValue', 'Core/defined', 'Core/defineProperties', 'Core/Cart
|
|
|
736
739
|
return Math.atan2(camera.right.y, camera.right.x);
|
|
737
740
|
}
|
|
738
741
|
|
|
739
|
-
var
|
|
742
|
+
var scratchHeadingMatrix4 = new Matrix4();
|
|
743
|
+
var scratchHeadingMatrix3 = new Matrix3();
|
|
744
|
+
var scratchHeadingCartesian3 = new Cartesian3();
|
|
740
745
|
|
|
741
746
|
function getHeading3D(controller) {
|
|
742
747
|
var camera = controller._camera;
|
|
743
|
-
|
|
744
|
-
|
|
748
|
+
|
|
749
|
+
var ellipsoid = controller._projection.getEllipsoid();
|
|
750
|
+
var toFixedFrame = Transforms.eastNorthUpToFixedFrame(camera.position, ellipsoid, scratchHeadingMatrix4);
|
|
751
|
+
var transform = Matrix4.getRotation(toFixedFrame, scratchHeadingMatrix3);
|
|
752
|
+
Matrix3.transpose(transform, transform);
|
|
753
|
+
|
|
754
|
+
var right = Matrix3.multiplyByVector(transform, camera.right, scratchHeadingCartesian3);
|
|
755
|
+
return Math.atan2(right.y, right.x);
|
|
745
756
|
}
|
|
746
757
|
|
|
747
758
|
function setHeading2D(controller, angle) {
|
|
@@ -968,7 +979,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/defineProperties', 'Core/Cart
|
|
|
968
979
|
var west = extent.west;
|
|
969
980
|
|
|
970
981
|
var transform = Matrix4.clone(camera.transform, viewExtentCVTransform);
|
|
971
|
-
|
|
982
|
+
Matrix4.setColumn(transform, 3, Cartesian4.UNIT_W);
|
|
972
983
|
var invTransform = camera.inverseTransform;
|
|
973
984
|
|
|
974
985
|
var cart = viewExtentCVCartographic;
|
|
@@ -1350,7 +1361,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/defineProperties', 'Core/Cart
|
|
|
1350
1361
|
var updateCV = function(value) {
|
|
1351
1362
|
var interp = Cartesian3.lerp(position, newPosition, value.time);
|
|
1352
1363
|
var pos = new Cartesian4(interp.x, interp.y, interp.z, 1.0);
|
|
1353
|
-
camera.position = Cartesian3.fromCartesian4(camera.inverseTransform
|
|
1364
|
+
camera.position = Cartesian3.fromCartesian4(Matrix4.multiplyByVector(camera.inverseTransform, pos));
|
|
1354
1365
|
};
|
|
1355
1366
|
|
|
1356
1367
|
return {
|
|
@@ -1371,14 +1382,14 @@ define(['Core/defaultValue', 'Core/defined', 'Core/defineProperties', 'Core/Cart
|
|
|
1371
1382
|
var position = camera.position;
|
|
1372
1383
|
var direction = camera.direction;
|
|
1373
1384
|
|
|
1374
|
-
var normal = Cartesian3.fromCartesian4(camera.inverseTransform
|
|
1385
|
+
var normal = Cartesian3.fromCartesian4(Matrix4.multiplyByVector(camera.inverseTransform, Cartesian4.UNIT_X));
|
|
1375
1386
|
var scalar = -Cartesian3.dot(normal, position) / Cartesian3.dot(normal, direction);
|
|
1376
1387
|
var center = Cartesian3.add(position, Cartesian3.multiplyByScalar(direction, scalar));
|
|
1377
1388
|
center = new Cartesian4(center.x, center.y, center.z, 1.0);
|
|
1378
|
-
var centerWC = camera.transform
|
|
1389
|
+
var centerWC = Matrix4.multiplyByVector(camera.transform, center);
|
|
1379
1390
|
|
|
1380
1391
|
var cameraPosition = new Cartesian4(camera.position.x, camera.position.y, camera.position.z, 1.0);
|
|
1381
|
-
var positionWC = camera.transform
|
|
1392
|
+
var positionWC = Matrix4.multiplyByVector(camera.transform, cameraPosition);
|
|
1382
1393
|
|
|
1383
1394
|
var tanPhi = Math.tan(controller._camera.frustum.fovy * 0.5);
|
|
1384
1395
|
var tanTheta = controller._camera.frustum.aspectRatio * tanPhi;
|
|
@@ -144,7 +144,7 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
|
|
|
144
144
|
}];
|
|
145
145
|
|
|
146
146
|
angle = Math.acos(Cartesian3.dot(Cartesian3.normalize(afterStart), Cartesian3.normalize(aboveEnd)));
|
|
147
|
-
axis = Cartesian3.cross(
|
|
147
|
+
axis = Cartesian3.cross(aboveEnd, afterStart);
|
|
148
148
|
if (Cartesian3.equalsEpsilon(axis, Cartesian3.ZERO, CesiumMath.EPSILON6)) {
|
|
149
149
|
axis = Cartesian3.UNIT_Z;
|
|
150
150
|
}
|
|
@@ -154,7 +154,7 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
|
|
|
154
154
|
for ( var i = startCondition; i > 0.0; i = i - increment) {
|
|
155
155
|
rotation = Matrix3.fromQuaternion(Quaternion.fromAxisAngle(axis, i));
|
|
156
156
|
points.push({
|
|
157
|
-
point :
|
|
157
|
+
point : Matrix3.multiplyByVector(rotation, aboveEnd)
|
|
158
158
|
});
|
|
159
159
|
}
|
|
160
160
|
|
|
@@ -212,9 +212,9 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
|
|
|
212
212
|
Matrix3.fromQuaternion(orientation, rotMatrix);
|
|
213
213
|
|
|
214
214
|
camera.position = path.evaluate(time, camera.position);
|
|
215
|
-
camera.right =
|
|
216
|
-
camera.up =
|
|
217
|
-
camera.direction = Cartesian3.negate(
|
|
215
|
+
camera.right = Matrix3.getRow(rotMatrix, 0, camera.right);
|
|
216
|
+
camera.up = Matrix3.getRow(rotMatrix, 1, camera.up);
|
|
217
|
+
camera.direction = Cartesian3.negate(Matrix3.getRow(rotMatrix, 2, camera.direction), camera.direction);
|
|
218
218
|
};
|
|
219
219
|
|
|
220
220
|
return update;
|
|
@@ -328,9 +328,9 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
|
|
|
328
328
|
Matrix3.fromQuaternion(orientation, rotMatrix);
|
|
329
329
|
|
|
330
330
|
camera.position = path.evaluate(time, camera.position);
|
|
331
|
-
camera.right =
|
|
332
|
-
camera.up =
|
|
333
|
-
camera.direction = Cartesian3.negate(
|
|
331
|
+
camera.right = Matrix3.getRow(rotMatrix, 0, camera.right);
|
|
332
|
+
camera.up = Matrix3.getRow(rotMatrix, 1, camera.up);
|
|
333
|
+
camera.direction = Cartesian3.negate(Matrix3.getRow(rotMatrix, 2, camera.direction), camera.direction);
|
|
334
334
|
};
|
|
335
335
|
|
|
336
336
|
return update;
|
|
@@ -358,9 +358,9 @@ define(['Core/Cartesian2', 'Core/Cartesian3', 'Core/clone', 'Core/defaultValue',
|
|
|
358
358
|
var zoom = camera.position.z;
|
|
359
359
|
camera.position.z = height;
|
|
360
360
|
|
|
361
|
-
camera.right =
|
|
362
|
-
camera.up =
|
|
363
|
-
camera.direction = Cartesian3.negate(
|
|
361
|
+
camera.right = Matrix3.getRow(rotMatrix, 0, camera.right);
|
|
362
|
+
camera.up = Matrix3.getRow(rotMatrix, 1, camera.up);
|
|
363
|
+
camera.direction = Cartesian3.negate(Matrix3.getRow(rotMatrix, 2, camera.direction), camera.direction);
|
|
364
364
|
|
|
365
365
|
var frustum = camera.frustum;
|
|
366
366
|
var ratio = frustum.top / frustum.right;
|
|
@@ -849,7 +849,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/destroyObject', 'Core/Boundin
|
|
|
849
849
|
centerEye.w = 1.0;
|
|
850
850
|
|
|
851
851
|
Matrix4.multiplyByVector(viewMatrix, centerEye, centerEye);
|
|
852
|
-
|
|
852
|
+
Matrix4.setColumn(viewMatrix, 3, centerEye, modifiedModelViewScratch);
|
|
853
853
|
|
|
854
854
|
var tileImageryCollection = tile.imagery;
|
|
855
855
|
var imageryIndex = 0;
|
|
@@ -181,6 +181,18 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
|
|
|
181
181
|
*/
|
|
182
182
|
this.intersectionWidth = defaultValue(options.intersectionWidth, 5.0);
|
|
183
183
|
|
|
184
|
+
/**
|
|
185
|
+
* User-defined object returned when the sensors is picked.
|
|
186
|
+
*
|
|
187
|
+
* @type Object
|
|
188
|
+
*
|
|
189
|
+
* @default undefined
|
|
190
|
+
*
|
|
191
|
+
* @see Scene#pick
|
|
192
|
+
*/
|
|
193
|
+
this.id = options.id;
|
|
194
|
+
this._id = undefined;
|
|
195
|
+
|
|
184
196
|
var that = this;
|
|
185
197
|
this._uniforms = {
|
|
186
198
|
u_showThroughEllipsoid : function() {
|
|
@@ -444,9 +456,12 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/Color'
|
|
|
444
456
|
if (pass.pick) {
|
|
445
457
|
var pickCommand = this._pickCommand;
|
|
446
458
|
|
|
447
|
-
if (!defined(this._pickId)) {
|
|
459
|
+
if (!defined(this._pickId) || (this._id !== this.id)) {
|
|
460
|
+
this._id = this.id;
|
|
461
|
+
this._pickId = this._pickId && this._pickId.destroy();
|
|
448
462
|
this._pickId = context.createPickId({
|
|
449
|
-
primitive : this._pickIdThis
|
|
463
|
+
primitive : this._pickIdThis,
|
|
464
|
+
id : this.id
|
|
450
465
|
});
|
|
451
466
|
}
|
|
452
467
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/*global define*/
|
|
2
|
-
define(['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/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(
|
|
3
|
+
defaultValue,
|
|
3
4
|
BoxGeometry,
|
|
4
5
|
Cartesian3,
|
|
5
6
|
Cartesian4,
|
|
@@ -35,13 +36,20 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/combine'
|
|
|
35
36
|
* @alias EllipsoidPrimitive
|
|
36
37
|
* @constructor
|
|
37
38
|
*
|
|
39
|
+
* @param {Cartesian3} [options.center=Cartesian3.ZERO] The center of the ellipsoid in the ellipsoid's model coordinates.
|
|
40
|
+
* @param {Cartesian3} [options.radii=undefined] The radius of the ellipsoid along the <code>x</code>, <code>y</code>, and <code>z</code> axes in the ellipsoid's model coordinates.
|
|
41
|
+
* @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms the ellipsoid from model to world coordinates.
|
|
42
|
+
* @param {Boolean} [options.show=true] Determines if this primitive will be shown.
|
|
43
|
+
* @param {Material} [options.material=Material.ColorType] The surface appearance of the primitive.
|
|
44
|
+
* @param {Object} [options.id=undefined] A user-defined object to return when the instance is picked with {@link Scene#pick}
|
|
45
|
+
*
|
|
38
46
|
* @example
|
|
39
47
|
* // 1. Create a sphere using the ellipsoid primitive
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
48
|
+
* primitives.add(new EllipsoidPrimitive({
|
|
49
|
+
* center : ellipsoid.cartographicToCartesian(
|
|
50
|
+
* Cartographic.fromDegrees(-75.0, 40.0, 500000.0)),
|
|
51
|
+
* radii : new Cartesian3(500000.0, 500000.0, 500000.0)
|
|
52
|
+
* }));
|
|
45
53
|
*
|
|
46
54
|
* @example
|
|
47
55
|
* // 2. Create a tall ellipsoid in an east-north-up reference frame
|
|
@@ -54,7 +62,9 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/combine'
|
|
|
54
62
|
*
|
|
55
63
|
* @demo <a href="http://cesium.agi.com/Cesium/Apps/Sandcastle/index.html?src=Volumes.html">Cesium Sandcastle Volumes Demo</a>
|
|
56
64
|
*/
|
|
57
|
-
var EllipsoidPrimitive = function() {
|
|
65
|
+
var EllipsoidPrimitive = function(options) {
|
|
66
|
+
options = defaultValue(options, defaultValue.EMPTY_OBJECT);
|
|
67
|
+
|
|
58
68
|
/**
|
|
59
69
|
* The center of the ellipsoid in the ellipsoid's model coordinates.
|
|
60
70
|
* <p>
|
|
@@ -66,7 +76,7 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/combine'
|
|
|
66
76
|
*
|
|
67
77
|
* @see EllipsoidPrimitive#modelMatrix
|
|
68
78
|
*/
|
|
69
|
-
this.center = Cartesian3.clone(Cartesian3.ZERO);
|
|
79
|
+
this.center = Cartesian3.clone(defaultValue(options.center, Cartesian3.ZERO));
|
|
70
80
|
|
|
71
81
|
/**
|
|
72
82
|
* The radius of the ellipsoid along the <code>x</code>, <code>y</code>, and <code>z</code> axes in the ellipsoid's model coordinates.
|
|
@@ -84,7 +94,7 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/combine'
|
|
|
84
94
|
*
|
|
85
95
|
* @see EllipsoidPrimitive#modelMatrix
|
|
86
96
|
*/
|
|
87
|
-
this.radii =
|
|
97
|
+
this.radii = Cartesian3.clone(options.radii);
|
|
88
98
|
this._radii = new Cartesian3();
|
|
89
99
|
|
|
90
100
|
this._oneOverEllipsoidRadiiSquared = new Cartesian3();
|
|
@@ -110,8 +120,8 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/combine'
|
|
|
110
120
|
* @see Transforms.eastNorthUpToFixedFrame
|
|
111
121
|
* @see czm_model
|
|
112
122
|
*/
|
|
113
|
-
this.modelMatrix = Matrix4.
|
|
114
|
-
this._computedModelMatrix = Matrix4
|
|
123
|
+
this.modelMatrix = Matrix4.clone(defaultValue(options.modelMatrix, Matrix4.IDENTITY));
|
|
124
|
+
this._computedModelMatrix = new Matrix4();
|
|
115
125
|
|
|
116
126
|
/**
|
|
117
127
|
* Determines if the ellipsoid primitive will be shown.
|
|
@@ -119,7 +129,7 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/combine'
|
|
|
119
129
|
* @type {Boolean}
|
|
120
130
|
* @default true
|
|
121
131
|
*/
|
|
122
|
-
this.show = true;
|
|
132
|
+
this.show = defaultValue(options.show, true);
|
|
123
133
|
|
|
124
134
|
/**
|
|
125
135
|
* The surface appearance of the ellipsoid. This can be one of several built-in {@link Material} objects or a custom material, scripted with
|
|
@@ -140,9 +150,31 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/combine'
|
|
|
140
150
|
*
|
|
141
151
|
* @see <a href='https://github.com/AnalyticalGraphicsInc/cesium/wiki/Fabric'>Fabric</a>
|
|
142
152
|
*/
|
|
143
|
-
this.material = Material.fromType(Material.ColorType);
|
|
153
|
+
this.material = defaultValue(options.material, Material.fromType(Material.ColorType));
|
|
144
154
|
this._material = undefined;
|
|
145
155
|
|
|
156
|
+
/**
|
|
157
|
+
* User-defined object returned when the ellipsoid is picked.
|
|
158
|
+
*
|
|
159
|
+
* @type Object
|
|
160
|
+
*
|
|
161
|
+
* @default undefined
|
|
162
|
+
*
|
|
163
|
+
* @see Scene#pick
|
|
164
|
+
*/
|
|
165
|
+
this.id = options.id;
|
|
166
|
+
this._id = undefined;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* @private
|
|
170
|
+
*/
|
|
171
|
+
this.onlySunLighting = defaultValue(options.onlySunLighting, false);
|
|
172
|
+
this._onlySunLighting = false;
|
|
173
|
+
|
|
174
|
+
this._owner = options._owner;
|
|
175
|
+
this._executeInClosestFrustum = defaultValue(options._executeInClosestFrustum, true);
|
|
176
|
+
this._writeDepth = defaultValue(options._writeDepth, false);
|
|
177
|
+
|
|
146
178
|
this._sp = undefined;
|
|
147
179
|
this._rs = undefined;
|
|
148
180
|
this._va = undefined;
|
|
@@ -224,10 +256,15 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/combine'
|
|
|
224
256
|
},
|
|
225
257
|
// Do not write depth since the depth for the bounding box is
|
|
226
258
|
// wrong; it is not the true of the ray casted ellipsoid.
|
|
227
|
-
//
|
|
228
|
-
//
|
|
229
|
-
//
|
|
230
|
-
|
|
259
|
+
// For now, most ellipsoids will be translucent so we don't want
|
|
260
|
+
// to write depth anyway.
|
|
261
|
+
//
|
|
262
|
+
// For ellipsoids that we know are opaque and the EXT_frag_depth
|
|
263
|
+
// extension is available, we can set _writeDepth to true. This is
|
|
264
|
+
// a workaround and should be updated when we know which primitives
|
|
265
|
+
// are translucent.
|
|
266
|
+
// See the road map: https://github.com/AnalyticalGraphicsInc/cesium/wiki/Data-Driven-Renderer-Details
|
|
267
|
+
depthMask : this._writeDepth && context.getFragmentDepth(),
|
|
231
268
|
blending : BlendingState.ALPHA_BLEND
|
|
232
269
|
});
|
|
233
270
|
}
|
|
@@ -258,12 +295,21 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/combine'
|
|
|
258
295
|
this._material = this.material;
|
|
259
296
|
this._material.update(context);
|
|
260
297
|
|
|
298
|
+
var lightingChanged = this.onlySunLighting !== this._onlySunLighting;
|
|
299
|
+
this._onlySunLighting = this.onlySunLighting;
|
|
300
|
+
|
|
261
301
|
if (frameState.passes.color) {
|
|
262
302
|
var colorCommand = this._colorCommand;
|
|
263
303
|
|
|
264
304
|
// Recompile shader when material changes
|
|
265
|
-
if (materialChanged) {
|
|
266
|
-
var colorFS = createShaderSource({
|
|
305
|
+
if (materialChanged || lightingChanged) {
|
|
306
|
+
var colorFS = createShaderSource({
|
|
307
|
+
defines : [
|
|
308
|
+
this.onlySunLighting ? 'ONLY_SUN_LIGHTING' : '',
|
|
309
|
+
(this._writeDepth && context.getFragmentDepth()) ? 'WRITE_DEPTH' : ''
|
|
310
|
+
],
|
|
311
|
+
sources : [this.material.shaderSource, EllipsoidFS] }
|
|
312
|
+
);
|
|
267
313
|
|
|
268
314
|
this._sp = context.getShaderCache().replaceShaderProgram(this._sp, EllipsoidVS, colorFS, attributeIndices);
|
|
269
315
|
|
|
@@ -272,7 +318,8 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/combine'
|
|
|
272
318
|
colorCommand.renderState = this._rs;
|
|
273
319
|
colorCommand.shaderProgram = this._sp;
|
|
274
320
|
colorCommand.uniformMap = combine([this._uniforms, this.material._uniforms], false, false);
|
|
275
|
-
colorCommand.executeInClosestFrustum =
|
|
321
|
+
colorCommand.executeInClosestFrustum = this._executeInClosestFrustum;
|
|
322
|
+
colorCommand.owner = defaultValue(this._owner, this);
|
|
276
323
|
}
|
|
277
324
|
|
|
278
325
|
colorCommand.boundingVolume = this._boundingSphere;
|
|
@@ -284,15 +331,22 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/combine'
|
|
|
284
331
|
if (frameState.passes.pick) {
|
|
285
332
|
var pickCommand = this._pickCommand;
|
|
286
333
|
|
|
287
|
-
if (!defined(this._pickId)) {
|
|
334
|
+
if (!defined(this._pickId) || (this._id !== this.id)) {
|
|
335
|
+
this._id = this.id;
|
|
336
|
+
this._pickId = this._pickId && this._pickId.destroy();
|
|
288
337
|
this._pickId = context.createPickId({
|
|
289
|
-
primitive : this
|
|
338
|
+
primitive : this,
|
|
339
|
+
id : this.id
|
|
290
340
|
});
|
|
291
341
|
}
|
|
292
342
|
|
|
293
343
|
// Recompile shader when material changes
|
|
294
|
-
if (materialChanged || !defined(this._pickSP)) {
|
|
344
|
+
if (materialChanged || lightingChanged || !defined(this._pickSP)) {
|
|
295
345
|
var pickFS = createShaderSource({
|
|
346
|
+
defines : [
|
|
347
|
+
this.onlySunLighting ? 'ONLY_SUN_LIGHTING' : '',
|
|
348
|
+
(this._writeDepth && context.getFragmentDepth()) ? 'WRITE_DEPTH' : ''
|
|
349
|
+
],
|
|
296
350
|
sources : [this.material.shaderSource, EllipsoidFS],
|
|
297
351
|
pickColorQualifier : 'uniform'
|
|
298
352
|
});
|
|
@@ -304,7 +358,8 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/combine'
|
|
|
304
358
|
pickCommand.renderState = this._rs;
|
|
305
359
|
pickCommand.shaderProgram = this._pickSP;
|
|
306
360
|
pickCommand.uniformMap = combine([this._uniforms, this._pickUniforms, this.material._uniforms], false, false);
|
|
307
|
-
pickCommand.executeInClosestFrustum =
|
|
361
|
+
pickCommand.executeInClosestFrustum = this._executeInClosestFrustum;
|
|
362
|
+
pickCommand.owner = defaultValue(this._owner, this);
|
|
308
363
|
}
|
|
309
364
|
|
|
310
365
|
pickCommand.boundingVolume = this._boundingSphere;
|