@cesium/engine 24.0.0 → 25.0.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/{chunk-NKT5K3K3.js → chunk-35H3UBIO.js} +13 -12
- package/Build/Workers/{chunk-5A2SW66E.js → chunk-3LSD7OOA.js} +16 -16
- package/Build/Workers/{chunk-HXJMS2ZI.js → chunk-3RFFPH4M.js} +1 -1
- package/Build/Workers/{chunk-EDXL4W76.js → chunk-3TKLDHV3.js} +2 -2
- package/Build/Workers/{chunk-GQUNK2XC.js → chunk-3VDDRF2E.js} +14 -14
- package/Build/Workers/{chunk-Q3C6VQH6.js → chunk-3XY3MVPG.js} +4 -4
- package/Build/Workers/{chunk-A47HVBC5.js → chunk-4GF4MVPY.js} +7 -7
- package/Build/Workers/{chunk-YQFTYQMZ.js → chunk-4MTRQFJP.js} +3 -2
- package/Build/Workers/{chunk-N65BAKSH.js → chunk-4QQXGTCE.js} +8 -8
- package/Build/Workers/{chunk-EV3VGO6Y.js → chunk-4XXHJI6Y.js} +17 -17
- package/Build/Workers/{chunk-DHKPFLSJ.js → chunk-5T6QQAJW.js} +3 -2
- package/Build/Workers/{chunk-UIGVOKKI.js → chunk-6SDGQI27.js} +3 -2
- package/Build/Workers/{chunk-ILMFADZA.js → chunk-77RL3MBD.js} +6 -5
- package/Build/Workers/{chunk-2N4KDHS3.js → chunk-7LSFAEWF.js} +12 -11
- package/Build/Workers/{chunk-44EMEGKW.js → chunk-A7A433MD.js} +5 -5
- package/Build/Workers/{chunk-J6AW5YHS.js → chunk-A7ZBMVFS.js} +14 -14
- package/Build/Workers/{chunk-XJRBB253.js → chunk-ACFFCHHZ.js} +11 -11
- package/Build/Workers/{chunk-MKM27KGV.js → chunk-AEAVLYPS.js} +2 -2
- package/Build/Workers/{chunk-7MDYBRYJ.js → chunk-AWFZHD2B.js} +4 -4
- package/Build/Workers/{chunk-UQU4RXLT.js → chunk-BTX2NL3P.js} +50 -45
- package/Build/Workers/{chunk-4TIG36AW.js → chunk-BVAIWR7O.js} +12 -12
- package/Build/Workers/chunk-CKQP3DSS.js +973 -0
- package/Build/Workers/{chunk-VLDEUTOP.js → chunk-CZ23Y3RM.js} +2 -2
- package/Build/Workers/{chunk-NPF7SSHZ.js → chunk-DFEI5MAV.js} +7 -7
- package/Build/Workers/{chunk-AJLTU6PF.js → chunk-DH26SNAB.js} +4 -1
- package/Build/Workers/{chunk-5GXYJQ2K.js → chunk-DYT5NR6P.js} +3 -3
- package/Build/Workers/{chunk-63SIWPLS.js → chunk-EZARA5FJ.js} +13 -13
- package/Build/Workers/{chunk-AMIHNSST.js → chunk-FIBS5S7R.js} +2 -2
- package/Build/Workers/{chunk-Y7HNNPNK.js → chunk-FVLVVOBQ.js} +10 -10
- package/Build/Workers/{chunk-XY6HMDGI.js → chunk-GL7DNVUS.js} +5 -5
- package/Build/Workers/{chunk-6WLHJFD3.js → chunk-GPIGURCG.js} +59 -32
- package/Build/Workers/{chunk-B6SCUUFP.js → chunk-H2A4USJR.js} +10 -10
- package/Build/Workers/chunk-HSVQATK2.js +147 -0
- package/Build/Workers/{chunk-72VYSVEW.js → chunk-HVMG6AG4.js} +11 -10
- package/Build/Workers/{chunk-LXMCPFFS.js → chunk-I3A6DXYZ.js} +4 -4
- package/Build/Workers/{chunk-7QRFIKWQ.js → chunk-ITD2IN7N.js} +2 -2
- package/Build/Workers/{chunk-RQNJD3O4.js → chunk-J3OFS2RD.js} +12 -12
- package/Build/Workers/{chunk-C6P4IG5P.js → chunk-J647NNZW.js} +6 -6
- package/Build/Workers/{chunk-7X322WP2.js → chunk-J7KQEKPK.js} +13 -13
- package/Build/Workers/{chunk-7O5XJTVE.js → chunk-K6NFIRFB.js} +5 -5
- package/Build/Workers/{chunk-AF3MU2RL.js → chunk-LH5SF3XV.js} +7 -6
- package/Build/Workers/{chunk-GOQBUCXH.js → chunk-ND3NTTOF.js} +708 -430
- package/Build/Workers/chunk-QO2CGXMP.js +2342 -0
- package/Build/Workers/chunk-QSDY4NS7.js +1287 -0
- package/Build/Workers/chunk-QXNQQYPV.js +3201 -0
- package/Build/Workers/{chunk-YAOZMOFL.js → chunk-ST2UWDUU.js} +5 -5
- package/Build/Workers/{chunk-PVV64VFW.js → chunk-TA777BGS.js} +3 -2
- package/Build/Workers/{chunk-ISY4EZCA.js → chunk-TAI4HLII.js} +4 -4
- package/Build/Workers/{chunk-JCI63T3K.js → chunk-URUCCIPS.js} +6 -6
- package/Build/Workers/{chunk-VMVOUQ5J.js → chunk-VQKLRBIK.js} +7 -7
- package/Build/Workers/{chunk-6MPGQEHA.js → chunk-WC57YYBN.js} +2 -2
- package/Build/Workers/{chunk-BJD6QGXZ.js → chunk-WN6P5UDH.js} +12 -12
- package/Build/Workers/{chunk-LIB2H534.js → chunk-WNN5D4W3.js} +12 -11
- package/Build/Workers/{chunk-D4EJ2NXG.js → chunk-WTQGE7Q6.js} +17 -17
- package/Build/Workers/{chunk-YJZGW74L.js → chunk-WUBKZFF6.js} +2213 -1349
- package/Build/Workers/{chunk-7TYLCBGK.js → chunk-ZAPOS52G.js} +12 -10
- package/Build/Workers/{chunk-6RMS4S72.js → chunk-ZCCIIBZT.js} +6 -6
- package/Build/Workers/combineGeometry.js +24 -24
- package/Build/Workers/createBoxGeometry.js +18 -18
- package/Build/Workers/createBoxOutlineGeometry.js +16 -16
- package/Build/Workers/createCircleGeometry.js +26 -26
- package/Build/Workers/createCircleOutlineGeometry.js +19 -19
- package/Build/Workers/createCoplanarPolygonGeometry.js +33 -33
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
- package/Build/Workers/createCorridorGeometry.js +29 -29
- package/Build/Workers/createCorridorOutlineGeometry.js +28 -28
- package/Build/Workers/createCylinderGeometry.js +20 -20
- package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
- package/Build/Workers/createEllipseGeometry.js +26 -26
- package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
- package/Build/Workers/createEllipsoidGeometry.js +19 -19
- package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
- package/Build/Workers/createFrustumGeometry.js +18 -18
- package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
- package/Build/Workers/createGeometry.js +24 -24
- package/Build/Workers/createGroundPolylineGeometry.js +175 -118
- package/Build/Workers/createPlaneGeometry.js +16 -16
- package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
- package/Build/Workers/createPolygonGeometry.js +32 -32
- package/Build/Workers/createPolygonOutlineGeometry.js +30 -30
- package/Build/Workers/createPolylineGeometry.js +25 -25
- package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
- package/Build/Workers/createRectangleGeometry.js +27 -27
- package/Build/Workers/createRectangleOutlineGeometry.js +20 -20
- package/Build/Workers/createSimplePolylineGeometry.js +23 -23
- package/Build/Workers/createSphereGeometry.js +19 -19
- package/Build/Workers/createSphereOutlineGeometry.js +18 -18
- package/Build/Workers/createTaskProcessorWorker.js +3 -3
- package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
- package/Build/Workers/createVectorTileGeometries.js +24 -24
- package/Build/Workers/createVectorTilePoints.js +13 -13
- package/Build/Workers/createVectorTilePolygons.js +22 -22
- package/Build/Workers/createVectorTilePolylines.js +14 -14
- package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
- package/Build/Workers/createVerticesFromHeightmap.js +24 -23
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
- package/Build/Workers/createWallGeometry.js +24 -24
- package/Build/Workers/createWallOutlineGeometry.js +23 -23
- package/Build/Workers/decodeDraco.js +10 -10
- package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
- package/Build/Workers/decodeI3S.js +10 -10
- package/Build/Workers/gaussianSplatSorter.js +4 -4
- package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
- package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
- package/Build/Workers/transcodeKTX2.js +12 -9
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
- package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
- package/Source/Core/ArcType.js +6 -1
- package/Source/Core/ArticulationStageType.js +5 -1
- package/Source/Core/AssociativeArray.js +100 -94
- package/Source/Core/BoundingSphere.js +1296 -1300
- package/Source/Core/Cartesian3.js +1 -2
- package/Source/Core/Cartographic.js +257 -249
- package/Source/Core/ClockRange.js +6 -1
- package/Source/Core/ClockStep.js +6 -1
- package/Source/Core/Color.js +844 -835
- package/Source/Core/ComponentDatatype.js +4 -1
- package/Source/Core/CornerType.js +6 -1
- package/Source/Core/Credit.js +121 -124
- package/Source/Core/Ellipsoid.js +637 -660
- package/Source/Core/ExtrapolationType.js +6 -1
- package/Source/Core/GeocodeType.js +6 -1
- package/Source/Core/GeographicProjection.js +74 -74
- package/Source/Core/GeographicTilingScheme.js +179 -198
- package/Source/Core/GeometryOffsetAttribute.js +7 -1
- package/Source/Core/GeometryType.js +7 -1
- package/Source/Core/HeightmapEncoding.js +6 -1
- package/Source/Core/Iau2006XysData.js +24 -13
- package/Source/Core/IndexDatatype.js +3 -1
- package/Source/Core/InterpolationType.js +5 -1
- package/Source/Core/Intersect.js +6 -1
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/IonGeocodeProviderType.js +5 -1
- package/Source/Core/JulianDate.js +850 -848
- package/Source/Core/KeyboardEventModifier.js +6 -1
- package/Source/Core/MapProjection.js +39 -44
- package/Source/Core/Matrix2.js +906 -893
- package/Source/Core/Matrix3.js +1643 -1575
- package/Source/Core/Matrix4.js +2903 -2872
- package/Source/Core/PixelFormat.js +3 -1
- package/Source/Core/PrimitiveType.js +11 -1
- package/Source/Core/Ray.js +62 -60
- package/Source/Core/Rectangle.js +913 -904
- package/Source/Core/ReferenceFrame.js +6 -1
- package/Source/Core/RequestScheduler.js +8 -3
- package/Source/Core/RequestState.js +6 -1
- package/Source/Core/RequestType.js +6 -1
- package/Source/Core/ScreenSpaceEventType.js +6 -1
- package/Source/Core/TerrainQuantization.js +6 -1
- package/Source/Core/TilingScheme.js +100 -98
- package/Source/Core/TimeConstants.js +6 -1
- package/Source/Core/TimeStandard.js +6 -1
- package/Source/Core/TrackingReferenceFrame.js +6 -1
- package/Source/Core/Visibility.js +6 -1
- package/Source/Core/VulkanConstants.js +6 -1
- package/Source/Core/WebGLConstants.js +6 -1
- package/Source/Core/WebMercatorProjection.js +108 -109
- package/Source/Core/WebMercatorTilingScheme.js +246 -242
- package/Source/Core/WindingOrder.js +3 -1
- package/Source/DataSources/StaticGroundGeometryPerMaterialBatch.js +1 -0
- package/Source/DataSources/StaticGroundPolylinePerMaterialBatch.js +1 -0
- package/Source/DataSources/StripeOrientation.js +6 -1
- package/Source/Renderer/BufferUsage.js +20 -9
- package/Source/Renderer/Context.js +2 -29
- package/Source/Renderer/DrawCommand.js +435 -403
- package/Source/Renderer/MipmapHint.js +5 -1
- package/Source/Renderer/Pass.js +7 -1
- package/Source/Renderer/PickId.js +44 -0
- package/Source/Renderer/PixelDatatype.js +3 -1
- package/Source/Renderer/RenderbufferFormat.js +5 -1
- package/Source/Renderer/ShaderDestination.js +4 -1
- package/Source/Renderer/TextureMagnificationFilter.js +3 -1
- package/Source/Renderer/TextureMinificationFilter.js +3 -1
- package/Source/Renderer/TextureWrap.js +5 -1
- package/Source/Scene/AlphaMode.js +5 -1
- package/Source/Scene/ArcGisBaseMapType.js +6 -1
- package/Source/Scene/ArcGisMapService.js +1 -1
- package/Source/Scene/AttributeType.js +3 -1
- package/Source/Scene/Axis.js +3 -1
- package/Source/Scene/BingMapsStyle.js +6 -1
- package/Source/Scene/BlendEquation.js +6 -1
- package/Source/Scene/BlendFunction.js +6 -1
- package/Source/Scene/BlendOption.js +6 -1
- package/Source/Scene/BlendingState.js +6 -1
- package/Source/Scene/BufferLoader.js +0 -2
- package/Source/Scene/BufferPointCollection.js +4 -1
- package/Source/Scene/BufferPolygonCollection.js +3 -1
- package/Source/Scene/BufferPolylineCollection.js +3 -1
- package/Source/Scene/BufferPrimitiveCollection.js +140 -24
- package/Source/Scene/CameraEventType.js +6 -1
- package/Source/Scene/Cesium3DTileColorBlendMode.js +6 -1
- package/Source/Scene/Cesium3DTileContentState.js +6 -1
- package/Source/Scene/Cesium3DTileContentType.js +3 -1
- package/Source/Scene/Cesium3DTileFeature.js +289 -306
- package/Source/Scene/Cesium3DTileOptimizationHint.js +6 -1
- package/Source/Scene/Cesium3DTilePass.js +5 -1
- package/Source/Scene/Cesium3DTilePointFeature.js +433 -511
- package/Source/Scene/Cesium3DTileRefine.js +6 -1
- package/Source/Scene/Cesium3DTileVectorFeature.js +586 -0
- package/Source/Scene/Cesium3DTileset.js +1 -1
- package/Source/Scene/ClassificationType.js +3 -1
- package/Source/Scene/CloudType.js +3 -1
- package/Source/Scene/ColorBlendMode.js +4 -1
- package/Source/Scene/CullFace.js +6 -1
- package/Source/Scene/DepthFunction.js +6 -1
- package/Source/Scene/DynamicAtmosphereLightingType.js +3 -1
- package/Source/Scene/EquirectangularPanorama.js +1 -0
- package/Source/Scene/ExpressionNodeType.js +6 -1
- package/Source/Scene/GltfBufferViewLoader.js +0 -2
- package/Source/Scene/GltfDracoLoader.js +0 -2
- package/Source/Scene/GltfImageLoader.js +0 -3
- package/Source/Scene/GltfIndexBufferLoader.js +0 -4
- package/Source/Scene/GltfJsonLoader.js +0 -2
- package/Source/Scene/GltfLoader.js +0 -5
- package/Source/Scene/GltfLoaderUtil.js +14 -0
- package/Source/Scene/GltfSpzLoader.js +0 -2
- package/Source/Scene/GltfStructuralMetadataLoader.js +0 -2
- package/Source/Scene/GltfTextureLoader.js +0 -2
- package/Source/Scene/GltfVertexBufferLoader.js +0 -4
- package/Source/Scene/HeightReference.js +5 -1
- package/Source/Scene/HorizontalOrigin.js +6 -1
- package/Source/Scene/ImageryProvider.js +1 -1
- package/Source/Scene/ImageryState.js +6 -1
- package/Source/Scene/ImplicitSubdivisionScheme.js +3 -1
- package/Source/Scene/InstanceAttributeSemantic.js +3 -1
- package/Source/Scene/IonWorldImageryStyle.js +6 -1
- package/Source/Scene/JobType.js +6 -1
- package/Source/Scene/LabelStyle.js +6 -1
- package/Source/Scene/MapMode2D.js +6 -1
- package/Source/Scene/MetadataComponentType.js +3 -1
- package/Source/Scene/MetadataSchemaLoader.js +0 -2
- package/Source/Scene/MetadataSemantic.js +6 -2
- package/Source/Scene/MetadataType.js +3 -1
- package/Source/Scene/Model/B3dmLoader.js +0 -3
- package/Source/Scene/Model/CustomShaderMode.js +3 -1
- package/Source/Scene/Model/CustomShaderTranslucencyMode.js +5 -1
- package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +44 -71
- package/Source/Scene/Model/Extensions/Gpm/PpeSource.js +5 -1
- package/Source/Scene/Model/Extensions/Gpm/StorageType.js +5 -1
- package/Source/Scene/Model/GeoJsonLoader.js +0 -2
- package/Source/Scene/Model/I3dmLoader.js +0 -3
- package/Source/Scene/Model/InstancingPipelineStage.js +1 -1
- package/Source/Scene/Model/LightingModel.js +5 -1
- package/Source/Scene/Model/MaterialPipelineStage.js +184 -3
- package/Source/Scene/Model/ModelReader.js +474 -3
- package/Source/Scene/Model/ModelRuntimePrimitive.js +2 -1
- package/Source/Scene/Model/ModelType.js +3 -1
- package/Source/Scene/Model/PntsLoader.js +4 -3
- package/Source/Scene/Model/StyleCommandsNeeded.js +3 -1
- package/Source/Scene/Model/UniformType.js +5 -1
- package/Source/Scene/Model/VaryingType.js +5 -1
- package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +73 -28
- package/Source/Scene/Model/pickModel.js +94 -299
- package/Source/Scene/ModelAnimationLoop.js +6 -1
- package/Source/Scene/ModelAnimationState.js +6 -1
- package/Source/Scene/ModelComponents.js +8 -1
- package/Source/Scene/PrimitiveState.js +7 -1
- package/Source/Scene/QuadtreeOccluders.js +20 -15
- package/Source/Scene/QuadtreeTile.js +547 -541
- package/Source/Scene/QuadtreeTileLoadState.js +6 -1
- package/Source/Scene/QuadtreeTileProvider.js +159 -175
- package/Source/Scene/ResourceLoader.js +0 -1
- package/Source/Scene/ResourceLoaderState.js +7 -1
- package/Source/Scene/SceneMode.js +4 -1
- package/Source/Scene/ShadowMode.js +3 -1
- package/Source/Scene/SkyBox.js +1 -1
- package/Source/Scene/SplitDirection.js +6 -1
- package/Source/Scene/StencilFunction.js +6 -1
- package/Source/Scene/StencilOperation.js +6 -1
- package/Source/Scene/TerrainState.js +7 -1
- package/Source/Scene/TileState.js +7 -1
- package/Source/Scene/Tonemapper.js +5 -1
- package/Source/Scene/VectorGltf3DTileContent.js +72 -51
- package/Source/Scene/VertexAttributeSemantic.js +3 -1
- package/Source/Scene/VerticalOrigin.js +6 -1
- package/Source/Scene/VoxelBoxShape.js +12 -6
- package/Source/Scene/VoxelContent.js +2 -0
- package/Source/Scene/VoxelCylinderShape.js +39 -38
- package/Source/Scene/VoxelEllipsoidShape.js +46 -96
- package/Source/Scene/VoxelMetadataOrder.js +6 -1
- package/Source/Scene/VoxelProvider.js +1 -0
- package/Source/Scene/VoxelShapeType.js +3 -1
- package/Source/Scene/renderBufferPointCollection.js +17 -66
- package/Source/Scene/renderBufferPolygonCollection.js +21 -68
- package/Source/Scene/renderBufferPolylineCollection.js +22 -73
- package/Source/Shaders/Builtin/CzmBuiltins.js +2 -0
- package/Source/Shaders/Builtin/Functions/computeTextureTransform.glsl +24 -0
- package/Source/Shaders/Builtin/Functions/computeTextureTransform.js +25 -0
- package/Source/Shaders/Model/ConstantLodStageFS.glsl +60 -0
- package/Source/Shaders/Model/ConstantLodStageFS.js +62 -0
- package/Source/Shaders/Model/ConstantLodStageVS.glsl +12 -0
- package/Source/Shaders/Model/ConstantLodStageVS.js +13 -0
- package/Source/Shaders/Model/MaterialStageFS.glsl +46 -20
- package/Source/Shaders/Model/MaterialStageFS.js +46 -20
- package/Source/Shaders/Voxels/convertLocalToBoxUv.glsl +0 -1
- package/Source/Shaders/Voxels/convertLocalToBoxUv.js +0 -1
- package/Source/Shaders/Voxels/convertLocalToCylinderUv.glsl +7 -9
- package/Source/Shaders/Voxels/convertLocalToCylinderUv.js +7 -9
- package/Source/Shaders/Voxels/convertLocalToEllipsoidUv.glsl +7 -17
- package/Source/Shaders/Voxels/convertLocalToEllipsoidUv.js +7 -17
- package/Source/Widget/CesiumWidget.js +11 -4
- package/index.d.ts +343 -309
- package/index.js +443 -438
- package/package.json +2 -2
- package/Build/Workers/chunk-DVB56LG7.js +0 -114
- package/Build/Workers/chunk-HKUES6UG.js +0 -2357
- package/Build/Workers/chunk-HRHRYFHS.js +0 -940
- package/Build/Workers/chunk-KLPGTXS3.js +0 -642
- package/Build/Workers/chunk-ZBZRTRJB.js +0 -1829
|
@@ -9,8 +9,13 @@ import AttributeCompression from "../../Core/AttributeCompression.js";
|
|
|
9
9
|
import IndexDatatype from "../../Core/IndexDatatype.js";
|
|
10
10
|
import PrimitiveType from "../../Core/PrimitiveType.js";
|
|
11
11
|
import Matrix4 from "../../Core/Matrix4.js";
|
|
12
|
+
import Quaternion from "../../Core/Quaternion.js";
|
|
13
|
+
import Transforms from "../../Core/Transforms.js";
|
|
12
14
|
|
|
13
15
|
import AttributeType from "../AttributeType.js";
|
|
16
|
+
import InstanceAttributeSemantic from "../InstanceAttributeSemantic.js";
|
|
17
|
+
import VertexAttributeSemantic from "../VertexAttributeSemantic.js";
|
|
18
|
+
import ModelUtility from "./ModelUtility.js";
|
|
14
19
|
|
|
15
20
|
/**
|
|
16
21
|
* A class for reading the data from a <code>ModelComponents.Attribute</code>.
|
|
@@ -144,7 +149,20 @@ class ModelReader {
|
|
|
144
149
|
const byteStride = attribute.byteStride;
|
|
145
150
|
const bytesPerComponent = ComponentDatatype.getSizeInBytes(componentType);
|
|
146
151
|
const defaultByteStride = componentsPerElement * bytesPerComponent;
|
|
147
|
-
|
|
152
|
+
|
|
153
|
+
const isDefaultStride =
|
|
154
|
+
!defined(byteStride) || byteStride === defaultByteStride;
|
|
155
|
+
const hasTypedArray = defined(attribute.typedArray);
|
|
156
|
+
|
|
157
|
+
// If in-memory — return as-is
|
|
158
|
+
// Important: typedArray is already tightly-packed on creation (See: ModelComponents.typedArray and GltfLoader.getPackedTypedArray)
|
|
159
|
+
// byteOffset and byteStride should thus be ignored
|
|
160
|
+
if (hasTypedArray) {
|
|
161
|
+
return attribute.typedArray;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Non-interleaved — copy from typedArray or read from GPU
|
|
165
|
+
if (isDefaultStride) {
|
|
148
166
|
const typedArray = ComponentDatatype.createTypedArray(
|
|
149
167
|
componentType,
|
|
150
168
|
totalComponentCount,
|
|
@@ -161,6 +179,8 @@ class ModelReader {
|
|
|
161
179
|
// have ONE "TypedArray[] getThemFrom(buffer)" call that
|
|
162
180
|
// returns all of the (interleaved) attributes at once,
|
|
163
181
|
// but this requires abstractions that we don't have.
|
|
182
|
+
|
|
183
|
+
// Read back from GPU if not available in memory
|
|
164
184
|
const fullTypedArray = new Uint8Array(buffer.sizeInBytes);
|
|
165
185
|
buffer.getBufferData(fullTypedArray);
|
|
166
186
|
|
|
@@ -320,8 +340,8 @@ class ModelReader {
|
|
|
320
340
|
const c = new Cartesian3();
|
|
321
341
|
for (let i = 0; i < elementCount; i++) {
|
|
322
342
|
Cartesian3.unpack(quantizedTypedArray, i * 3, c);
|
|
323
|
-
AttributeCompression.octDecodeInRange(c, normalizationRange, c);
|
|
324
|
-
Cartesian3.pack(
|
|
343
|
+
AttributeCompression.octDecodeInRange(c.x, c.y, normalizationRange, c);
|
|
344
|
+
Cartesian3.pack(c, dequantizedTypedArray, i * 3);
|
|
325
345
|
}
|
|
326
346
|
return dequantizedTypedArray;
|
|
327
347
|
}
|
|
@@ -645,6 +665,33 @@ class ModelReader {
|
|
|
645
665
|
return result;
|
|
646
666
|
}
|
|
647
667
|
|
|
668
|
+
/**
|
|
669
|
+
* Reads feature IDs from an implicit range feature ID set into a typed array.
|
|
670
|
+
*
|
|
671
|
+
* Generates values using <code>offset + Math.floor(i / repeat)</code> for
|
|
672
|
+
* each vertex. If <code>repeat</code> is undefined, all values are set to
|
|
673
|
+
* <code>offset</code>.
|
|
674
|
+
*
|
|
675
|
+
* @param {FeatureIdImplicitRange} featureIdSet The implicit range feature ID set.
|
|
676
|
+
* @param {object} attributeOwner An object with an <code>attributes</code> array
|
|
677
|
+
* (a primitive or an instances object)
|
|
678
|
+
* @returns {Float32Array} The generated feature ID values.
|
|
679
|
+
*/
|
|
680
|
+
static readImplicitRangeAsTypedArray(featureIdSet, attributeOwner) {
|
|
681
|
+
const count = attributeOwner.attributes[0]?.count ?? 0;
|
|
682
|
+
const offset = featureIdSet.offset;
|
|
683
|
+
const repeat = featureIdSet.repeat;
|
|
684
|
+
const typedArray = new Float32Array(count);
|
|
685
|
+
if (defined(repeat)) {
|
|
686
|
+
for (let i = 0; i < count; i++) {
|
|
687
|
+
typedArray[i] = offset + Math.floor(i / repeat);
|
|
688
|
+
}
|
|
689
|
+
} else {
|
|
690
|
+
typedArray.fill(offset);
|
|
691
|
+
}
|
|
692
|
+
return typedArray;
|
|
693
|
+
}
|
|
694
|
+
|
|
648
695
|
/**
|
|
649
696
|
* Read the indices values from the given primitive indices, and
|
|
650
697
|
* return them as a typed array.
|
|
@@ -805,6 +852,430 @@ class ModelReader {
|
|
|
805
852
|
`UNSIGNED_INT (${IndexDatatype.UNSIGNED_INT}, but is ${indexDatatype}`,
|
|
806
853
|
);
|
|
807
854
|
}
|
|
855
|
+
|
|
856
|
+
/**
|
|
857
|
+
* Per-instance data combining a transform matrix with an optional feature ID.
|
|
858
|
+
*
|
|
859
|
+
* @typedef {object} ModelReader.Instance
|
|
860
|
+
* @property {Matrix4} transform The instance transform matrix.
|
|
861
|
+
* @property {number} [featureId] The per-instance feature ID, or undefined.
|
|
862
|
+
*
|
|
863
|
+
* @private
|
|
864
|
+
*/
|
|
865
|
+
|
|
866
|
+
/**
|
|
867
|
+
* A callback invoked by {@link ModelReader.forEachPrimitive} for each
|
|
868
|
+
* runtime primitive in the model.
|
|
869
|
+
*
|
|
870
|
+
* @callback ModelReader.ForEachPrimitiveCallback
|
|
871
|
+
* @param {object} runtimePrimitive The runtime primitive wrapper.
|
|
872
|
+
* @param {object} primitive The underlying model primitive (runtimePrimitive.primitive).
|
|
873
|
+
* @param {ModelReader.Instance[]} instances Per-instance data (transforms and optional feature IDs).
|
|
874
|
+
* @param {Matrix4} computedModelMatrix The computed model matrix for the node.
|
|
875
|
+
*
|
|
876
|
+
* @private
|
|
877
|
+
*/
|
|
878
|
+
|
|
879
|
+
/**
|
|
880
|
+
* Iterates over every primitive in a model's scene graph, computing
|
|
881
|
+
* node transforms and instance transforms once per node and invoking
|
|
882
|
+
* a callback for each runtime primitive.
|
|
883
|
+
* <p>
|
|
884
|
+
* When a map projection is provided, the computed model matrix is
|
|
885
|
+
* projected to 2D via {@link Transforms.basisTo2D}.
|
|
886
|
+
* </p>
|
|
887
|
+
*
|
|
888
|
+
* @param {Model} model The model whose scene graph to traverse.
|
|
889
|
+
* @param {object} [options] Object with the following properties:
|
|
890
|
+
* @param {MapProjection} [options.mapProjection] The map projection for 2D mode. When defined, the computed model matrix is projected to 2D.
|
|
891
|
+
* @param {string} [options.instanceFeatureIdLabel] The label used to select which instance feature ID set to read. When defined, per-instance feature IDs are fetched. When undefined, feature IDs are not fetched.
|
|
892
|
+
* @param {ModelReader.ForEachPrimitiveCallback} callback The function invoked for each primitive.
|
|
893
|
+
*/
|
|
894
|
+
static forEachPrimitive(model, options, callback) {
|
|
895
|
+
const mapProjection = options?.mapProjection;
|
|
896
|
+
const instanceFeatureIdLabel = options?.instanceFeatureIdLabel;
|
|
897
|
+
const sceneGraph = model.sceneGraph;
|
|
898
|
+
if (!defined(sceneGraph)) {
|
|
899
|
+
return;
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
const scratchNodeTransforms = {
|
|
903
|
+
nodeComputedTransform: new Matrix4(),
|
|
904
|
+
modelMatrix: new Matrix4(),
|
|
905
|
+
computedModelMatrix: new Matrix4(),
|
|
906
|
+
};
|
|
907
|
+
|
|
908
|
+
const nodes = sceneGraph._runtimeNodes;
|
|
909
|
+
const nodesLength = nodes.length;
|
|
910
|
+
|
|
911
|
+
for (let n = 0; n < nodesLength; n++) {
|
|
912
|
+
const runtimeNode = nodes[n];
|
|
913
|
+
|
|
914
|
+
const nodeTransforms = ModelReader.computeNodeTransforms(
|
|
915
|
+
runtimeNode,
|
|
916
|
+
sceneGraph,
|
|
917
|
+
model,
|
|
918
|
+
scratchNodeTransforms,
|
|
919
|
+
);
|
|
920
|
+
|
|
921
|
+
let computedModelMatrix = nodeTransforms.computedModelMatrix;
|
|
922
|
+
|
|
923
|
+
if (defined(mapProjection)) {
|
|
924
|
+
computedModelMatrix = Transforms.basisTo2D(
|
|
925
|
+
mapProjection,
|
|
926
|
+
computedModelMatrix,
|
|
927
|
+
computedModelMatrix,
|
|
928
|
+
);
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
const instanceTransforms = ModelReader.computeInstanceTransforms(
|
|
932
|
+
runtimeNode,
|
|
933
|
+
computedModelMatrix,
|
|
934
|
+
nodeTransforms.nodeComputedTransform,
|
|
935
|
+
nodeTransforms.modelMatrix,
|
|
936
|
+
);
|
|
937
|
+
|
|
938
|
+
const instanceFeatureIds = defined(instanceFeatureIdLabel)
|
|
939
|
+
? ModelReader.computeInstanceFeatureIds(
|
|
940
|
+
runtimeNode,
|
|
941
|
+
instanceFeatureIdLabel,
|
|
942
|
+
)
|
|
943
|
+
: undefined;
|
|
944
|
+
|
|
945
|
+
const instances = [];
|
|
946
|
+
for (let i = 0; i < instanceTransforms.length; i++) {
|
|
947
|
+
instances.push({
|
|
948
|
+
transform: instanceTransforms[i],
|
|
949
|
+
featureId: defined(instanceFeatureIds)
|
|
950
|
+
? instanceFeatureIds[i]
|
|
951
|
+
: undefined,
|
|
952
|
+
});
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
const primitivesLength = runtimeNode.runtimePrimitives.length;
|
|
956
|
+
for (let p = 0; p < primitivesLength; p++) {
|
|
957
|
+
const runtimePrimitive = runtimeNode.runtimePrimitives[p];
|
|
958
|
+
callback(
|
|
959
|
+
runtimePrimitive,
|
|
960
|
+
runtimePrimitive.primitive,
|
|
961
|
+
instances,
|
|
962
|
+
computedModelMatrix,
|
|
963
|
+
);
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
/**
|
|
969
|
+
* Computes the model matrix for a runtime node, accounting for instancing
|
|
970
|
+
* and world-space transforms.
|
|
971
|
+
*
|
|
972
|
+
* @param {object} runtimeNode The runtime node.
|
|
973
|
+
* @param {ModelSceneGraph} sceneGraph The model scene graph.
|
|
974
|
+
* @param {Model} model The model.
|
|
975
|
+
* @param {object} result An object with scratch matrices: { nodeComputedTransform: Matrix4, modelMatrix: Matrix4, computedModelMatrix: Matrix4 }.
|
|
976
|
+
* @returns {object} The result parameter, populated with the computed transforms.
|
|
977
|
+
*
|
|
978
|
+
*/
|
|
979
|
+
static computeNodeTransforms(runtimeNode, sceneGraph, model, result) {
|
|
980
|
+
const node = runtimeNode.node;
|
|
981
|
+
|
|
982
|
+
let nodeComputedTransform = Matrix4.clone(
|
|
983
|
+
runtimeNode.computedTransform,
|
|
984
|
+
result.nodeComputedTransform,
|
|
985
|
+
);
|
|
986
|
+
let modelMatrix = Matrix4.clone(
|
|
987
|
+
sceneGraph.computedModelMatrix,
|
|
988
|
+
result.modelMatrix,
|
|
989
|
+
);
|
|
990
|
+
|
|
991
|
+
const instances = node.instances;
|
|
992
|
+
if (defined(instances)) {
|
|
993
|
+
if (instances.transformInWorldSpace) {
|
|
994
|
+
// Replicate the multiplication order in LegacyInstancingStageVS.
|
|
995
|
+
modelMatrix = Matrix4.multiplyTransformation(
|
|
996
|
+
model.modelMatrix,
|
|
997
|
+
sceneGraph.components.transform,
|
|
998
|
+
modelMatrix,
|
|
999
|
+
);
|
|
1000
|
+
nodeComputedTransform = Matrix4.multiplyTransformation(
|
|
1001
|
+
sceneGraph.axisCorrectionMatrix,
|
|
1002
|
+
runtimeNode.computedTransform,
|
|
1003
|
+
nodeComputedTransform,
|
|
1004
|
+
);
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
const computedModelMatrix = Matrix4.multiplyTransformation(
|
|
1009
|
+
modelMatrix,
|
|
1010
|
+
nodeComputedTransform,
|
|
1011
|
+
result.computedModelMatrix,
|
|
1012
|
+
);
|
|
1013
|
+
|
|
1014
|
+
result.computedModelMatrix = computedModelMatrix;
|
|
1015
|
+
result.nodeComputedTransform = nodeComputedTransform;
|
|
1016
|
+
result.modelMatrix = modelMatrix;
|
|
1017
|
+
return result;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
/**
|
|
1021
|
+
* Builds an array of instance transforms for a node.
|
|
1022
|
+
* If the node is not instanced, returns an array containing only the
|
|
1023
|
+
* computedModelMatrix.
|
|
1024
|
+
*
|
|
1025
|
+
* @param {object} runtimeNode The runtime node.
|
|
1026
|
+
* @param {Matrix4} computedModelMatrix The computed model matrix.
|
|
1027
|
+
* @param {Matrix4} nodeComputedTransform The node computed transform.
|
|
1028
|
+
* @param {Matrix4} modelMatrix The model matrix.
|
|
1029
|
+
* @returns {Matrix4[]}
|
|
1030
|
+
*/
|
|
1031
|
+
static computeInstanceTransforms(
|
|
1032
|
+
runtimeNode,
|
|
1033
|
+
computedModelMatrix,
|
|
1034
|
+
nodeComputedTransform,
|
|
1035
|
+
modelMatrix,
|
|
1036
|
+
) {
|
|
1037
|
+
const transforms = [];
|
|
1038
|
+
const node = runtimeNode.node;
|
|
1039
|
+
const instances = node.instances;
|
|
1040
|
+
|
|
1041
|
+
if (defined(instances)) {
|
|
1042
|
+
const transformsCount = instances.attributes[0].count;
|
|
1043
|
+
const instanceComponentDatatype =
|
|
1044
|
+
instances.attributes[0].componentDatatype;
|
|
1045
|
+
|
|
1046
|
+
const transformElements = 12;
|
|
1047
|
+
let transformsTypedArray = runtimeNode.transformsTypedArray;
|
|
1048
|
+
|
|
1049
|
+
if (!defined(transformsTypedArray)) {
|
|
1050
|
+
const instanceTransformsBuffer = runtimeNode.instancingTransformsBuffer;
|
|
1051
|
+
if (defined(instanceTransformsBuffer)) {
|
|
1052
|
+
transformsTypedArray = ComponentDatatype.createTypedArray(
|
|
1053
|
+
instanceComponentDatatype,
|
|
1054
|
+
transformsCount * transformElements,
|
|
1055
|
+
);
|
|
1056
|
+
instanceTransformsBuffer.getBufferData(transformsTypedArray);
|
|
1057
|
+
}
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
if (defined(transformsTypedArray)) {
|
|
1061
|
+
ModelReader.computeInstanceTransformsFromTypedArray(
|
|
1062
|
+
transformsTypedArray,
|
|
1063
|
+
transformsCount,
|
|
1064
|
+
transforms,
|
|
1065
|
+
);
|
|
1066
|
+
} else {
|
|
1067
|
+
ModelReader.computeInstanceTransformsFromAttributes(
|
|
1068
|
+
instances,
|
|
1069
|
+
transformsCount,
|
|
1070
|
+
transforms,
|
|
1071
|
+
);
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
for (let i = 0; i < transforms.length; i++) {
|
|
1075
|
+
const transform = transforms[i];
|
|
1076
|
+
if (instances.transformInWorldSpace) {
|
|
1077
|
+
Matrix4.multiplyTransformation(
|
|
1078
|
+
transform,
|
|
1079
|
+
nodeComputedTransform,
|
|
1080
|
+
transform,
|
|
1081
|
+
);
|
|
1082
|
+
Matrix4.multiplyTransformation(modelMatrix, transform, transform);
|
|
1083
|
+
} else {
|
|
1084
|
+
Matrix4.multiplyTransformation(
|
|
1085
|
+
computedModelMatrix,
|
|
1086
|
+
transform,
|
|
1087
|
+
transform,
|
|
1088
|
+
);
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
if (transforms.length === 0) {
|
|
1094
|
+
transforms.push(computedModelMatrix);
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
return transforms;
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
/**
|
|
1101
|
+
* Builds an array of per-instance feature IDs for a node.
|
|
1102
|
+
* If the node is not instanced or has no matching feature ID set,
|
|
1103
|
+
* returns <code>undefined</code>.
|
|
1104
|
+
*
|
|
1105
|
+
* @param {object} runtimeNode The runtime node.
|
|
1106
|
+
* @param {string} instanceFeatureIdLabel The label used to select the feature ID set.
|
|
1107
|
+
* @returns {number[]|undefined} The per-instance feature IDs, or undefined.
|
|
1108
|
+
*/
|
|
1109
|
+
static computeInstanceFeatureIds(runtimeNode, instanceFeatureIdLabel) {
|
|
1110
|
+
const node = runtimeNode.node;
|
|
1111
|
+
const instances = node.instances;
|
|
1112
|
+
|
|
1113
|
+
if (!defined(instances)) {
|
|
1114
|
+
return undefined;
|
|
1115
|
+
}
|
|
1116
|
+
|
|
1117
|
+
const featureIdSet = ModelUtility.getFeatureIdsByLabel(
|
|
1118
|
+
instances.featureIds,
|
|
1119
|
+
instanceFeatureIdLabel,
|
|
1120
|
+
);
|
|
1121
|
+
|
|
1122
|
+
if (!defined(featureIdSet)) {
|
|
1123
|
+
return undefined;
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1126
|
+
let typedArray;
|
|
1127
|
+
|
|
1128
|
+
// Case: FeatureIdAttribute
|
|
1129
|
+
if ("setIndex" in featureIdSet) {
|
|
1130
|
+
const attribute = ModelUtility.getAttributeBySemantic(
|
|
1131
|
+
instances,
|
|
1132
|
+
VertexAttributeSemantic.FEATURE_ID,
|
|
1133
|
+
featureIdSet.setIndex,
|
|
1134
|
+
);
|
|
1135
|
+
if (defined(attribute)) {
|
|
1136
|
+
typedArray = ModelReader.readAttributeAsTypedArray(attribute);
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
// Case: FeatureIdImplicitRange
|
|
1141
|
+
if ("offset" in featureIdSet) {
|
|
1142
|
+
typedArray = ModelReader.readImplicitRangeAsTypedArray(
|
|
1143
|
+
featureIdSet,
|
|
1144
|
+
instances,
|
|
1145
|
+
);
|
|
1146
|
+
}
|
|
1147
|
+
|
|
1148
|
+
if (!defined(typedArray)) {
|
|
1149
|
+
return undefined;
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
const featureIds = new Array(typedArray.length);
|
|
1153
|
+
for (let i = 0; i < typedArray.length; i++) {
|
|
1154
|
+
featureIds[i] = typedArray[i];
|
|
1155
|
+
}
|
|
1156
|
+
return featureIds;
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
/**
|
|
1160
|
+
* Builds instance transforms from a packed typed array where each instance
|
|
1161
|
+
* is stored as 12 floats (3 rows of 4 columns, row-major).
|
|
1162
|
+
*
|
|
1163
|
+
* @param {TypedArray} transformsTypedArray The packed transforms array.
|
|
1164
|
+
* @param {number} count The number of instances.
|
|
1165
|
+
* @param {Matrix4[]} transforms The output array to push transforms into.
|
|
1166
|
+
*/
|
|
1167
|
+
static computeInstanceTransformsFromTypedArray(
|
|
1168
|
+
transformsTypedArray,
|
|
1169
|
+
count,
|
|
1170
|
+
transforms,
|
|
1171
|
+
) {
|
|
1172
|
+
const transformElements = 12;
|
|
1173
|
+
for (let i = 0; i < count; i++) {
|
|
1174
|
+
const index = i * transformElements;
|
|
1175
|
+
|
|
1176
|
+
const transform = new Matrix4(
|
|
1177
|
+
transformsTypedArray[index],
|
|
1178
|
+
transformsTypedArray[index + 1],
|
|
1179
|
+
transformsTypedArray[index + 2],
|
|
1180
|
+
transformsTypedArray[index + 3],
|
|
1181
|
+
transformsTypedArray[index + 4],
|
|
1182
|
+
transformsTypedArray[index + 5],
|
|
1183
|
+
transformsTypedArray[index + 6],
|
|
1184
|
+
transformsTypedArray[index + 7],
|
|
1185
|
+
transformsTypedArray[index + 8],
|
|
1186
|
+
transformsTypedArray[index + 9],
|
|
1187
|
+
transformsTypedArray[index + 10],
|
|
1188
|
+
transformsTypedArray[index + 11],
|
|
1189
|
+
0,
|
|
1190
|
+
0,
|
|
1191
|
+
0,
|
|
1192
|
+
1,
|
|
1193
|
+
);
|
|
1194
|
+
|
|
1195
|
+
transforms.push(transform);
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1199
|
+
/**
|
|
1200
|
+
* Builds instance transforms from individual TRANSLATION, ROTATION, and SCALE
|
|
1201
|
+
* attributes when no packed transformsTypedArray is available.
|
|
1202
|
+
*
|
|
1203
|
+
* @param {object} instances The instances object.
|
|
1204
|
+
* @param {number} count The number of instances.
|
|
1205
|
+
* @param {Matrix4[]} transforms The output array to push transforms into.
|
|
1206
|
+
*/
|
|
1207
|
+
static computeInstanceTransformsFromAttributes(instances, count, transforms) {
|
|
1208
|
+
const translationAttribute = ModelUtility.getAttributeBySemantic(
|
|
1209
|
+
instances,
|
|
1210
|
+
InstanceAttributeSemantic.TRANSLATION,
|
|
1211
|
+
);
|
|
1212
|
+
const rotationAttribute = ModelUtility.getAttributeBySemantic(
|
|
1213
|
+
instances,
|
|
1214
|
+
InstanceAttributeSemantic.ROTATION,
|
|
1215
|
+
);
|
|
1216
|
+
const scaleAttribute = ModelUtility.getAttributeBySemantic(
|
|
1217
|
+
instances,
|
|
1218
|
+
InstanceAttributeSemantic.SCALE,
|
|
1219
|
+
);
|
|
1220
|
+
|
|
1221
|
+
const hasTranslation = defined(translationAttribute);
|
|
1222
|
+
const hasRotation = defined(rotationAttribute);
|
|
1223
|
+
const hasScale = defined(scaleAttribute);
|
|
1224
|
+
|
|
1225
|
+
if (!hasTranslation && !hasRotation && !hasScale) {
|
|
1226
|
+
return;
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
let translationTypedArray, rotationTypedArray, scaleTypedArray;
|
|
1230
|
+
if (hasTranslation) {
|
|
1231
|
+
translationTypedArray =
|
|
1232
|
+
ModelReader.readAttributeAsRawCompactTypedArray(translationAttribute);
|
|
1233
|
+
}
|
|
1234
|
+
if (hasRotation) {
|
|
1235
|
+
rotationTypedArray =
|
|
1236
|
+
ModelReader.readAttributeAsRawCompactTypedArray(rotationAttribute);
|
|
1237
|
+
}
|
|
1238
|
+
if (hasScale) {
|
|
1239
|
+
scaleTypedArray =
|
|
1240
|
+
ModelReader.readAttributeAsRawCompactTypedArray(scaleAttribute);
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
for (let i = 0; i < count; i++) {
|
|
1244
|
+
const translation = hasTranslation
|
|
1245
|
+
? new Cartesian3(
|
|
1246
|
+
translationTypedArray[i * 3],
|
|
1247
|
+
translationTypedArray[i * 3 + 1],
|
|
1248
|
+
translationTypedArray[i * 3 + 2],
|
|
1249
|
+
)
|
|
1250
|
+
: Cartesian3.ZERO;
|
|
1251
|
+
|
|
1252
|
+
const rotation = hasRotation
|
|
1253
|
+
? new Quaternion(
|
|
1254
|
+
rotationTypedArray[i * 4],
|
|
1255
|
+
rotationTypedArray[i * 4 + 1],
|
|
1256
|
+
rotationTypedArray[i * 4 + 2],
|
|
1257
|
+
rotationTypedArray[i * 4 + 3],
|
|
1258
|
+
)
|
|
1259
|
+
: Quaternion.IDENTITY;
|
|
1260
|
+
|
|
1261
|
+
const scale = hasScale
|
|
1262
|
+
? new Cartesian3(
|
|
1263
|
+
scaleTypedArray[i * 3],
|
|
1264
|
+
scaleTypedArray[i * 3 + 1],
|
|
1265
|
+
scaleTypedArray[i * 3 + 2],
|
|
1266
|
+
)
|
|
1267
|
+
: Cartesian3.ONE;
|
|
1268
|
+
|
|
1269
|
+
const transform = Matrix4.fromTranslationQuaternionRotationScale(
|
|
1270
|
+
translation,
|
|
1271
|
+
rotation,
|
|
1272
|
+
scale,
|
|
1273
|
+
new Matrix4(),
|
|
1274
|
+
);
|
|
1275
|
+
|
|
1276
|
+
transforms.push(transform);
|
|
1277
|
+
}
|
|
1278
|
+
}
|
|
808
1279
|
}
|
|
809
1280
|
|
|
810
1281
|
export default ModelReader;
|
|
@@ -214,7 +214,8 @@ ModelRuntimePrimitive.prototype.configurePipeline = function (frameState) {
|
|
|
214
214
|
// Check whether the model is part of a `Model3DTileContent` that
|
|
215
215
|
// belongs to a tileset that has imagery layers. If this is the
|
|
216
216
|
// case, then the `ImageryPipelineStage` will be required.
|
|
217
|
-
const hasImageryLayers =
|
|
217
|
+
const hasImageryLayers =
|
|
218
|
+
defined(model.imageryLayers) && model.imageryLayers.length > 0;
|
|
218
219
|
|
|
219
220
|
const hasCustomShader = defined(customShader);
|
|
220
221
|
const hasCustomFragmentShader =
|
|
@@ -79,7 +79,6 @@ class PntsLoader extends ResourceLoader {
|
|
|
79
79
|
/**
|
|
80
80
|
* The cache key of the resource
|
|
81
81
|
*
|
|
82
|
-
* @memberof PntsLoader.prototype
|
|
83
82
|
*
|
|
84
83
|
* @type {string}
|
|
85
84
|
* @readonly
|
|
@@ -92,7 +91,6 @@ class PntsLoader extends ResourceLoader {
|
|
|
92
91
|
/**
|
|
93
92
|
* The loaded components.
|
|
94
93
|
*
|
|
95
|
-
* @memberof PntsLoader.prototype
|
|
96
94
|
*
|
|
97
95
|
* @type {ModelComponents.Components}
|
|
98
96
|
* @readonly
|
|
@@ -106,7 +104,6 @@ class PntsLoader extends ResourceLoader {
|
|
|
106
104
|
* A world-space transform to apply to the primitives.
|
|
107
105
|
* See {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/PointCloud#global-semantics}
|
|
108
106
|
*
|
|
109
|
-
* @memberof PntsLoader.prototype
|
|
110
107
|
*
|
|
111
108
|
* @type {Matrix4}
|
|
112
109
|
* @readonly
|
|
@@ -528,19 +525,23 @@ function makeAttributes(loader, parsedContent, context) {
|
|
|
528
525
|
|
|
529
526
|
if (defined(parsedContent.normals)) {
|
|
530
527
|
attribute = makeAttribute(loader, parsedContent.normals, context);
|
|
528
|
+
attribute.count = parsedContent.pointsLength;
|
|
531
529
|
attributes.push(attribute);
|
|
532
530
|
}
|
|
533
531
|
|
|
534
532
|
if (defined(parsedContent.colors)) {
|
|
535
533
|
attribute = makeAttribute(loader, parsedContent.colors, context);
|
|
534
|
+
attribute.count = parsedContent.pointsLength;
|
|
536
535
|
attributes.push(attribute);
|
|
537
536
|
} else {
|
|
538
537
|
attribute = makeAttribute(loader, defaultColorAttribute, context);
|
|
538
|
+
attribute.count = parsedContent.pointsLength;
|
|
539
539
|
attributes.push(attribute);
|
|
540
540
|
}
|
|
541
541
|
|
|
542
542
|
if (defined(parsedContent.batchIds)) {
|
|
543
543
|
attribute = makeAttribute(loader, parsedContent.batchIds, context);
|
|
544
|
+
attribute.count = parsedContent.pointsLength;
|
|
544
545
|
attributes.push(attribute);
|
|
545
546
|
}
|
|
546
547
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* An enum of the basic GLSL uniform types. These can be used with
|
|
3
5
|
* {@link CustomShader} to declare user-defined uniforms.
|
|
@@ -121,4 +123,6 @@ const UniformType = {
|
|
|
121
123
|
SAMPLER_CUBE: "samplerCube",
|
|
122
124
|
};
|
|
123
125
|
|
|
124
|
-
|
|
126
|
+
Object.freeze(UniformType);
|
|
127
|
+
|
|
128
|
+
export default UniformType;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* An enum for the GLSL varying types. These can be used for declaring varyings
|
|
3
5
|
* in {@link CustomShader}
|
|
@@ -58,4 +60,6 @@ const VaryingType = {
|
|
|
58
60
|
MAT4: "mat4",
|
|
59
61
|
};
|
|
60
62
|
|
|
61
|
-
|
|
63
|
+
Object.freeze(VaryingType);
|
|
64
|
+
|
|
65
|
+
export default VaryingType;
|