@cesium/engine 2.1.0 → 2.3.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.
- package/Build/Workers/{AttributeCompression-8a5a065e.js → AttributeCompression-f9f6c717.js} +1 -1
- package/Build/Workers/{AxisAlignedBoundingBox-a6f9f0e5.js → AxisAlignedBoundingBox-31fadcf0.js} +1 -1
- package/Build/Workers/{BoundingRectangle-b0a68595.js → BoundingRectangle-995f0079.js} +1 -1
- package/Build/Workers/{BoxGeometry-baedd794.js → BoxGeometry-7eb1af60.js} +1 -1
- package/Build/Workers/{Color-f85df1be.js → Color-2dc49658.js} +1 -1
- package/Build/Workers/{CoplanarPolygonGeometryLibrary-30516950.js → CoplanarPolygonGeometryLibrary-d7d972d6.js} +1 -1
- package/Build/Workers/{CorridorGeometryLibrary-5d5d3b3a.js → CorridorGeometryLibrary-1f5ef7b3.js} +1 -1
- package/Build/Workers/{CylinderGeometry-d899ae26.js → CylinderGeometry-23c67a6c.js} +1 -1
- package/Build/Workers/{CylinderGeometryLibrary-135b0858.js → CylinderGeometryLibrary-7bf291b4.js} +1 -1
- package/Build/Workers/{EllipseGeometry-a49f8449.js → EllipseGeometry-37014da4.js} +1 -1
- package/Build/Workers/{EllipseGeometryLibrary-cba7edde.js → EllipseGeometryLibrary-92ab6b1e.js} +1 -1
- package/Build/Workers/{EllipseOutlineGeometry-8095c8cb.js → EllipseOutlineGeometry-12b6fef5.js} +1 -1
- package/Build/Workers/{EllipsoidGeodesic-dcff5cbd.js → EllipsoidGeodesic-5b3623dc.js} +1 -1
- package/Build/Workers/{EllipsoidGeometry-ed93f571.js → EllipsoidGeometry-508da15c.js} +1 -1
- package/Build/Workers/{EllipsoidOutlineGeometry-e4854854.js → EllipsoidOutlineGeometry-40d97455.js} +1 -1
- package/Build/Workers/{EllipsoidRhumbLine-b672d507.js → EllipsoidRhumbLine-ef872433.js} +1 -1
- package/Build/Workers/{EllipsoidTangentPlane-7ae1aa9a.js → EllipsoidTangentPlane-46d4d9c2.js} +1 -1
- package/Build/Workers/{EncodedCartesian3-e8bbca36.js → EncodedCartesian3-57415c8a.js} +1 -1
- package/Build/Workers/{FrustumGeometry-b62db3e3.js → FrustumGeometry-38605e69.js} +32 -4
- package/Build/Workers/{GeometryAttribute-780af4fa.js → GeometryAttribute-a466e9c7.js} +1 -1
- package/Build/Workers/{GeometryInstance-3fb607b7.js → GeometryInstance-34d9e21e.js} +1 -1
- package/Build/Workers/{GeometryPipeline-36b61c99.js → GeometryPipeline-dcf79306.js} +1 -1
- package/Build/Workers/{IndexDatatype-b8f3e09d.js → IndexDatatype-2643aa47.js} +1 -1
- package/Build/Workers/{IntersectionTests-e889fcf0.js → IntersectionTests-88c49b2e.js} +1 -1
- package/Build/Workers/{Math-dad82b4d.js → Math-0a2ac845.js} +12 -2
- package/Build/Workers/{Matrix2-1e403d0e.js → Matrix2-e1298525.js} +1 -1
- package/Build/Workers/{Matrix3-fa806b97.js → Matrix3-41c58dde.js} +1 -1
- package/Build/Workers/{OrientedBoundingBox-43478ac8.js → OrientedBoundingBox-2dd47921.js} +5 -3
- package/Build/Workers/{Plane-c27e1ac6.js → Plane-4c3d403b.js} +1 -1
- package/Build/Workers/{PolygonGeometryLibrary-38a98276.js → PolygonGeometryLibrary-59126025.js} +1 -1
- package/Build/Workers/PolygonPipeline-1fe328c0.js +1344 -0
- package/Build/Workers/{PolylinePipeline-30e4cec9.js → PolylinePipeline-896735cc.js} +1 -1
- package/Build/Workers/{PolylineVolumeGeometryLibrary-90551d26.js → PolylineVolumeGeometryLibrary-9c0639f7.js} +1 -1
- package/Build/Workers/{PrimitivePipeline-558d9cb0.js → PrimitivePipeline-fc1a47ff.js} +1 -1
- package/Build/Workers/{RectangleGeometryLibrary-815c68df.js → RectangleGeometryLibrary-a23c9ebe.js} +1 -1
- package/Build/Workers/{TerrainEncoding-341ead52.js → TerrainEncoding-51b8b33b.js} +1 -1
- package/Build/Workers/Transforms-bc45e707.js +14699 -0
- package/Build/Workers/{WallGeometryLibrary-ccf90976.js → WallGeometryLibrary-007e9883.js} +1 -1
- package/Build/Workers/{WebMercatorProjection-76a3fcc0.js → WebMercatorProjection-13ed1a6e.js} +1 -1
- package/Build/Workers/{arrayRemoveDuplicates-fac118a8.js → arrayRemoveDuplicates-d2061e85.js} +1 -1
- package/Build/Workers/cesiumWorkerBootstrapper.js +1 -1
- package/Build/Workers/combineGeometry.js +1 -1
- package/Build/Workers/createBoxGeometry.js +1 -1
- package/Build/Workers/createBoxOutlineGeometry.js +1 -1
- package/Build/Workers/createCircleGeometry.js +1 -1
- package/Build/Workers/createCircleOutlineGeometry.js +1 -1
- package/Build/Workers/createCoplanarPolygonGeometry.js +1 -1
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
- package/Build/Workers/createCorridorGeometry.js +1 -1
- package/Build/Workers/createCorridorOutlineGeometry.js +1 -1
- package/Build/Workers/createCylinderGeometry.js +1 -1
- package/Build/Workers/createCylinderOutlineGeometry.js +1 -1
- package/Build/Workers/createEllipseGeometry.js +1 -1
- package/Build/Workers/createEllipseOutlineGeometry.js +1 -1
- package/Build/Workers/createEllipsoidGeometry.js +1 -1
- package/Build/Workers/createEllipsoidOutlineGeometry.js +1 -1
- package/Build/Workers/createFrustumGeometry.js +1 -1
- package/Build/Workers/createFrustumOutlineGeometry.js +1 -1
- package/Build/Workers/createGeometry.js +1 -1
- package/Build/Workers/createGroundPolylineGeometry.js +1 -1
- package/Build/Workers/createPlaneGeometry.js +1 -1
- package/Build/Workers/createPlaneOutlineGeometry.js +1 -1
- package/Build/Workers/createPolygonGeometry.js +1 -1
- package/Build/Workers/createPolygonOutlineGeometry.js +1 -1
- package/Build/Workers/createPolylineGeometry.js +1 -1
- package/Build/Workers/createPolylineVolumeGeometry.js +1 -1
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
- package/Build/Workers/createRectangleGeometry.js +1 -1
- package/Build/Workers/createRectangleOutlineGeometry.js +1 -1
- package/Build/Workers/createSimplePolylineGeometry.js +1 -1
- package/Build/Workers/createSphereGeometry.js +1 -1
- package/Build/Workers/createSphereOutlineGeometry.js +1 -1
- package/Build/Workers/createVectorTileClampedPolylines.js +1 -1
- package/Build/Workers/createVectorTileGeometries.js +1 -1
- package/Build/Workers/createVectorTilePoints.js +1 -1
- package/Build/Workers/createVectorTilePolygons.js +1 -1
- package/Build/Workers/createVectorTilePolylines.js +1 -1
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
- package/Build/Workers/createVerticesFromHeightmap.js +5 -8
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +10 -15
- package/Build/Workers/createWallGeometry.js +1 -1
- package/Build/Workers/createWallOutlineGeometry.js +1 -1
- package/Build/Workers/decodeDraco.js +1 -1
- package/Build/Workers/decodeI3S.js +1 -1
- package/Build/Workers/package.js +1 -1
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +1 -1
- package/Source/Core/ArcGISTiledElevationTerrainProvider.js +291 -191
- package/Source/Core/BingMapsGeocoderService.js +19 -1
- package/Source/Core/CartographicGeocoderService.js +15 -0
- package/Source/Core/CesiumTerrainProvider.js +571 -434
- package/Source/Core/Credit.js +1 -1
- package/Source/Core/CustomHeightmapTerrainProvider.js +12 -0
- package/Source/Core/EllipsoidTerrainProvider.js +17 -10
- package/Source/Core/FrustumGeometry.js +4 -3
- package/Source/Core/GeocoderService.js +32 -1
- package/Source/Core/GoogleEarthEnterpriseMetadata.js +86 -34
- package/Source/Core/GoogleEarthEnterpriseTerrainProvider.js +119 -82
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/IonGeocoderService.js +17 -2
- package/Source/Core/IonResource.js +14 -3
- package/Source/Core/OpenCageGeocoderService.js +18 -1
- package/Source/Core/OrientedBoundingBox.js +4 -2
- package/Source/Core/OrthographicFrustum.js +13 -0
- package/Source/Core/PeliasGeocoderService.js +14 -1
- package/Source/Core/PerspectiveFrustum.js +14 -0
- package/Source/Core/Request.js +3 -2
- package/Source/Core/RequestScheduler.js +10 -5
- package/Source/Core/Resource.js +230 -236
- package/Source/Core/TerrainProvider.js +9 -14
- package/Source/Core/TileProviderError.js +8 -8
- package/Source/Core/VRTheWorldTerrainProvider.js +193 -124
- package/Source/Core/buildModuleUrl.js +4 -3
- package/Source/Core/createWorldTerrain.js +20 -2
- package/Source/Core/createWorldTerrainAsync.js +48 -0
- package/Source/Core/sampleTerrain.js +9 -10
- package/Source/Core/sampleTerrainMostDetailed.js +66 -72
- package/Source/DataSources/Cesium3DTilesetVisualizer.js +37 -26
- package/Source/DataSources/DataSourceDisplay.js +2 -2
- package/Source/DataSources/Entity.js +6 -1
- package/Source/DataSources/EntityCluster.js +126 -128
- package/Source/DataSources/ModelVisualizer.js +104 -34
- package/Source/DataSources/PolygonGraphics.js +1 -1
- package/Source/Renderer/UniformState.js +3 -2
- package/Source/Renderer/demodernizeShader.js +5 -5
- package/Source/Scene/ArcGisBaseMapType.js +12 -0
- package/Source/Scene/ArcGisMapServerImageryProvider.js +694 -376
- package/Source/Scene/ArcGisMapService.js +83 -0
- package/Source/Scene/BingMapsImageryProvider.js +511 -305
- package/Source/Scene/BufferLoader.js +29 -34
- package/Source/Scene/Camera.js +8 -7
- package/Source/Scene/Cesium3DTile.js +392 -254
- package/Source/Scene/Cesium3DTileBatchTable.js +2 -2
- package/Source/Scene/Cesium3DTileContent.js +16 -0
- package/Source/Scene/Cesium3DTileContentFactory.js +4 -4
- package/Source/Scene/Cesium3DTilePass.js +8 -11
- package/Source/Scene/Cesium3DTileStyleEngine.js +1 -1
- package/Source/Scene/Cesium3DTilesVoxelProvider.js +225 -117
- package/Source/Scene/Cesium3DTileset.js +756 -482
- package/Source/Scene/Cesium3DTilesetBaseTraversal.js +301 -0
- package/Source/Scene/Cesium3DTilesetMostDetailedTraversal.js +33 -46
- package/Source/Scene/Cesium3DTilesetSkipTraversal.js +421 -0
- package/Source/Scene/Cesium3DTilesetTraversal.js +219 -671
- package/Source/Scene/ClassificationPrimitive.js +7 -0
- package/Source/Scene/Composite3DTileContent.js +69 -26
- package/Source/Scene/CreditDisplay.js +132 -20
- package/Source/Scene/DepthPlane.js +1 -1
- package/Source/Scene/Empty3DTileContent.js +31 -1
- package/Source/Scene/Geometry3DTileContent.js +47 -7
- package/Source/Scene/Globe.js +5 -1
- package/Source/Scene/GlobeSurfaceTile.js +2 -1
- package/Source/Scene/GlobeSurfaceTileProvider.js +53 -30
- package/Source/Scene/GltfBufferViewLoader.js +47 -91
- package/Source/Scene/GltfDracoLoader.js +110 -112
- package/Source/Scene/GltfImageLoader.js +71 -78
- package/Source/Scene/GltfIndexBufferLoader.js +108 -121
- package/Source/Scene/GltfJsonLoader.js +87 -74
- package/Source/Scene/GltfLoader.js +381 -300
- package/Source/Scene/GltfStructuralMetadataLoader.js +109 -110
- package/Source/Scene/GltfTextureLoader.js +97 -96
- package/Source/Scene/GltfVertexBufferLoader.js +128 -133
- package/Source/Scene/GoogleEarthEnterpriseImageryProvider.js +353 -225
- package/Source/Scene/GoogleEarthEnterpriseMapsProvider.js +491 -331
- package/Source/Scene/GridImageryProvider.js +267 -104
- package/Source/Scene/GroundPolylinePrimitive.js +12 -1
- package/Source/Scene/GroundPrimitive.js +8 -1
- package/Source/Scene/I3SDataProvider.js +214 -113
- package/Source/Scene/I3SFeature.js +7 -6
- package/Source/Scene/I3SLayer.js +26 -37
- package/Source/Scene/I3SNode.js +59 -66
- package/Source/Scene/Imagery.js +6 -1
- package/Source/Scene/ImageryLayer.js +299 -48
- package/Source/Scene/ImageryLayerCollection.js +26 -0
- package/Source/Scene/ImageryProvider.js +129 -111
- package/Source/Scene/Implicit3DTileContent.js +72 -23
- package/Source/Scene/ImplicitSubtree.js +66 -45
- package/Source/Scene/IonImageryProvider.js +482 -275
- package/Source/Scene/MapboxImageryProvider.js +272 -112
- package/Source/Scene/MapboxStyleImageryProvider.js +270 -111
- package/Source/Scene/MetadataSchemaLoader.js +26 -36
- package/Source/Scene/Model/B3dmLoader.js +42 -46
- package/Source/Scene/Model/GeoJsonLoader.js +8 -32
- package/Source/Scene/Model/I3dmLoader.js +48 -74
- package/Source/Scene/Model/MaterialPipelineStage.js +12 -12
- package/Source/Scene/Model/Model.js +514 -135
- package/Source/Scene/Model/Model3DTileContent.js +83 -31
- package/Source/Scene/Model/ModelAnimationCollection.js +3 -3
- package/Source/Scene/Model/ModelDrawCommand.js +15 -26
- package/Source/Scene/Model/ModelUtility.js +16 -16
- package/Source/Scene/Model/PntsLoader.js +27 -32
- package/Source/Scene/Model/UniformType.js +1 -1
- package/Source/Scene/Multiple3DTileContent.js +134 -115
- package/Source/Scene/Picking.js +3 -2
- package/Source/Scene/PointCloud.js +11 -19
- package/Source/Scene/Primitive.js +20 -0
- package/Source/Scene/QuadtreePrimitive.js +5 -2
- package/Source/Scene/QuadtreeTileProvider.js +4 -8
- package/Source/Scene/ResourceCache.js +47 -105
- package/Source/Scene/ResourceCacheStatistics.js +24 -58
- package/Source/Scene/ResourceLoader.js +5 -17
- package/Source/Scene/ResourceLoaderState.js +12 -4
- package/Source/Scene/Scene.js +65 -0
- package/Source/Scene/SceneTransforms.js +3 -2
- package/Source/Scene/ScreenSpaceCameraController.js +2 -2
- package/Source/Scene/SingleTileImageryProvider.js +382 -209
- package/Source/Scene/Terrain.js +196 -0
- package/Source/Scene/TileCoordinatesImageryProvider.js +267 -104
- package/Source/Scene/TileMapServiceImageryProvider.js +177 -85
- package/Source/Scene/Tileset3DTileContent.js +47 -5
- package/Source/Scene/TimeDynamicPointCloud.js +15 -2
- package/Source/Scene/UrlTemplateImageryProvider.js +343 -215
- package/Source/Scene/Vector3DTileClampedPolylines.js +96 -84
- package/Source/Scene/Vector3DTileContent.js +47 -22
- package/Source/Scene/Vector3DTileGeometry.js +57 -52
- package/Source/Scene/Vector3DTilePoints.js +97 -81
- package/Source/Scene/Vector3DTilePolygons.js +118 -117
- package/Source/Scene/Vector3DTilePolylines.js +86 -82
- package/Source/Scene/Vector3DTilePrimitive.js +0 -1
- package/Source/Scene/VoxelContent.js +61 -63
- package/Source/Scene/VoxelPrimitive.js +39 -91
- package/Source/Scene/VoxelProvider.js +2 -2
- package/Source/Scene/WebMapServiceImageryProvider.js +272 -111
- package/Source/Scene/WebMapTileServiceImageryProvider.js +270 -107
- package/Source/Scene/computeFlyToLocationForRectangle.js +33 -37
- package/Source/Scene/createOsmBuildings.js +6 -0
- package/Source/Scene/createOsmBuildingsAsync.js +82 -0
- package/Source/Scene/createWorldImagery.js +14 -5
- package/Source/Scene/createWorldImageryAsync.js +39 -0
- package/Source/Shaders/AtmosphereCommon.glsl +51 -8
- package/Source/Shaders/AtmosphereCommon.js +51 -8
- package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl +1 -1
- package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.js +1 -1
- package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.glsl +3 -3
- package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.js +3 -3
- package/Source/Widget/CesiumWidget.js +67 -27
- package/index.d.ts +2429 -1475
- package/index.js +324 -315
- package/package.json +4 -4
- package/Build/Workers/PolygonPipeline-d31ff61c.js +0 -1345
- package/Build/Workers/Transforms-9e9df299.js +0 -14714
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import defined from "../Core/defined.js";
|
|
2
|
+
import ManagedArray from "../Core/ManagedArray.js";
|
|
3
|
+
import Cesium3DTileRefine from "./Cesium3DTileRefine.js";
|
|
4
|
+
import Cesium3DTilesetTraversal from "./Cesium3DTilesetTraversal.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Depth-first traversal that traverses all visible tiles and marks tiles for selection.
|
|
8
|
+
* A tile does not refine until all children are loaded.
|
|
9
|
+
* This is the traditional replacement refinement approach and is called the base traversal.
|
|
10
|
+
*
|
|
11
|
+
* @alias Cesium3DTilesetBaseTraversal
|
|
12
|
+
* @constructor
|
|
13
|
+
*
|
|
14
|
+
* @private
|
|
15
|
+
*/
|
|
16
|
+
function Cesium3DTilesetBaseTraversal() {}
|
|
17
|
+
|
|
18
|
+
const traversal = {
|
|
19
|
+
stack: new ManagedArray(),
|
|
20
|
+
stackMaximumLength: 0,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const emptyTraversal = {
|
|
24
|
+
stack: new ManagedArray(),
|
|
25
|
+
stackMaximumLength: 0,
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Traverses a {@link Cesium3DTileset} to determine which tiles to load and render.
|
|
30
|
+
*
|
|
31
|
+
* @private
|
|
32
|
+
* @param {Cesium3DTileset} tileset
|
|
33
|
+
* @param {FrameState} frameState
|
|
34
|
+
*/
|
|
35
|
+
Cesium3DTilesetBaseTraversal.selectTiles = function (tileset, frameState) {
|
|
36
|
+
tileset._requestedTiles.length = 0;
|
|
37
|
+
|
|
38
|
+
if (tileset.debugFreezeFrame) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
tileset._selectedTiles.length = 0;
|
|
43
|
+
tileset._selectedTilesToStyle.length = 0;
|
|
44
|
+
tileset._emptyTiles.length = 0;
|
|
45
|
+
tileset.hasMixedContent = false;
|
|
46
|
+
|
|
47
|
+
const root = tileset.root;
|
|
48
|
+
Cesium3DTilesetTraversal.updateTile(root, frameState);
|
|
49
|
+
|
|
50
|
+
if (!root.isVisible) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (
|
|
55
|
+
root.getScreenSpaceError(frameState, true) <=
|
|
56
|
+
tileset._maximumScreenSpaceError
|
|
57
|
+
) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
executeTraversal(root, frameState);
|
|
62
|
+
|
|
63
|
+
traversal.stack.trim(traversal.stackMaximumLength);
|
|
64
|
+
emptyTraversal.stack.trim(emptyTraversal.stackMaximumLength);
|
|
65
|
+
|
|
66
|
+
// Update the priority for any requests found during traversal
|
|
67
|
+
// Update after traversal so that min and max values can be used to normalize priority values
|
|
68
|
+
const requestedTiles = tileset._requestedTiles;
|
|
69
|
+
for (let i = 0; i < requestedTiles.length; ++i) {
|
|
70
|
+
requestedTiles[i].updatePriority();
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Mark a tile as selected if it has content available.
|
|
76
|
+
*
|
|
77
|
+
* @private
|
|
78
|
+
* @param {Cesium3DTile} tile
|
|
79
|
+
* @param {FrameState} frameState
|
|
80
|
+
*/
|
|
81
|
+
function selectDesiredTile(tile, frameState) {
|
|
82
|
+
if (tile.contentAvailable) {
|
|
83
|
+
Cesium3DTilesetTraversal.selectTile(tile, frameState);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @private
|
|
89
|
+
* @param {Cesium3DTile} tile
|
|
90
|
+
* @param {ManagedArray} stack
|
|
91
|
+
* @param {FrameState} frameState
|
|
92
|
+
* @returns {boolean}
|
|
93
|
+
*/
|
|
94
|
+
function updateAndPushChildren(tile, stack, frameState) {
|
|
95
|
+
const replace = tile.refine === Cesium3DTileRefine.REPLACE;
|
|
96
|
+
const { tileset, children } = tile;
|
|
97
|
+
const { updateTile, loadTile, touchTile } = Cesium3DTilesetTraversal;
|
|
98
|
+
|
|
99
|
+
for (let i = 0; i < children.length; ++i) {
|
|
100
|
+
updateTile(children[i], frameState);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Sort by distance to take advantage of early Z and reduce artifacts for skipLevelOfDetail
|
|
104
|
+
children.sort(Cesium3DTilesetTraversal.sortChildrenByDistanceToCamera);
|
|
105
|
+
|
|
106
|
+
// For traditional replacement refinement only refine if all children are loaded.
|
|
107
|
+
// Empty tiles are exempt since it looks better if children stream in as they are loaded to fill the empty space.
|
|
108
|
+
const checkRefines = replace && tile.hasRenderableContent;
|
|
109
|
+
let refines = true;
|
|
110
|
+
|
|
111
|
+
let anyChildrenVisible = false;
|
|
112
|
+
|
|
113
|
+
// Determining min child
|
|
114
|
+
let minIndex = -1;
|
|
115
|
+
let minimumPriority = Number.MAX_VALUE;
|
|
116
|
+
|
|
117
|
+
for (let i = 0; i < children.length; ++i) {
|
|
118
|
+
const child = children[i];
|
|
119
|
+
if (child.isVisible) {
|
|
120
|
+
stack.push(child);
|
|
121
|
+
if (child._foveatedFactor < minimumPriority) {
|
|
122
|
+
minIndex = i;
|
|
123
|
+
minimumPriority = child._foveatedFactor;
|
|
124
|
+
}
|
|
125
|
+
anyChildrenVisible = true;
|
|
126
|
+
} else if (checkRefines || tileset.loadSiblings) {
|
|
127
|
+
// Keep non-visible children loaded since they are still needed before the parent can refine.
|
|
128
|
+
// Or loadSiblings is true so always load tiles regardless of visibility.
|
|
129
|
+
if (child._foveatedFactor < minimumPriority) {
|
|
130
|
+
minIndex = i;
|
|
131
|
+
minimumPriority = child._foveatedFactor;
|
|
132
|
+
}
|
|
133
|
+
loadTile(child, frameState);
|
|
134
|
+
touchTile(child, frameState);
|
|
135
|
+
}
|
|
136
|
+
if (checkRefines) {
|
|
137
|
+
let childRefines;
|
|
138
|
+
if (!child._inRequestVolume) {
|
|
139
|
+
childRefines = false;
|
|
140
|
+
} else if (!child.hasRenderableContent) {
|
|
141
|
+
childRefines = executeEmptyTraversal(child, frameState);
|
|
142
|
+
} else {
|
|
143
|
+
childRefines = child.contentAvailable;
|
|
144
|
+
}
|
|
145
|
+
refines = refines && childRefines;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (!anyChildrenVisible) {
|
|
150
|
+
refines = false;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (minIndex !== -1 && replace) {
|
|
154
|
+
// An ancestor will hold the _foveatedFactor and _distanceToCamera for descendants between itself and its highest priority descendant. Siblings of a min children along the way use this ancestor as their priority holder as well.
|
|
155
|
+
// Priority of all tiles that refer to the _foveatedFactor and _distanceToCamera stored in the common ancestor will be differentiated based on their _depth.
|
|
156
|
+
const minPriorityChild = children[minIndex];
|
|
157
|
+
minPriorityChild._wasMinPriorityChild = true;
|
|
158
|
+
const priorityHolder =
|
|
159
|
+
(tile._wasMinPriorityChild || tile === tileset.root) &&
|
|
160
|
+
minimumPriority <= tile._priorityHolder._foveatedFactor
|
|
161
|
+
? tile._priorityHolder
|
|
162
|
+
: tile; // This is where priority dependency chains are wired up or started anew.
|
|
163
|
+
priorityHolder._foveatedFactor = Math.min(
|
|
164
|
+
minPriorityChild._foveatedFactor,
|
|
165
|
+
priorityHolder._foveatedFactor
|
|
166
|
+
);
|
|
167
|
+
priorityHolder._distanceToCamera = Math.min(
|
|
168
|
+
minPriorityChild._distanceToCamera,
|
|
169
|
+
priorityHolder._distanceToCamera
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
for (let i = 0; i < children.length; ++i) {
|
|
173
|
+
children[i]._priorityHolder = priorityHolder;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return refines;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Depth-first traversal that traverses all visible tiles and marks tiles for selection.
|
|
182
|
+
* A tile does not refine until all children are loaded.
|
|
183
|
+
* This is the traditional replacement refinement approach and is called the base traversal.
|
|
184
|
+
*
|
|
185
|
+
* @private
|
|
186
|
+
* @param {Cesium3DTile} root
|
|
187
|
+
* @param {FrameState} frameState
|
|
188
|
+
*/
|
|
189
|
+
function executeTraversal(root, frameState) {
|
|
190
|
+
const { tileset } = root;
|
|
191
|
+
|
|
192
|
+
const {
|
|
193
|
+
canTraverse,
|
|
194
|
+
loadTile,
|
|
195
|
+
visitTile,
|
|
196
|
+
touchTile,
|
|
197
|
+
} = Cesium3DTilesetTraversal;
|
|
198
|
+
const stack = traversal.stack;
|
|
199
|
+
stack.push(root);
|
|
200
|
+
|
|
201
|
+
while (stack.length > 0) {
|
|
202
|
+
traversal.stackMaximumLength = Math.max(
|
|
203
|
+
traversal.stackMaximumLength,
|
|
204
|
+
stack.length
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
const tile = stack.pop();
|
|
208
|
+
|
|
209
|
+
const parent = tile.parent;
|
|
210
|
+
const parentRefines = !defined(parent) || parent._refines;
|
|
211
|
+
|
|
212
|
+
tile._refines = canTraverse(tile)
|
|
213
|
+
? updateAndPushChildren(tile, stack, frameState) && parentRefines
|
|
214
|
+
: false;
|
|
215
|
+
|
|
216
|
+
const stoppedRefining = !tile._refines && parentRefines;
|
|
217
|
+
|
|
218
|
+
if (!tile.hasRenderableContent) {
|
|
219
|
+
// Add empty tile just to show its debug bounding volume
|
|
220
|
+
// If the tile has tileset content load the external tileset
|
|
221
|
+
tileset._emptyTiles.push(tile);
|
|
222
|
+
loadTile(tile, frameState);
|
|
223
|
+
if (stoppedRefining) {
|
|
224
|
+
selectDesiredTile(tile, frameState);
|
|
225
|
+
}
|
|
226
|
+
} else if (tile.refine === Cesium3DTileRefine.ADD) {
|
|
227
|
+
// Additive tiles are always loaded and selected
|
|
228
|
+
selectDesiredTile(tile, frameState);
|
|
229
|
+
loadTile(tile, frameState);
|
|
230
|
+
} else if (tile.refine === Cesium3DTileRefine.REPLACE) {
|
|
231
|
+
loadTile(tile, frameState);
|
|
232
|
+
if (stoppedRefining) {
|
|
233
|
+
selectDesiredTile(tile, frameState);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
visitTile(tile, frameState);
|
|
238
|
+
touchTile(tile, frameState);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Depth-first traversal that checks if all nearest descendants with content are loaded.
|
|
244
|
+
* Ignores visibility.
|
|
245
|
+
*
|
|
246
|
+
* @private
|
|
247
|
+
* @param {Cesium3DTile} root
|
|
248
|
+
* @param {FrameState} frameState
|
|
249
|
+
* @returns {boolean}
|
|
250
|
+
*/
|
|
251
|
+
function executeEmptyTraversal(root, frameState) {
|
|
252
|
+
const {
|
|
253
|
+
canTraverse,
|
|
254
|
+
updateTile,
|
|
255
|
+
loadTile,
|
|
256
|
+
touchTile,
|
|
257
|
+
} = Cesium3DTilesetTraversal;
|
|
258
|
+
let allDescendantsLoaded = true;
|
|
259
|
+
const stack = emptyTraversal.stack;
|
|
260
|
+
stack.push(root);
|
|
261
|
+
|
|
262
|
+
while (stack.length > 0) {
|
|
263
|
+
emptyTraversal.stackMaximumLength = Math.max(
|
|
264
|
+
emptyTraversal.stackMaximumLength,
|
|
265
|
+
stack.length
|
|
266
|
+
);
|
|
267
|
+
|
|
268
|
+
const tile = stack.pop();
|
|
269
|
+
const children = tile.children;
|
|
270
|
+
const childrenLength = children.length;
|
|
271
|
+
|
|
272
|
+
// Only traverse if the tile is empty - traversal stops at descendants with content
|
|
273
|
+
const traverse = !tile.hasRenderableContent && canTraverse(tile);
|
|
274
|
+
const emptyLeaf = !tile.hasRenderableContent && tile.children.length === 0;
|
|
275
|
+
|
|
276
|
+
// Traversal stops but the tile does not have content yet
|
|
277
|
+
// There will be holes if the parent tries to refine to its children, so don't refine
|
|
278
|
+
// One exception: a parent may refine even if one of its descendants is an empty leaf
|
|
279
|
+
if (!traverse && !tile.contentAvailable && !emptyLeaf) {
|
|
280
|
+
allDescendantsLoaded = false;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
updateTile(tile, frameState);
|
|
284
|
+
if (!tile.isVisible) {
|
|
285
|
+
// Load tiles that aren't visible since they are still needed for the parent to refine
|
|
286
|
+
loadTile(tile, frameState);
|
|
287
|
+
touchTile(tile, frameState);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if (traverse) {
|
|
291
|
+
for (let i = 0; i < childrenLength; ++i) {
|
|
292
|
+
const child = children[i];
|
|
293
|
+
stack.push(child);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
return allDescendantsLoaded;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
export default Cesium3DTilesetBaseTraversal;
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import Intersect from "../Core/Intersect.js";
|
|
2
2
|
import ManagedArray from "../Core/ManagedArray.js";
|
|
3
3
|
import Cesium3DTileRefine from "./Cesium3DTileRefine.js";
|
|
4
|
+
import Cesium3DTilesetTraversal from "./Cesium3DTilesetTraversal.js";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Traversal that loads all leaves that intersect the camera frustum.
|
|
7
8
|
* Used to determine ray-tileset intersections during a pickFromRayMostDetailed call.
|
|
8
9
|
*
|
|
10
|
+
* @alias Cesium3DTilesetMostDetailedTraversal
|
|
11
|
+
* @constructor
|
|
12
|
+
*
|
|
9
13
|
* @private
|
|
10
14
|
*/
|
|
11
15
|
function Cesium3DTilesetMostDetailedTraversal() {}
|
|
@@ -15,25 +19,35 @@ const traversal = {
|
|
|
15
19
|
stackMaximumLength: 0,
|
|
16
20
|
};
|
|
17
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Traverses a {@link Cesium3DTileset} to determine which tiles to load and render.
|
|
24
|
+
*
|
|
25
|
+
* @private
|
|
26
|
+
* @param {Cesium3DTileset} tileset
|
|
27
|
+
* @param {FrameState} frameState
|
|
28
|
+
* @returns {boolean} Whether the appropriate tile is ready for picking
|
|
29
|
+
*/
|
|
18
30
|
Cesium3DTilesetMostDetailedTraversal.selectTiles = function (
|
|
19
31
|
tileset,
|
|
20
32
|
frameState
|
|
21
33
|
) {
|
|
22
34
|
tileset._selectedTiles.length = 0;
|
|
23
35
|
tileset._requestedTiles.length = 0;
|
|
24
|
-
tileset.
|
|
36
|
+
tileset.hasMixedContent = false;
|
|
25
37
|
|
|
26
38
|
let ready = true;
|
|
27
39
|
|
|
28
40
|
const root = tileset.root;
|
|
29
41
|
root.updateVisibility(frameState);
|
|
30
42
|
|
|
31
|
-
if (!isVisible
|
|
43
|
+
if (!root.isVisible) {
|
|
32
44
|
return ready;
|
|
33
45
|
}
|
|
34
46
|
|
|
47
|
+
const { touchTile, visitTile } = Cesium3DTilesetTraversal;
|
|
48
|
+
|
|
35
49
|
const stack = traversal.stack;
|
|
36
|
-
stack.push(
|
|
50
|
+
stack.push(root);
|
|
37
51
|
|
|
38
52
|
while (stack.length > 0) {
|
|
39
53
|
traversal.stackMaximumLength = Math.max(
|
|
@@ -44,23 +58,23 @@ Cesium3DTilesetMostDetailedTraversal.selectTiles = function (
|
|
|
44
58
|
const tile = stack.pop();
|
|
45
59
|
const add = tile.refine === Cesium3DTileRefine.ADD;
|
|
46
60
|
const replace = tile.refine === Cesium3DTileRefine.REPLACE;
|
|
47
|
-
const traverse = canTraverse(
|
|
61
|
+
const traverse = canTraverse(tile);
|
|
48
62
|
|
|
49
63
|
if (traverse) {
|
|
50
|
-
updateAndPushChildren(
|
|
64
|
+
updateAndPushChildren(tile, stack, frameState);
|
|
51
65
|
}
|
|
52
66
|
|
|
53
67
|
if (add || (replace && !traverse)) {
|
|
54
68
|
loadTile(tileset, tile);
|
|
55
|
-
touchTile(
|
|
56
|
-
selectDesiredTile(
|
|
69
|
+
touchTile(tile, frameState);
|
|
70
|
+
selectDesiredTile(tile, frameState);
|
|
57
71
|
|
|
58
|
-
if (
|
|
72
|
+
if (tile.hasRenderableContent && !tile.contentAvailable) {
|
|
59
73
|
ready = false;
|
|
60
74
|
}
|
|
61
75
|
}
|
|
62
76
|
|
|
63
|
-
visitTile(
|
|
77
|
+
visitTile(tile, frameState);
|
|
64
78
|
}
|
|
65
79
|
|
|
66
80
|
traversal.stack.trim(traversal.stackMaximumLength);
|
|
@@ -68,21 +82,7 @@ Cesium3DTilesetMostDetailedTraversal.selectTiles = function (
|
|
|
68
82
|
return ready;
|
|
69
83
|
};
|
|
70
84
|
|
|
71
|
-
function
|
|
72
|
-
return tile._visible && tile._inRequestVolume;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function hasEmptyContent(tile) {
|
|
76
|
-
return (
|
|
77
|
-
tile.hasEmptyContent || tile.hasTilesetContent || tile.hasImplicitContent
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function hasUnloadedContent(tile) {
|
|
82
|
-
return !hasEmptyContent(tile) && tile.contentUnloaded;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function canTraverse(tileset, tile) {
|
|
85
|
+
function canTraverse(tile) {
|
|
86
86
|
if (tile.children.length === 0) {
|
|
87
87
|
return false;
|
|
88
88
|
}
|
|
@@ -97,48 +97,35 @@ function canTraverse(tileset, tile) {
|
|
|
97
97
|
return true;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
return true; // Keep traversing until a
|
|
100
|
+
return true; // Keep traversing until a leaf is hit
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
function updateAndPushChildren(
|
|
104
|
-
const children = tile
|
|
105
|
-
const length = children.length;
|
|
103
|
+
function updateAndPushChildren(tile, stack, frameState) {
|
|
104
|
+
const { children } = tile;
|
|
106
105
|
|
|
107
|
-
for (let i = 0; i < length; ++i) {
|
|
106
|
+
for (let i = 0; i < children.length; ++i) {
|
|
108
107
|
const child = children[i];
|
|
109
108
|
child.updateVisibility(frameState);
|
|
110
|
-
if (isVisible
|
|
109
|
+
if (child.isVisible) {
|
|
111
110
|
stack.push(child);
|
|
112
111
|
}
|
|
113
112
|
}
|
|
114
113
|
}
|
|
115
114
|
|
|
116
115
|
function loadTile(tileset, tile) {
|
|
117
|
-
if (
|
|
116
|
+
if (tile.hasUnloadedRenderableContent || tile.contentExpired) {
|
|
118
117
|
tile._priority = 0.0; // Highest priority
|
|
119
118
|
tileset._requestedTiles.push(tile);
|
|
120
119
|
}
|
|
121
120
|
}
|
|
122
121
|
|
|
123
|
-
function
|
|
124
|
-
if (tile._touchedFrame === frameState.frameNumber) {
|
|
125
|
-
// Prevents another pass from touching the frame again
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
tileset._cache.touch(tile);
|
|
129
|
-
tile._touchedFrame = frameState.frameNumber;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function visitTile(tileset) {
|
|
133
|
-
++tileset.statistics.visited;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
function selectDesiredTile(tileset, tile, frameState) {
|
|
122
|
+
function selectDesiredTile(tile, frameState) {
|
|
137
123
|
if (
|
|
138
124
|
tile.contentAvailable &&
|
|
139
125
|
tile.contentVisibility(frameState) !== Intersect.OUTSIDE
|
|
140
126
|
) {
|
|
141
|
-
tileset._selectedTiles.push(tile);
|
|
127
|
+
tile.tileset._selectedTiles.push(tile);
|
|
142
128
|
}
|
|
143
129
|
}
|
|
130
|
+
|
|
144
131
|
export default Cesium3DTilesetMostDetailedTraversal;
|