@cesium/engine 0.1.0 → 1.1.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-4589338a.js → AttributeCompression-b646d393.js} +1 -1
- package/Build/Workers/{AxisAlignedBoundingBox-bfb1234f.js → AxisAlignedBoundingBox-a4321399.js} +1 -1
- package/Build/Workers/{BoundingRectangle-7ffc2153.js → BoundingRectangle-80d8801f.js} +1 -1
- package/Build/Workers/{BoxGeometry-93f344a3.js → BoxGeometry-33c10a4f.js} +1 -1
- package/Build/Workers/{Color-0c5aaf47.js → Color-1bf9a6e0.js} +1 -1
- package/Build/Workers/{CoplanarPolygonGeometryLibrary-6597982a.js → CoplanarPolygonGeometryLibrary-5c5b981b.js} +1 -1
- package/Build/Workers/{CorridorGeometryLibrary-2119580e.js → CorridorGeometryLibrary-7cbae7a0.js} +1 -1
- package/Build/Workers/{CylinderGeometry-f9503c6d.js → CylinderGeometry-42740df0.js} +1 -1
- package/Build/Workers/{EllipseGeometry-fedf72d5.js → EllipseGeometry-49a3ac21.js} +1 -1
- package/Build/Workers/{EllipseGeometryLibrary-4ea68687.js → EllipseGeometryLibrary-b891b2f8.js} +1 -1
- package/Build/Workers/{EllipseOutlineGeometry-e2ae6a35.js → EllipseOutlineGeometry-fbd72e07.js} +1 -1
- package/Build/Workers/{EllipsoidGeodesic-16de63ea.js → EllipsoidGeodesic-98c62a56.js} +1 -1
- package/Build/Workers/{EllipsoidGeometry-95c0330e.js → EllipsoidGeometry-a351dba8.js} +1 -1
- package/Build/Workers/{EllipsoidOutlineGeometry-d6d2ceec.js → EllipsoidOutlineGeometry-3e8779bf.js} +1 -1
- package/Build/Workers/{EllipsoidRhumbLine-ae5e65e0.js → EllipsoidRhumbLine-19756602.js} +1 -1
- package/Build/Workers/{EllipsoidTangentPlane-bfc674bf.js → EllipsoidTangentPlane-cfb50678.js} +1 -1
- package/Build/Workers/{EncodedCartesian3-f473ea18.js → EncodedCartesian3-81f70735.js} +1 -1
- package/Build/Workers/{FrustumGeometry-3bf2e4eb.js → FrustumGeometry-c5754412.js} +1 -1
- package/Build/Workers/{GeometryAttribute-df5f473e.js → GeometryAttribute-0bfd05e8.js} +1 -1
- package/Build/Workers/{GeometryInstance-aa75b4cf.js → GeometryInstance-451dc1cd.js} +1 -1
- package/Build/Workers/{GeometryPipeline-f0e46c42.js → GeometryPipeline-0166905d.js} +1 -1
- package/Build/Workers/{IntersectionTests-9de29d51.js → IntersectionTests-a93d3de9.js} +1 -1
- package/Build/Workers/{Matrix2-ce637455.js → Matrix2-13178034.js} +4 -2
- package/Build/Workers/{Matrix3-4f4df527.js → Matrix3-315394f6.js} +2 -1
- package/Build/Workers/{OrientedBoundingBox-d3ff3d4d.js → OrientedBoundingBox-b450cb61.js} +5 -5
- package/Build/Workers/{Plane-b81241c2.js → Plane-900aa728.js} +1 -1
- package/Build/Workers/{PolygonGeometryLibrary-6f4937bb.js → PolygonGeometryLibrary-f918ac26.js} +1 -1
- package/Build/Workers/PolygonPipeline-f59a8f0a.js +1345 -0
- package/Build/Workers/{PolylinePipeline-2e2b015c.js → PolylinePipeline-d8e6bd9b.js} +1 -1
- package/Build/Workers/{PolylineVolumeGeometryLibrary-7ee1d449.js → PolylineVolumeGeometryLibrary-125d2edf.js} +1 -1
- package/Build/Workers/{PrimitivePipeline-a9b7aae0.js → PrimitivePipeline-0d7b5ed4.js} +1 -1
- package/Build/Workers/{RectangleGeometryLibrary-9aa6c8f6.js → RectangleGeometryLibrary-0768db63.js} +1 -1
- package/Build/Workers/{TerrainEncoding-b52dcfc5.js → TerrainEncoding-06470d7f.js} +1 -1
- package/Build/Workers/{Transforms-2f755df8.js → Transforms-26539bce.js} +97 -83
- package/Build/Workers/{WallGeometryLibrary-ab19a93d.js → WallGeometryLibrary-6167b0fc.js} +1 -1
- package/Build/Workers/{WebMercatorProjection-9f25de49.js → WebMercatorProjection-13a90d41.js} +1 -1
- package/Build/Workers/cesiumWorkerBootstrapper.js +25 -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 +7 -3
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +1 -1
- package/Build/Workers/createWallGeometry.js +1 -1
- package/Build/Workers/createWallOutlineGeometry.js +1 -1
- package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +95 -76
- package/Build/Workers/decodeI3S.js +1 -1
- package/Build/Workers/package.js +25 -1
- package/Build/Workers/transferTypedArrayTest.js +25 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +1 -1
- package/README.md +9 -9
- package/Source/Core/EarthOrientationParameters.js +67 -63
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/Matrix2.js +2 -1
- package/Source/Core/Matrix3.js +2 -1
- package/Source/Core/Matrix4.js +1 -0
- package/Source/Core/OrientedBoundingBox.js +4 -4
- package/Source/Core/S2Cell.js +3 -3
- package/Source/Core/Transforms.js +3 -7
- package/Source/DataSources/GpxDataSource.js +4 -6
- package/Source/DataSources/KmlDataSource.js +3 -5
- package/Source/Renderer/Context.js +230 -177
- package/Source/Renderer/Pass.js +3 -2
- package/Source/Scene/Cesium3DTileContentType.js +19 -0
- package/Source/Scene/Cesium3DTilesVoxelProvider.js +482 -0
- package/Source/Scene/Cesium3DTilesetMetadata.js +2 -2
- package/Source/Scene/ContentMetadata.js +2 -2
- package/Source/Scene/DerivedCommand.js +7 -0
- package/Source/Scene/Expression.js +1 -1
- package/Source/Scene/Globe.js +10 -0
- package/Source/Scene/GlobeSurfaceTileProvider.js +7 -0
- package/Source/Scene/GltfImageLoader.js +1 -1
- package/Source/Scene/GltfVertexBufferLoader.js +10 -2
- package/Source/Scene/GroupMetadata.js +2 -2
- package/Source/Scene/I3SDataProvider.js +2 -1
- package/Source/Scene/I3SFeature.js +1 -1
- package/Source/Scene/I3SLayer.js +64 -2
- package/Source/Scene/I3SNode.js +50 -6
- package/Source/Scene/ImplicitMetadataView.js +2 -2
- package/Source/Scene/ImplicitSubtreeCache.js +127 -0
- package/Source/Scene/ImplicitSubtreeMetadata.js +2 -2
- package/Source/Scene/ImplicitTileset.js +3 -2
- package/Source/Scene/KeyframeNode.js +47 -0
- package/Source/Scene/Megatexture.js +490 -0
- package/Source/Scene/MetadataClass.js +60 -25
- package/Source/Scene/MetadataClassProperty.js +132 -68
- package/Source/Scene/MetadataComponentType.js +78 -57
- package/Source/Scene/MetadataEnum.js +59 -23
- package/Source/Scene/MetadataEnumValue.js +49 -15
- package/Source/Scene/MetadataSchema.js +53 -24
- package/Source/Scene/MetadataSchemaLoader.js +2 -2
- package/Source/Scene/MetadataTableProperty.js +2 -2
- package/Source/Scene/MetadataType.js +6 -14
- package/Source/Scene/Model/GeoJsonLoader.js +1 -1
- package/Source/Scene/Model/Model.js +38 -6
- package/Source/Scene/Model/buildDrawCommand.js +19 -11
- package/Source/Scene/PointCloud.js +1 -1
- package/Source/Scene/PropertyAttribute.js +2 -2
- package/Source/Scene/PropertyAttributeProperty.js +2 -2
- package/Source/Scene/PropertyTable.js +2 -2
- package/Source/Scene/PropertyTexture.js +2 -2
- package/Source/Scene/PropertyTextureProperty.js +2 -2
- package/Source/Scene/ResourceCache.js +9 -1
- package/Source/Scene/ResourceCacheKey.js +9 -1
- package/Source/Scene/Scene.js +20 -50
- package/Source/Scene/SpatialNode.js +375 -0
- package/Source/Scene/StructuralMetadata.js +2 -2
- package/Source/Scene/TileMetadata.js +2 -2
- package/Source/Scene/TilesetMetadata.js +2 -2
- package/Source/Scene/VoxelBoxShape.js +527 -0
- package/Source/Scene/VoxelContent.js +169 -0
- package/Source/Scene/VoxelCylinderShape.js +937 -0
- package/Source/Scene/VoxelEllipsoidShape.js +937 -0
- package/Source/Scene/VoxelPrimitive.js +1919 -0
- package/Source/Scene/VoxelProvider.js +255 -0
- package/Source/Scene/VoxelRenderResources.js +224 -0
- package/Source/Scene/VoxelShape.js +152 -0
- package/Source/Scene/VoxelShapeType.js +105 -0
- package/Source/Scene/VoxelTraversal.js +1144 -0
- package/Source/Scene/buildVoxelDrawCommands.js +116 -0
- package/Source/Scene/parseBatchTable.js +18 -2
- package/Source/Scene/preprocess3DTileContent.js +8 -0
- package/Source/Scene/processVoxelProperties.js +455 -0
- package/Source/Shaders/BillboardCollectionVS.glsl +1 -1
- package/Source/Shaders/BillboardCollectionVS.js +1 -1
- package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
- package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
- package/Source/Shaders/Builtin/Constants/passVoxels.glsl +9 -0
- package/Source/Shaders/Builtin/Constants/passVoxels.js +11 -0
- package/Source/Shaders/Builtin/CzmBuiltins.js +2 -0
- package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.glsl +55 -43
- package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.js +55 -43
- package/Source/Shaders/GlobeFS.glsl +2 -1
- package/Source/Shaders/GlobeFS.js +2 -1
- package/Source/Shaders/PointPrimitiveCollectionVS.glsl +5 -2
- package/Source/Shaders/PointPrimitiveCollectionVS.js +5 -2
- package/Source/Shaders/Voxels/IntersectBox.glsl +79 -0
- package/Source/Shaders/Voxels/IntersectBox.js +81 -0
- package/Source/Shaders/Voxels/IntersectClippingPlanes.glsl +70 -0
- package/Source/Shaders/Voxels/IntersectClippingPlanes.js +72 -0
- package/Source/Shaders/Voxels/IntersectCylinder.glsl +273 -0
- package/Source/Shaders/Voxels/IntersectCylinder.js +275 -0
- package/Source/Shaders/Voxels/IntersectDepth.glsl +23 -0
- package/Source/Shaders/Voxels/IntersectDepth.js +25 -0
- package/Source/Shaders/Voxels/IntersectEllipsoid.glsl +337 -0
- package/Source/Shaders/Voxels/IntersectEllipsoid.js +339 -0
- package/Source/Shaders/Voxels/Intersection.glsl +54 -0
- package/Source/Shaders/Voxels/Intersection.js +56 -0
- package/Source/Shaders/Voxels/IntersectionUtils.glsl +151 -0
- package/Source/Shaders/Voxels/IntersectionUtils.js +153 -0
- package/Source/Shaders/Voxels/Megatexture.glsl +136 -0
- package/Source/Shaders/Voxels/Megatexture.js +138 -0
- package/Source/Shaders/Voxels/Octree.glsl +221 -0
- package/Source/Shaders/Voxels/Octree.js +223 -0
- package/Source/Shaders/Voxels/VoxelFS.glsl +150 -0
- package/Source/Shaders/Voxels/VoxelFS.js +152 -0
- package/Source/Shaders/Voxels/VoxelVS.glsl +11 -0
- package/Source/Shaders/Voxels/VoxelVS.js +13 -0
- package/Source/Shaders/Voxels/convertUvToBox.glsl +16 -0
- package/Source/Shaders/Voxels/convertUvToBox.js +18 -0
- package/Source/Shaders/Voxels/convertUvToCylinder.glsl +79 -0
- package/Source/Shaders/Voxels/convertUvToCylinder.js +81 -0
- package/Source/Shaders/Voxels/convertUvToEllipsoid.glsl +133 -0
- package/Source/Shaders/Voxels/convertUvToEllipsoid.js +135 -0
- package/Source/ThirdParty/Workers/draco_decoder_nodejs.js +100 -101
- package/Source/ThirdParty/Workers/pako_deflate.min.js +2 -2
- package/Source/ThirdParty/Workers/pako_inflate.min.js +2 -2
- package/Source/ThirdParty/draco_decoder.wasm +0 -0
- package/Source/Widget/CesiumWidget.js +1 -1
- package/index.d.ts +961 -56
- package/index.js +92 -60
- package/package.json +6 -4
- package/Build/ThirdParty/Workers/basis_transcoder.js +0 -2233
- package/Build/ThirdParty/Workers/draco_decoder_nodejs.js +0 -1872
- package/Build/ThirdParty/Workers/package.json +0 -1
- package/Build/ThirdParty/Workers/pako_deflate.min.js +0 -589
- package/Build/ThirdParty/Workers/pako_inflate.min.js +0 -798
- package/Build/ThirdParty/Workers/z-worker-pako.js +0 -503
- package/Build/ThirdParty/basis_transcoder.wasm +0 -0
- package/Build/ThirdParty/draco_decoder.wasm +0 -0
- package/Build/ThirdParty/google-earth-dbroot-parser.js +0 -8019
- package/Build/Widget/CesiumWidget.css +0 -120
- package/Build/Widget/lighter.css +0 -13
- package/Build/Workers/PolygonPipeline-774a8aaf.js +0 -1341
package/Source/Scene/Scene.js
CHANGED
|
@@ -81,50 +81,13 @@ const requestRenderAfterFrame = function (scene) {
|
|
|
81
81
|
/**
|
|
82
82
|
* The container for all 3D graphical objects and state in a Cesium virtual scene. Generally,
|
|
83
83
|
* a scene is not created directly; instead, it is implicitly created by {@link CesiumWidget}.
|
|
84
|
-
* <p>
|
|
85
|
-
* <em><code>contextOptions</code> parameter details:</em>
|
|
86
|
-
* </p>
|
|
87
|
-
* <p>
|
|
88
|
-
* The default values are:
|
|
89
|
-
* <code>
|
|
90
|
-
* {
|
|
91
|
-
* webgl : {
|
|
92
|
-
* alpha : false,
|
|
93
|
-
* depth : true,
|
|
94
|
-
* stencil : false,
|
|
95
|
-
* antialias : true,
|
|
96
|
-
* powerPreference: 'high-performance',
|
|
97
|
-
* premultipliedAlpha : true,
|
|
98
|
-
* preserveDrawingBuffer : false,
|
|
99
|
-
* failIfMajorPerformanceCaveat : false
|
|
100
|
-
* },
|
|
101
|
-
* allowTextureFilterAnisotropic : true
|
|
102
|
-
* }
|
|
103
|
-
* </code>
|
|
104
|
-
* </p>
|
|
105
|
-
* <p>
|
|
106
|
-
* The <code>webgl</code> property corresponds to the {@link http://www.khronos.org/registry/webgl/specs/latest/#5.2|WebGLContextAttributes}
|
|
107
|
-
* object used to create the WebGL context.
|
|
108
|
-
* </p>
|
|
109
|
-
* <p>
|
|
110
|
-
* <code>webgl.alpha</code> defaults to false, which can improve performance compared to the standard WebGL default
|
|
111
|
-
* of true. If an application needs to composite Cesium above other HTML elements using alpha-blending, set
|
|
112
|
-
* <code>webgl.alpha</code> to true.
|
|
113
|
-
* </p>
|
|
114
|
-
* <p>
|
|
115
|
-
* The other <code>webgl</code> properties match the WebGL defaults for {@link http://www.khronos.org/registry/webgl/specs/latest/#5.2|WebGLContextAttributes}.
|
|
116
|
-
* </p>
|
|
117
|
-
* <p>
|
|
118
|
-
* <code>allowTextureFilterAnisotropic</code> defaults to true, which enables anisotropic texture filtering when the
|
|
119
|
-
* WebGL extension is supported. Setting this to false will improve performance, but hurt visual quality, especially for horizon views.
|
|
120
|
-
* </p>
|
|
121
84
|
*
|
|
122
85
|
* @alias Scene
|
|
123
86
|
* @constructor
|
|
124
87
|
*
|
|
125
88
|
* @param {Object} options Object with the following properties:
|
|
126
89
|
* @param {HTMLCanvasElement} options.canvas The HTML canvas element to create the scene for.
|
|
127
|
-
* @param {
|
|
90
|
+
* @param {ContextOptions} [options.contextOptions] Context and WebGL creation properties.
|
|
128
91
|
* @param {Element} [options.creditContainer] The HTML element in which the credits will be displayed.
|
|
129
92
|
* @param {Element} [options.creditViewport] The HTML element in which to display the credit popup. If not specified, the viewport will be a added as a sibling of the canvas.
|
|
130
93
|
* @param {MapProjection} [options.mapProjection=new GeographicProjection()] The map projection to use in 2D and Columbus View modes.
|
|
@@ -134,7 +97,7 @@ const requestRenderAfterFrame = function (scene) {
|
|
|
134
97
|
* @param {MapMode2D} [options.mapMode2D=MapMode2D.INFINITE_SCROLL] Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction.
|
|
135
98
|
* @param {Boolean} [options.requestRenderMode=false] If true, rendering a frame will only occur when needed as determined by changes within the scene. Enabling improves performance of the application, but requires using {@link Scene#requestRender} to render a new frame explicitly in this mode. This will be necessary in many cases after making changes to the scene in other parts of the API. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.
|
|
136
99
|
* @param {Number} [options.maximumRenderTimeChange=0.0] If requestRenderMode is true, this value defines the maximum change in simulation time allowed before a render is requested. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.
|
|
137
|
-
* @param {Number} [depthPlaneEllipsoidOffset=0.0] Adjust the DepthPlane to address rendering artefacts below ellipsoid zero elevation.
|
|
100
|
+
* @param {Number} [options.depthPlaneEllipsoidOffset=0.0] Adjust the DepthPlane to address rendering artefacts below ellipsoid zero elevation.
|
|
138
101
|
* @param {Number} [options.msaaSamples=1] If provided, this value controls the rate of multisample antialiasing. Typical multisampling rates are 2, 4, and sometimes 8 samples per pixel. Higher sampling rates of MSAA may impact performance in exchange for improved visual quality. This value only applies to WebGL2 contexts that support multisample render targets.
|
|
139
102
|
*
|
|
140
103
|
* @see CesiumWidget
|
|
@@ -157,17 +120,7 @@ function Scene(options) {
|
|
|
157
120
|
let creditContainer = options.creditContainer;
|
|
158
121
|
let creditViewport = options.creditViewport;
|
|
159
122
|
|
|
160
|
-
|
|
161
|
-
if (!defined(contextOptions)) {
|
|
162
|
-
contextOptions = {};
|
|
163
|
-
}
|
|
164
|
-
if (!defined(contextOptions.webgl)) {
|
|
165
|
-
contextOptions.webgl = {};
|
|
166
|
-
}
|
|
167
|
-
contextOptions.webgl.powerPreference = defaultValue(
|
|
168
|
-
contextOptions.webgl.powerPreference,
|
|
169
|
-
"high-performance"
|
|
170
|
-
);
|
|
123
|
+
const contextOptions = clone(options.contextOptions);
|
|
171
124
|
|
|
172
125
|
//>>includeStart('debug', pragmas.debug);
|
|
173
126
|
if (!defined(canvas)) {
|
|
@@ -2262,6 +2215,17 @@ function executeTranslucentCommandsFrontToBack(
|
|
|
2262
2215
|
}
|
|
2263
2216
|
}
|
|
2264
2217
|
|
|
2218
|
+
function executeVoxelCommands(scene, executeFunction, passState, commands) {
|
|
2219
|
+
const context = scene.context;
|
|
2220
|
+
|
|
2221
|
+
mergeSort(commands, backToFront, scene.camera.positionWC);
|
|
2222
|
+
|
|
2223
|
+
const length = commands.length;
|
|
2224
|
+
for (let i = 0; i < length; ++i) {
|
|
2225
|
+
executeFunction(commands[i], scene, context, passState);
|
|
2226
|
+
}
|
|
2227
|
+
}
|
|
2228
|
+
|
|
2265
2229
|
const scratchPerspectiveFrustum = new PerspectiveFrustum();
|
|
2266
2230
|
const scratchPerspectiveOffCenterFrustum = new PerspectiveOffCenterFrustum();
|
|
2267
2231
|
const scratchOrthographicFrustum = new OrthographicFrustum();
|
|
@@ -2670,6 +2634,12 @@ function executeCommands(scene, passState) {
|
|
|
2670
2634
|
pickDepth.executeCopyDepth(context, passState);
|
|
2671
2635
|
}
|
|
2672
2636
|
|
|
2637
|
+
us.updatePass(Pass.VOXELS);
|
|
2638
|
+
commands = frustumCommands.commands[Pass.VOXELS];
|
|
2639
|
+
length = frustumCommands.indices[Pass.VOXELS];
|
|
2640
|
+
commands.length = length;
|
|
2641
|
+
executeVoxelCommands(scene, executeCommand, passState, commands);
|
|
2642
|
+
|
|
2673
2643
|
if (picking || !usePostProcessSelected) {
|
|
2674
2644
|
continue;
|
|
2675
2645
|
}
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import binarySearch from "../Core/binarySearch.js";
|
|
2
|
+
import Cartesian3 from "../Core/Cartesian3.js";
|
|
3
|
+
import CesiumMath from "../Core/Math.js";
|
|
4
|
+
import defined from "../Core/defined.js";
|
|
5
|
+
import DeveloperError from "../Core/DeveloperError.js";
|
|
6
|
+
import KeyframeNode from "./KeyframeNode.js";
|
|
7
|
+
import Matrix3 from "../Core/Matrix3.js";
|
|
8
|
+
import OrientedBoundingBox from "../Core/OrientedBoundingBox.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @alias SpatialNode
|
|
12
|
+
* @constructor
|
|
13
|
+
*
|
|
14
|
+
* @param {Number} level
|
|
15
|
+
* @param {Number} x
|
|
16
|
+
* @param {Number} y
|
|
17
|
+
* @param {Number} z
|
|
18
|
+
* @param {SpatialNode} parent
|
|
19
|
+
* @param {VoxelShapeType} shape
|
|
20
|
+
* @param {Cartesian3} voxelDimensions
|
|
21
|
+
*
|
|
22
|
+
* @private
|
|
23
|
+
*/
|
|
24
|
+
function SpatialNode(level, x, y, z, parent, shape, voxelDimensions) {
|
|
25
|
+
/**
|
|
26
|
+
* @ignore
|
|
27
|
+
* @type {SpatialNode[]}
|
|
28
|
+
*/
|
|
29
|
+
this.children = undefined;
|
|
30
|
+
this.parent = parent;
|
|
31
|
+
|
|
32
|
+
this.level = level;
|
|
33
|
+
this.x = x;
|
|
34
|
+
this.y = y;
|
|
35
|
+
this.z = z;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @ignore
|
|
39
|
+
* @type {KeyframeNode[]}
|
|
40
|
+
*/
|
|
41
|
+
this.keyframeNodes = [];
|
|
42
|
+
/**
|
|
43
|
+
* @ignore
|
|
44
|
+
* @type {KeyframeNode[]}
|
|
45
|
+
*/
|
|
46
|
+
this.renderableKeyframeNodes = [];
|
|
47
|
+
|
|
48
|
+
this.renderableKeyframeNodeLerp = 0.0;
|
|
49
|
+
/**
|
|
50
|
+
* @ignore
|
|
51
|
+
* @type {KeyframeNode}
|
|
52
|
+
*/
|
|
53
|
+
this.renderableKeyframeNodePrevious = undefined;
|
|
54
|
+
/**
|
|
55
|
+
* @ignore
|
|
56
|
+
* @type {KeyframeNode}
|
|
57
|
+
*/
|
|
58
|
+
this.renderableKeyframeNodeNext = undefined;
|
|
59
|
+
|
|
60
|
+
this.orientedBoundingBox = new OrientedBoundingBox();
|
|
61
|
+
this.approximateVoxelSize = 0.0;
|
|
62
|
+
this.screenSpaceError = 0.0;
|
|
63
|
+
this.visitedFrameNumber = -1;
|
|
64
|
+
|
|
65
|
+
this.computeBoundingVolumes(shape, voxelDimensions);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @param {SpatialNode} a
|
|
70
|
+
* @param {SpatialNode} b
|
|
71
|
+
* @returns {Boolean}
|
|
72
|
+
*/
|
|
73
|
+
SpatialNode.spatialComparator = function (a, b) {
|
|
74
|
+
// The higher of the two screen space errors is prioritized
|
|
75
|
+
return b.screenSpaceError - a.screenSpaceError;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const scratchObbHalfScale = new Cartesian3();
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @param {VoxelShape} shape
|
|
82
|
+
* @param {Cartesian3} voxelDimensions
|
|
83
|
+
*/
|
|
84
|
+
SpatialNode.prototype.computeBoundingVolumes = function (
|
|
85
|
+
shape,
|
|
86
|
+
voxelDimensions
|
|
87
|
+
) {
|
|
88
|
+
this.orientedBoundingBox = shape.computeOrientedBoundingBoxForTile(
|
|
89
|
+
this.level,
|
|
90
|
+
this.x,
|
|
91
|
+
this.y,
|
|
92
|
+
this.z,
|
|
93
|
+
this.orientedBoundingBox
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
const halfScale = Matrix3.getScale(
|
|
97
|
+
this.orientedBoundingBox.halfAxes,
|
|
98
|
+
scratchObbHalfScale
|
|
99
|
+
);
|
|
100
|
+
const maximumScale = 2.0 * Cartesian3.maximumComponent(halfScale);
|
|
101
|
+
this.approximateVoxelSize =
|
|
102
|
+
maximumScale / Cartesian3.minimumComponent(voxelDimensions);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @param {FrameState} frameState
|
|
107
|
+
* @param {Number} visibilityPlaneMask
|
|
108
|
+
* @returns {Number} A plane mask as described in {@link CullingVolume#computeVisibilityWithPlaneMask}.
|
|
109
|
+
*/
|
|
110
|
+
SpatialNode.prototype.visibility = function (frameState, visibilityPlaneMask) {
|
|
111
|
+
const obb = this.orientedBoundingBox;
|
|
112
|
+
const cullingVolume = frameState.cullingVolume;
|
|
113
|
+
return cullingVolume.computeVisibilityWithPlaneMask(obb, visibilityPlaneMask);
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* @param {Cartesian3} cameraPosition
|
|
118
|
+
* @param {Number} screenSpaceErrorMultiplier
|
|
119
|
+
*/
|
|
120
|
+
SpatialNode.prototype.computeScreenSpaceError = function (
|
|
121
|
+
cameraPosition,
|
|
122
|
+
screenSpaceErrorMultiplier
|
|
123
|
+
) {
|
|
124
|
+
const obb = this.orientedBoundingBox;
|
|
125
|
+
|
|
126
|
+
let distance = Math.sqrt(obb.distanceSquaredTo(cameraPosition));
|
|
127
|
+
// Avoid divide-by-zero when viewer is inside the tile.
|
|
128
|
+
distance = Math.max(distance, CesiumMath.EPSILON7);
|
|
129
|
+
const approximateVoxelSize = this.approximateVoxelSize;
|
|
130
|
+
const error = screenSpaceErrorMultiplier * (approximateVoxelSize / distance);
|
|
131
|
+
this.screenSpaceError = error;
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// This object imitates a KeyframeNode. Only used for binary search function.
|
|
135
|
+
const scratchBinarySearchKeyframeNode = {
|
|
136
|
+
keyframe: 0,
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Find the index of a given key frame position within an array of KeyframeNodes,
|
|
141
|
+
* or the complement (~) of the index where it would be in the sorted array.
|
|
142
|
+
* @param {Number} keyframe
|
|
143
|
+
* @param {KeyframeNode[]} keyframeNodes
|
|
144
|
+
* @returns {Number}
|
|
145
|
+
* @private
|
|
146
|
+
*/
|
|
147
|
+
function findKeyframeIndex(keyframe, keyframeNodes) {
|
|
148
|
+
scratchBinarySearchKeyframeNode.keyframe = keyframe;
|
|
149
|
+
return binarySearch(
|
|
150
|
+
keyframeNodes,
|
|
151
|
+
scratchBinarySearchKeyframeNode,
|
|
152
|
+
KeyframeNode.searchComparator
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Computes the most suitable keyframes for rendering, balancing between temporal and visual quality.
|
|
158
|
+
*
|
|
159
|
+
* @param {Number} keyframeLocation
|
|
160
|
+
*/
|
|
161
|
+
SpatialNode.prototype.computeSurroundingRenderableKeyframeNodes = function (
|
|
162
|
+
keyframeLocation
|
|
163
|
+
) {
|
|
164
|
+
let spatialNode = this;
|
|
165
|
+
const startLevel = spatialNode.level;
|
|
166
|
+
|
|
167
|
+
const targetKeyframePrev = Math.floor(keyframeLocation);
|
|
168
|
+
const targetKeyframeNext = Math.ceil(keyframeLocation);
|
|
169
|
+
|
|
170
|
+
let bestKeyframeNodePrev;
|
|
171
|
+
let bestKeyframeNodeNext;
|
|
172
|
+
let minimumDistancePrev = +Number.MAX_VALUE;
|
|
173
|
+
let minimumDistanceNext = +Number.MAX_VALUE;
|
|
174
|
+
|
|
175
|
+
while (defined(spatialNode)) {
|
|
176
|
+
const renderableKeyframeNodes = spatialNode.renderableKeyframeNodes;
|
|
177
|
+
|
|
178
|
+
if (renderableKeyframeNodes.length >= 1) {
|
|
179
|
+
let keyframeNodeIndexPrev = findKeyframeIndex(
|
|
180
|
+
targetKeyframePrev,
|
|
181
|
+
renderableKeyframeNodes
|
|
182
|
+
);
|
|
183
|
+
if (keyframeNodeIndexPrev < 0) {
|
|
184
|
+
keyframeNodeIndexPrev = CesiumMath.clamp(
|
|
185
|
+
~keyframeNodeIndexPrev - 1,
|
|
186
|
+
0,
|
|
187
|
+
renderableKeyframeNodes.length - 1
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
const keyframeNodePrev = renderableKeyframeNodes[keyframeNodeIndexPrev];
|
|
191
|
+
const keyframePrev = keyframeNodePrev.keyframe;
|
|
192
|
+
|
|
193
|
+
let keyframeNodeNext;
|
|
194
|
+
if (
|
|
195
|
+
targetKeyframeNext === targetKeyframePrev ||
|
|
196
|
+
targetKeyframePrev < keyframePrev
|
|
197
|
+
) {
|
|
198
|
+
keyframeNodeNext = keyframeNodePrev;
|
|
199
|
+
} else {
|
|
200
|
+
const keyframeNodeIndexNext = Math.min(
|
|
201
|
+
keyframeNodeIndexPrev + 1,
|
|
202
|
+
renderableKeyframeNodes.length - 1
|
|
203
|
+
);
|
|
204
|
+
keyframeNodeNext = renderableKeyframeNodes[keyframeNodeIndexNext];
|
|
205
|
+
}
|
|
206
|
+
const keyframeNext = keyframeNodeNext.keyframe;
|
|
207
|
+
|
|
208
|
+
const keyframeDistancePrev = targetKeyframePrev - keyframePrev;
|
|
209
|
+
const keyframeDistanceNext = keyframeNext - targetKeyframeNext;
|
|
210
|
+
const levelDistance = startLevel - spatialNode.level;
|
|
211
|
+
|
|
212
|
+
// Balance temporal and visual quality
|
|
213
|
+
const levelWeight = Math.exp(levelDistance * 4.0);
|
|
214
|
+
const normalKeyframeWeight = 1.0;
|
|
215
|
+
const reverseKeyframeWeight = 200.0; // Keyframes on the opposite of the desired direction are deprioritized.
|
|
216
|
+
const distancePrev =
|
|
217
|
+
levelDistance * levelWeight +
|
|
218
|
+
(keyframeDistancePrev >= 0
|
|
219
|
+
? keyframeDistancePrev * normalKeyframeWeight
|
|
220
|
+
: -keyframeDistancePrev * reverseKeyframeWeight);
|
|
221
|
+
const distanceNext =
|
|
222
|
+
levelDistance * levelWeight +
|
|
223
|
+
(keyframeDistanceNext >= 0
|
|
224
|
+
? keyframeDistanceNext * normalKeyframeWeight
|
|
225
|
+
: -keyframeDistanceNext * reverseKeyframeWeight);
|
|
226
|
+
|
|
227
|
+
if (distancePrev < minimumDistancePrev) {
|
|
228
|
+
minimumDistancePrev = distancePrev;
|
|
229
|
+
bestKeyframeNodePrev = keyframeNodePrev;
|
|
230
|
+
}
|
|
231
|
+
if (distanceNext < minimumDistanceNext) {
|
|
232
|
+
minimumDistanceNext = distanceNext;
|
|
233
|
+
bestKeyframeNodeNext = keyframeNodeNext;
|
|
234
|
+
}
|
|
235
|
+
if (keyframeDistancePrev === 0 && keyframeDistanceNext === 0) {
|
|
236
|
+
// Nothing higher up will be better, so break early.
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
spatialNode = spatialNode.parent;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
this.renderableKeyframeNodePrevious = bestKeyframeNodePrev;
|
|
245
|
+
this.renderableKeyframeNodeNext = bestKeyframeNodeNext;
|
|
246
|
+
if (defined(bestKeyframeNodePrev) && defined(bestKeyframeNodeNext)) {
|
|
247
|
+
const bestKeyframePrev = bestKeyframeNodePrev.keyframe;
|
|
248
|
+
const bestKeyframeNext = bestKeyframeNodeNext.keyframe;
|
|
249
|
+
this.renderableKeyframeNodeLerp =
|
|
250
|
+
bestKeyframePrev === bestKeyframeNext
|
|
251
|
+
? 0.0
|
|
252
|
+
: CesiumMath.clamp(
|
|
253
|
+
(keyframeLocation - bestKeyframePrev) /
|
|
254
|
+
(bestKeyframeNext - bestKeyframePrev),
|
|
255
|
+
0.0,
|
|
256
|
+
1.0
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* @param {Number} frameNumber
|
|
263
|
+
* @returns {Boolean}
|
|
264
|
+
*/
|
|
265
|
+
SpatialNode.prototype.isVisited = function (frameNumber) {
|
|
266
|
+
return this.visitedFrameNumber === frameNumber;
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* @param {Number} keyframe
|
|
271
|
+
*/
|
|
272
|
+
SpatialNode.prototype.createKeyframeNode = function (keyframe) {
|
|
273
|
+
let index = findKeyframeIndex(keyframe, this.keyframeNodes);
|
|
274
|
+
if (index < 0) {
|
|
275
|
+
index = ~index; // convert to insertion index
|
|
276
|
+
const keyframeNode = new KeyframeNode(this, keyframe);
|
|
277
|
+
this.keyframeNodes.splice(index, 0, keyframeNode);
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* @param {KeyframeNode} keyframeNode
|
|
283
|
+
* @param {Megatexture[]} megatextures
|
|
284
|
+
*/
|
|
285
|
+
SpatialNode.prototype.destroyKeyframeNode = function (
|
|
286
|
+
keyframeNode,
|
|
287
|
+
megatextures
|
|
288
|
+
) {
|
|
289
|
+
const keyframe = keyframeNode.keyframe;
|
|
290
|
+
const keyframeIndex = findKeyframeIndex(keyframe, this.keyframeNodes);
|
|
291
|
+
if (keyframeIndex < 0) {
|
|
292
|
+
throw new DeveloperError("Keyframe node does not exist.");
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
this.keyframeNodes.splice(keyframeIndex, 1);
|
|
296
|
+
|
|
297
|
+
if (keyframeNode.megatextureIndex !== -1) {
|
|
298
|
+
for (let i = 0; i < megatextures.length; i++) {
|
|
299
|
+
megatextures[i].remove(keyframeNode.megatextureIndex);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
const renderableKeyframeNodeIndex = findKeyframeIndex(
|
|
303
|
+
keyframe,
|
|
304
|
+
this.renderableKeyframeNodes
|
|
305
|
+
);
|
|
306
|
+
if (renderableKeyframeNodeIndex < 0) {
|
|
307
|
+
throw new DeveloperError("Renderable keyframe node does not exist.");
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
this.renderableKeyframeNodes.splice(renderableKeyframeNodeIndex, 1);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
keyframeNode.spatialNode = undefined;
|
|
314
|
+
keyframeNode.state = KeyframeNode.LoadState.UNLOADED;
|
|
315
|
+
keyframeNode.metadatas = {};
|
|
316
|
+
keyframeNode.megatextureIndex = -1;
|
|
317
|
+
keyframeNode.priority = -Number.MAX_VALUE;
|
|
318
|
+
keyframeNode.highPriorityFrameNumber = -1;
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* @param {KeyframeNode} keyframeNode
|
|
323
|
+
* @param {Megatexture[]} megatextures
|
|
324
|
+
*/
|
|
325
|
+
SpatialNode.prototype.addKeyframeNodeToMegatextures = function (
|
|
326
|
+
keyframeNode,
|
|
327
|
+
megatextures
|
|
328
|
+
) {
|
|
329
|
+
if (
|
|
330
|
+
keyframeNode.state !== KeyframeNode.LoadState.RECEIVED ||
|
|
331
|
+
keyframeNode.megatextureIndex !== -1 ||
|
|
332
|
+
keyframeNode.metadatas.length !== megatextures.length
|
|
333
|
+
) {
|
|
334
|
+
throw new DeveloperError("Keyframe node cannot be added to megatexture");
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
for (let i = 0; i < megatextures.length; i++) {
|
|
338
|
+
const megatexture = megatextures[i];
|
|
339
|
+
keyframeNode.megatextureIndex = megatexture.add(keyframeNode.metadatas[i]);
|
|
340
|
+
keyframeNode.metadatas[i] = undefined; // data is in megatexture so no need to hold onto it
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
keyframeNode.state = KeyframeNode.LoadState.LOADED;
|
|
344
|
+
|
|
345
|
+
const renderableKeyframeNodes = this.renderableKeyframeNodes;
|
|
346
|
+
let renderableKeyframeNodeIndex = findKeyframeIndex(
|
|
347
|
+
keyframeNode.keyframe,
|
|
348
|
+
renderableKeyframeNodes
|
|
349
|
+
);
|
|
350
|
+
if (renderableKeyframeNodeIndex >= 0) {
|
|
351
|
+
throw new DeveloperError("Keyframe already renderable");
|
|
352
|
+
}
|
|
353
|
+
renderableKeyframeNodeIndex = ~renderableKeyframeNodeIndex;
|
|
354
|
+
renderableKeyframeNodes.splice(renderableKeyframeNodeIndex, 0, keyframeNode);
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* @param {Number} frameNumber
|
|
359
|
+
* @returns Boolean
|
|
360
|
+
*/
|
|
361
|
+
SpatialNode.prototype.isRenderable = function (frameNumber) {
|
|
362
|
+
const previousNode = this.renderableKeyframeNodePrevious;
|
|
363
|
+
const nextNode = this.renderableKeyframeNodeNext;
|
|
364
|
+
const level = this.level;
|
|
365
|
+
|
|
366
|
+
return (
|
|
367
|
+
defined(previousNode) &&
|
|
368
|
+
defined(nextNode) &&
|
|
369
|
+
(previousNode.spatialNode.level === level ||
|
|
370
|
+
nextNode.spatialNode.level === level) &&
|
|
371
|
+
this.visitedFrameNumber === frameNumber
|
|
372
|
+
);
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
export default SpatialNode;
|
|
@@ -76,7 +76,7 @@ Object.defineProperties(StructuralMetadata.prototype, {
|
|
|
76
76
|
},
|
|
77
77
|
|
|
78
78
|
/**
|
|
79
|
-
*
|
|
79
|
+
* Extra user-defined properties.
|
|
80
80
|
*
|
|
81
81
|
* @memberof StructuralMetadata.prototype
|
|
82
82
|
* @type {*}
|
|
@@ -90,7 +90,7 @@ Object.defineProperties(StructuralMetadata.prototype, {
|
|
|
90
90
|
},
|
|
91
91
|
|
|
92
92
|
/**
|
|
93
|
-
*
|
|
93
|
+
* An object containing extensions.
|
|
94
94
|
*
|
|
95
95
|
* @memberof StructuralMetadata.prototype
|
|
96
96
|
* @type {Object}
|
|
@@ -50,7 +50,7 @@ Object.defineProperties(TileMetadata.prototype, {
|
|
|
50
50
|
},
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
|
-
*
|
|
53
|
+
* Extra user-defined properties.
|
|
54
54
|
*
|
|
55
55
|
* @memberof TileMetadata.prototype
|
|
56
56
|
* @type {Object}
|
|
@@ -64,7 +64,7 @@ Object.defineProperties(TileMetadata.prototype, {
|
|
|
64
64
|
},
|
|
65
65
|
|
|
66
66
|
/**
|
|
67
|
-
*
|
|
67
|
+
* An object containing extensions.
|
|
68
68
|
*
|
|
69
69
|
* @memberof TileMetadata.prototype
|
|
70
70
|
* @type {Object}
|
|
@@ -52,7 +52,7 @@ Object.defineProperties(TilesetMetadata.prototype, {
|
|
|
52
52
|
},
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
|
-
*
|
|
55
|
+
* Extra user-defined properties.
|
|
56
56
|
*
|
|
57
57
|
* @memberof TilesetMetadata.prototype
|
|
58
58
|
* @type {*}
|
|
@@ -66,7 +66,7 @@ Object.defineProperties(TilesetMetadata.prototype, {
|
|
|
66
66
|
},
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
|
-
*
|
|
69
|
+
* An object containing extensions.
|
|
70
70
|
*
|
|
71
71
|
* @memberof TilesetMetadata.prototype
|
|
72
72
|
* @type {Object}
|