@cesium/engine 25.0.0 → 26.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-GPIGURCG.js → chunk-3VFEWOBI.js} +7 -7
- package/Build/Workers/{chunk-BTX2NL3P.js → chunk-424RNO3D.js} +18 -18
- package/Build/Workers/{chunk-HSVQATK2.js → chunk-4MGMYHOO.js} +6 -6
- package/Build/Workers/{chunk-FIBS5S7R.js → chunk-4S7IE3LB.js} +2 -2
- package/Build/Workers/{chunk-A7ZBMVFS.js → chunk-52JDLOEM.js} +14 -14
- package/Build/Workers/{chunk-ZCCIIBZT.js → chunk-54I6Y66F.js} +6 -6
- package/Build/Workers/{chunk-J647NNZW.js → chunk-6YEE6JDR.js} +6 -6
- package/Build/Workers/{chunk-HVMG6AG4.js → chunk-7J2HKPRH.js} +9 -9
- package/Build/Workers/{chunk-K6NFIRFB.js → chunk-7WM2PX4V.js} +5 -5
- package/Build/Workers/{chunk-3LSD7OOA.js → chunk-ACXQXN46.js} +16 -16
- package/Build/Workers/{chunk-CZ23Y3RM.js → chunk-AYKR4VBR.js} +2 -2
- package/Build/Workers/{chunk-4MTRQFJP.js → chunk-C6J67V5A.js} +1 -1
- package/Build/Workers/{chunk-WTQGE7Q6.js → chunk-C6KNZ7T4.js} +17 -17
- package/Build/Workers/{chunk-AWFZHD2B.js → chunk-CFQP6LYM.js} +4 -4
- package/Build/Workers/{chunk-ST2UWDUU.js → chunk-CXOYE2WM.js} +5 -5
- package/Build/Workers/{chunk-H2A4USJR.js → chunk-CZEYZU4N.js} +10 -10
- package/Build/Workers/{chunk-DFEI5MAV.js → chunk-DBOEKL43.js} +7 -7
- package/Build/Workers/{chunk-A7A433MD.js → chunk-DDWSZVMY.js} +5 -5
- package/Build/Workers/{chunk-J7KQEKPK.js → chunk-DOBXCNC3.js} +13 -13
- package/Build/Workers/{chunk-URUCCIPS.js → chunk-E7VQ76KE.js} +6 -6
- package/Build/Workers/{chunk-ZAPOS52G.js → chunk-EBSIOBXY.js} +8 -8
- package/Build/Workers/{chunk-3VDDRF2E.js → chunk-EF2QYXGA.js} +14 -14
- package/Build/Workers/{chunk-WN6P5UDH.js → chunk-EPYXRCDB.js} +12 -12
- package/Build/Workers/{chunk-EZARA5FJ.js → chunk-F6QDY6HU.js} +13 -13
- package/Build/Workers/{chunk-GL7DNVUS.js → chunk-FRQZECAO.js} +5 -5
- package/Build/Workers/{chunk-VQKLRBIK.js → chunk-G7PXZRVF.js} +7 -7
- package/Build/Workers/{chunk-4QQXGTCE.js → chunk-INUEEEQA.js} +8 -8
- package/Build/Workers/{chunk-ITD2IN7N.js → chunk-IRBKFCEJ.js} +2 -2
- package/Build/Workers/{chunk-6SDGQI27.js → chunk-IYOUHCZB.js} +1 -1
- package/Build/Workers/{chunk-DYT5NR6P.js → chunk-J6BWOHUF.js} +3 -3
- package/Build/Workers/{chunk-4GF4MVPY.js → chunk-KFSTQKNM.js} +7 -7
- package/Build/Workers/{chunk-4XXHJI6Y.js → chunk-KKOSKAZB.js} +17 -17
- package/Build/Workers/{chunk-WC57YYBN.js → chunk-KSSWJIZW.js} +2 -2
- package/Build/Workers/{chunk-5T6QQAJW.js → chunk-M3B5JKSM.js} +1 -1
- package/Build/Workers/{chunk-QO2CGXMP.js → chunk-MPZHGZU6.js} +6 -6
- package/Build/Workers/{chunk-WUBKZFF6.js → chunk-MYP774IS.js} +9 -9
- package/Build/Workers/{chunk-WNN5D4W3.js → chunk-O3EA5HS7.js} +10 -10
- package/Build/Workers/{chunk-77RL3MBD.js → chunk-P3CK7MCY.js} +25 -4
- package/Build/Workers/{chunk-QXNQQYPV.js → chunk-Q3PY526V.js} +8 -8
- package/Build/Workers/{chunk-CKQP3DSS.js → chunk-QN67VG36.js} +6 -6
- package/Build/Workers/{chunk-ACFFCHHZ.js → chunk-QRWGUWI6.js} +11 -11
- package/Build/Workers/{chunk-LH5SF3XV.js → chunk-S4MCOY6I.js} +5 -5
- package/Build/Workers/{chunk-FVLVVOBQ.js → chunk-SMQZZOW6.js} +10 -10
- package/Build/Workers/{chunk-TA777BGS.js → chunk-TKKIREQ6.js} +1 -1
- package/Build/Workers/{chunk-AEAVLYPS.js → chunk-U3ZA64U7.js} +2 -2
- package/Build/Workers/{chunk-7LSFAEWF.js → chunk-UA25D5MX.js} +10 -10
- package/Build/Workers/{chunk-J3OFS2RD.js → chunk-UOOIQ3KX.js} +12 -12
- package/Build/Workers/{chunk-ND3NTTOF.js → chunk-V7VQKN6N.js} +6 -6
- package/Build/Workers/{chunk-I3A6DXYZ.js → chunk-VQYETPWC.js} +4 -4
- package/Build/Workers/{chunk-35H3UBIO.js → chunk-VWV2IJRB.js} +11 -11
- package/Build/Workers/{chunk-QSDY4NS7.js → chunk-XZMBNNDX.js} +9 -9
- package/Build/Workers/{chunk-TAI4HLII.js → chunk-Y57HREW5.js} +4 -4
- package/Build/Workers/{chunk-3TKLDHV3.js → chunk-Y5BF6AFU.js} +2 -2
- package/Build/Workers/{chunk-3XY3MVPG.js → chunk-YLY7NKAB.js} +4 -4
- package/Build/Workers/{chunk-BVAIWR7O.js → chunk-ZK3CF7ZD.js} +12 -12
- package/Build/Workers/{chunk-DH26SNAB.js → chunk-ZP7JMQV4.js} +1 -1
- package/Build/Workers/{chunk-3RFFPH4M.js → chunk-ZZ46LWL6.js} +1 -1
- 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 +22 -22
- 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 +22 -22
- 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 +6 -6
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
- package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
- package/Source/Core/Cartesian2.js +1 -1
- package/Source/Core/Cartesian3.js +1 -1
- package/Source/Core/Cartesian4.js +1 -1
- package/Source/Core/ComponentDatatype.js +35 -0
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/MapProjection.js +1 -0
- package/Source/Core/Matrix2.js +1 -1
- package/Source/Core/Matrix3.js +1 -1
- package/Source/Core/Matrix4.js +1 -1
- package/Source/Core/Resource.js +1 -1
- package/Source/Core/ScreenSpaceEventHandler.js +51 -41
- package/Source/Core/createColorRamp.js +37 -0
- package/Source/Core/globalTypes.js +25 -0
- package/Source/Renderer/Pass.js +3 -2
- package/Source/Renderer/createUniform.js +346 -239
- package/Source/Renderer/createUniformArray.js +494 -381
- package/Source/Scene/ArcGisMapService.js +1 -1
- package/Source/Scene/BufferPoint.js +1 -0
- package/Source/Scene/BufferPointCollection.js +14 -1
- package/Source/Scene/BufferPolygon.js +3 -2
- package/Source/Scene/BufferPolygonCollection.js +10 -0
- package/Source/Scene/BufferPolyline.js +1 -0
- package/Source/Scene/BufferPolylineCollection.js +2 -0
- package/Source/Scene/BufferPrimitiveCollection.js +79 -28
- package/Source/Scene/CameraEventAggregator.js +30 -18
- package/Source/Scene/Cesium3DTile.js +54 -1
- package/Source/Scene/Cesium3DTileContent.js +195 -254
- package/Source/Scene/Cesium3DTileContentFactory.js +10 -2
- package/Source/Scene/Cesium3DTileset.js +45 -5
- package/Source/Scene/Composite3DTileContent.js +254 -292
- package/Source/Scene/EdgeDisplayMode.js +50 -0
- package/Source/Scene/Empty3DTileContent.js +100 -132
- package/Source/Scene/GaussianSplat3DTileContent.js +436 -478
- package/Source/Scene/GeoJsonPrimitive.js +874 -0
- package/Source/Scene/Geometry3DTileContent.js +151 -185
- package/Source/Scene/GltfLoader.js +109 -0
- package/Source/Scene/Implicit3DTileContent.js +179 -214
- package/Source/Scene/MVTDataProvider.js +147 -0
- package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +79 -311
- package/Source/Scene/Model/Model.js +34 -0
- package/Source/Scene/Model/Model3DTileContent.js +424 -458
- package/Source/Scene/Model/ModelDrawCommand.js +31 -3
- package/Source/Scene/Model/ModelUtility.js +4 -0
- package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +466 -150
- package/Source/Scene/ModelComponents.js +39 -1
- package/Source/Scene/Multiple3DTileContent.js +291 -334
- package/Source/Scene/Scene.js +26 -0
- package/Source/Scene/Tileset3DTileContent.js +113 -146
- package/Source/Scene/UrlTemplate3DTilesDataProvider.js +499 -0
- package/Source/Scene/Vector3DTileContent.js +205 -234
- package/Source/Scene/VectorGltf3DTileContent.js +85 -36
- package/Source/Scene/VoxelPrimitive.js +159 -175
- package/Source/Scene/VoxelProvider.js +64 -91
- package/Source/Scene/buildVectorGltfFromMVT.js +1059 -0
- package/Source/Scene/buildVoxelCustomShader.js +199 -0
- package/Source/Scene/decodeMVT.js +634 -0
- package/Source/Scene/renderBufferPointCollection.js +110 -64
- package/Source/Scene/renderBufferPolygonCollection.js +102 -55
- package/Source/Scene/renderBufferPolylineCollection.js +365 -166
- package/Source/Shaders/BufferPointMaterialFS.glsl +1 -0
- package/Source/Shaders/BufferPointMaterialFS.js +1 -0
- package/Source/Shaders/BufferPointMaterialVS.glsl +19 -9
- package/Source/Shaders/BufferPointMaterialVS.js +20 -10
- package/Source/Shaders/BufferPolygonMaterialVS.glsl +13 -4
- package/Source/Shaders/BufferPolygonMaterialVS.js +14 -5
- package/Source/Shaders/BufferPolylineMaterialVS.glsl +16 -2
- package/Source/Shaders/BufferPolylineMaterialVS.js +17 -3
- package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.glsl +9 -0
- package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.js +11 -0
- package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
- package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
- package/Source/Shaders/Builtin/CzmBuiltins.js +2 -0
- package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +0 -1
- package/Source/Shaders/Model/EdgeVisibilityStageVS.js +0 -1
- package/index.d.ts +253 -35
- package/index.js +71 -62
- package/package.json +2 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import buildVoxelCustomShader from "./buildVoxelCustomShader.js";
|
|
1
2
|
import buildVoxelDrawCommands from "./buildVoxelDrawCommands.js";
|
|
2
3
|
import Cartesian2 from "../Core/Cartesian2.js";
|
|
3
4
|
import Cartesian3 from "../Core/Cartesian3.js";
|
|
@@ -51,6 +52,13 @@ import VoxelMetadataOrder from "./VoxelMetadataOrder.js";
|
|
|
51
52
|
*/
|
|
52
53
|
function VoxelPrimitive(options) {
|
|
53
54
|
options = options ?? Frozen.EMPTY_OBJECT;
|
|
55
|
+
const {
|
|
56
|
+
provider = VoxelPrimitive.DefaultProvider,
|
|
57
|
+
modelMatrix = Matrix4.IDENTITY,
|
|
58
|
+
customShader = buildVoxelCustomShader(provider),
|
|
59
|
+
clock,
|
|
60
|
+
calculateStatistics = false,
|
|
61
|
+
} = options;
|
|
54
62
|
|
|
55
63
|
/**
|
|
56
64
|
* @type {boolean}
|
|
@@ -62,10 +70,10 @@ function VoxelPrimitive(options) {
|
|
|
62
70
|
* @type {VoxelProvider}
|
|
63
71
|
* @private
|
|
64
72
|
*/
|
|
65
|
-
this._provider =
|
|
73
|
+
this._provider = provider;
|
|
66
74
|
|
|
67
75
|
/**
|
|
68
|
-
* This member is not created until the
|
|
76
|
+
* This member is not created until the first update loop.
|
|
69
77
|
*
|
|
70
78
|
* @type {VoxelTraversal}
|
|
71
79
|
* @private
|
|
@@ -82,73 +90,64 @@ function VoxelPrimitive(options) {
|
|
|
82
90
|
* @type {boolean}
|
|
83
91
|
* @private
|
|
84
92
|
*/
|
|
85
|
-
this._calculateStatistics =
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* This member is not created until the provider is ready.
|
|
89
|
-
*
|
|
90
|
-
* @type {VoxelShape}
|
|
91
|
-
* @private
|
|
92
|
-
*/
|
|
93
|
-
this._shape = undefined;
|
|
93
|
+
this._calculateStatistics = calculateStatistics;
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
const {
|
|
96
|
+
shape: shapeType,
|
|
97
|
+
minBounds = VoxelShapeType.getMinBounds(shapeType),
|
|
98
|
+
maxBounds = VoxelShapeType.getMaxBounds(shapeType),
|
|
99
|
+
dimensions,
|
|
100
|
+
paddingBefore = Cartesian3.ZERO,
|
|
101
|
+
paddingAfter = Cartesian3.ZERO,
|
|
102
|
+
metadataOrder,
|
|
103
|
+
availableLevels = 1,
|
|
104
|
+
} = provider;
|
|
100
105
|
|
|
101
106
|
/**
|
|
102
|
-
* This member is not created until the provider is ready.
|
|
103
|
-
*
|
|
104
107
|
* @type {Cartesian3}
|
|
108
|
+
* @readonly
|
|
109
|
+
* @constant
|
|
105
110
|
* @private
|
|
106
111
|
*/
|
|
107
|
-
this._dimensions =
|
|
112
|
+
this._dimensions = Cartesian3.clone(dimensions);
|
|
108
113
|
|
|
109
114
|
/**
|
|
110
|
-
* This member is not created until the provider is ready.
|
|
111
|
-
*
|
|
112
115
|
* @type {Cartesian3}
|
|
113
116
|
* @private
|
|
114
117
|
*/
|
|
115
|
-
this.
|
|
118
|
+
this._paddingBefore = Cartesian3.clone(paddingBefore);
|
|
116
119
|
|
|
117
120
|
/**
|
|
118
|
-
* This member is not created until the provider is ready.
|
|
119
|
-
*
|
|
120
121
|
* @type {Cartesian3}
|
|
121
122
|
* @private
|
|
122
123
|
*/
|
|
123
|
-
this.
|
|
124
|
+
this._paddingAfter = Cartesian3.clone(paddingAfter);
|
|
124
125
|
|
|
125
126
|
/**
|
|
126
|
-
* This member is not created until the provider is ready.
|
|
127
|
-
*
|
|
128
127
|
* @type {Cartesian3}
|
|
129
128
|
* @private
|
|
130
129
|
*/
|
|
131
|
-
this.
|
|
130
|
+
this._inputDimensions = computeInputDimensions(
|
|
131
|
+
dimensions,
|
|
132
|
+
paddingBefore,
|
|
133
|
+
paddingAfter,
|
|
134
|
+
metadataOrder,
|
|
135
|
+
);
|
|
132
136
|
|
|
133
137
|
/**
|
|
134
|
-
* This member is not known until the provider is ready.
|
|
135
|
-
*
|
|
136
138
|
* @type {number}
|
|
137
139
|
* @private
|
|
138
140
|
*/
|
|
139
|
-
this._availableLevels =
|
|
141
|
+
this._availableLevels = availableLevels;
|
|
140
142
|
|
|
141
143
|
/**
|
|
142
|
-
* This member is not known until the provider is ready.
|
|
143
|
-
*
|
|
144
144
|
* @type {Cartesian3}
|
|
145
145
|
* @private
|
|
146
146
|
*/
|
|
147
|
-
this._minBounds =
|
|
147
|
+
this._minBounds = minBounds.clone();
|
|
148
148
|
|
|
149
149
|
/**
|
|
150
150
|
* Used to detect if the shape is dirty.
|
|
151
|
-
* This member is not known until the provider is ready.
|
|
152
151
|
*
|
|
153
152
|
* @type {Cartesian3}
|
|
154
153
|
* @private
|
|
@@ -156,16 +155,13 @@ function VoxelPrimitive(options) {
|
|
|
156
155
|
this._minBoundsOld = new Cartesian3();
|
|
157
156
|
|
|
158
157
|
/**
|
|
159
|
-
* This member is not known until the provider is ready.
|
|
160
|
-
*
|
|
161
158
|
* @type {Cartesian3}
|
|
162
159
|
* @private
|
|
163
160
|
*/
|
|
164
|
-
this._maxBounds =
|
|
161
|
+
this._maxBounds = maxBounds.clone();
|
|
165
162
|
|
|
166
163
|
/**
|
|
167
164
|
* Used to detect if the shape is dirty.
|
|
168
|
-
* This member is not known until the provider is ready.
|
|
169
165
|
*
|
|
170
166
|
* @type {Cartesian3}
|
|
171
167
|
* @private
|
|
@@ -173,16 +169,13 @@ function VoxelPrimitive(options) {
|
|
|
173
169
|
this._maxBoundsOld = new Cartesian3();
|
|
174
170
|
|
|
175
171
|
/**
|
|
176
|
-
* This member is not known until the provider is ready.
|
|
177
|
-
*
|
|
178
172
|
* @type {Cartesian3}
|
|
179
173
|
* @private
|
|
180
174
|
*/
|
|
181
|
-
this._minClippingBounds =
|
|
175
|
+
this._minClippingBounds = minBounds.clone();
|
|
182
176
|
|
|
183
177
|
/**
|
|
184
178
|
* Used to detect if the clipping is dirty.
|
|
185
|
-
* This member is not known until the provider is ready.
|
|
186
179
|
*
|
|
187
180
|
* @type {Cartesian3}
|
|
188
181
|
* @private
|
|
@@ -190,16 +183,13 @@ function VoxelPrimitive(options) {
|
|
|
190
183
|
this._minClippingBoundsOld = new Cartesian3();
|
|
191
184
|
|
|
192
185
|
/**
|
|
193
|
-
* This member is not known until the provider is ready.
|
|
194
|
-
*
|
|
195
186
|
* @type {Cartesian3}
|
|
196
187
|
* @private
|
|
197
188
|
*/
|
|
198
|
-
this._maxClippingBounds =
|
|
189
|
+
this._maxClippingBounds = maxBounds.clone();
|
|
199
190
|
|
|
200
191
|
/**
|
|
201
192
|
* Used to detect if the clipping is dirty.
|
|
202
|
-
* This member is not known until the provider is ready.
|
|
203
193
|
*
|
|
204
194
|
* @type {Cartesian3}
|
|
205
195
|
* @private
|
|
@@ -252,7 +242,7 @@ function VoxelPrimitive(options) {
|
|
|
252
242
|
* @type {Matrix4}
|
|
253
243
|
* @private
|
|
254
244
|
*/
|
|
255
|
-
this._modelMatrix = Matrix4.clone(
|
|
245
|
+
this._modelMatrix = Matrix4.clone(modelMatrix);
|
|
256
246
|
|
|
257
247
|
/**
|
|
258
248
|
* Used to detect if the model matrix is dirty.
|
|
@@ -266,8 +256,7 @@ function VoxelPrimitive(options) {
|
|
|
266
256
|
* @type {CustomShader}
|
|
267
257
|
* @private
|
|
268
258
|
*/
|
|
269
|
-
this._customShader =
|
|
270
|
-
options.customShader ?? VoxelPrimitive.DefaultCustomShader;
|
|
259
|
+
this._customShader = customShader ?? VoxelPrimitive.DefaultCustomShader;
|
|
271
260
|
|
|
272
261
|
/**
|
|
273
262
|
* @type {Event}
|
|
@@ -303,7 +292,7 @@ function VoxelPrimitive(options) {
|
|
|
303
292
|
* @type {Clock}
|
|
304
293
|
* @private
|
|
305
294
|
*/
|
|
306
|
-
this._clock =
|
|
295
|
+
this._clock = clock;
|
|
307
296
|
|
|
308
297
|
// Transforms and other values that are computed when the shape changes
|
|
309
298
|
/**
|
|
@@ -393,6 +382,22 @@ function VoxelPrimitive(options) {
|
|
|
393
382
|
*/
|
|
394
383
|
this._disableUpdate = false;
|
|
395
384
|
|
|
385
|
+
const ShapeConstructor = VoxelShapeType.getShapeConstructor(shapeType);
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* @type {VoxelShape}
|
|
389
|
+
* @private
|
|
390
|
+
*/
|
|
391
|
+
this._shape = new ShapeConstructor();
|
|
392
|
+
|
|
393
|
+
checkTransformAndBounds(this);
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* @type {boolean}
|
|
397
|
+
* @private
|
|
398
|
+
*/
|
|
399
|
+
this._shapeVisible = updateShapeAndTransforms(this);
|
|
400
|
+
|
|
396
401
|
/**
|
|
397
402
|
* @type {Object<string, any>}
|
|
398
403
|
* @private
|
|
@@ -406,10 +411,10 @@ function VoxelPrimitive(options) {
|
|
|
406
411
|
octreeLeafNodeTexelSizeUv: new Cartesian2(),
|
|
407
412
|
megatextureTextures: [],
|
|
408
413
|
megatextureTileCounts: new Cartesian3(),
|
|
409
|
-
dimensions:
|
|
410
|
-
inputDimensions:
|
|
411
|
-
paddingBefore:
|
|
412
|
-
paddingAfter:
|
|
414
|
+
dimensions: this._dimensions,
|
|
415
|
+
inputDimensions: this._inputDimensions,
|
|
416
|
+
paddingBefore: this._paddingBefore,
|
|
417
|
+
paddingAfter: this._paddingAfter,
|
|
413
418
|
transformPositionViewToLocal: new Matrix4(),
|
|
414
419
|
transformDirectionViewToLocal: new Matrix3(),
|
|
415
420
|
cameraPositionLocal: new Cartesian3(),
|
|
@@ -420,7 +425,7 @@ function VoxelPrimitive(options) {
|
|
|
420
425
|
clippingPlanesTexture: undefined,
|
|
421
426
|
clippingPlanesMatrix: new Matrix4(),
|
|
422
427
|
renderBoundPlanesTexture: undefined,
|
|
423
|
-
stepSize:
|
|
428
|
+
stepSize: this._stepSizeMultiplier,
|
|
424
429
|
pickColor: new Color(),
|
|
425
430
|
};
|
|
426
431
|
|
|
@@ -449,6 +454,8 @@ function VoxelPrimitive(options) {
|
|
|
449
454
|
}
|
|
450
455
|
}
|
|
451
456
|
|
|
457
|
+
setupShapeUniformsAndDefines(this, this._shape);
|
|
458
|
+
|
|
452
459
|
/**
|
|
453
460
|
* The event fired to indicate that a tile's content was loaded.
|
|
454
461
|
* <p>
|
|
@@ -565,31 +572,68 @@ function VoxelPrimitive(options) {
|
|
|
565
572
|
* @see Cesium3DTileset#allTilesLoaded
|
|
566
573
|
*/
|
|
567
574
|
this.initialTilesLoaded = new Event();
|
|
568
|
-
|
|
569
|
-
// If the provider fails to initialize the primitive will fail too.
|
|
570
|
-
const provider = this._provider;
|
|
571
|
-
initialize(this, provider);
|
|
572
575
|
}
|
|
573
576
|
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
577
|
+
/**
|
|
578
|
+
* Computes the dimensions of the input voxel data, including padding and in the input orientation.
|
|
579
|
+
*
|
|
580
|
+
* @param {Cartesian3} dimensions The dimensions of the voxel data, not including padding, in z-up orientation.
|
|
581
|
+
* @param {Cartesian3} paddingBefore The padding before the voxel data.
|
|
582
|
+
* @param {Cartesian3} paddingAfter The padding after the voxel data.
|
|
583
|
+
* @param {VoxelMetadataOrder} metadataOrder The ordering of the input metadata dimensions.
|
|
584
|
+
*
|
|
585
|
+
* @private
|
|
586
|
+
*/
|
|
587
|
+
function computeInputDimensions(
|
|
588
|
+
dimensions,
|
|
589
|
+
paddingBefore,
|
|
590
|
+
paddingAfter,
|
|
591
|
+
metadataOrder,
|
|
592
|
+
) {
|
|
593
|
+
const inputDimensions = Cartesian3.add(
|
|
594
|
+
dimensions,
|
|
595
|
+
paddingBefore,
|
|
596
|
+
new Cartesian3(),
|
|
597
|
+
);
|
|
598
|
+
Cartesian3.add(inputDimensions, paddingAfter, inputDimensions);
|
|
599
|
+
if (metadataOrder === VoxelMetadataOrder.Y_UP) {
|
|
600
|
+
const inputDimensionsY = inputDimensions.y;
|
|
601
|
+
inputDimensions.y = inputDimensions.z;
|
|
602
|
+
inputDimensions.z = inputDimensionsY;
|
|
603
|
+
}
|
|
604
|
+
return inputDimensions;
|
|
605
|
+
}
|
|
581
606
|
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
607
|
+
/**
|
|
608
|
+
* Combine uniforms from the shape with the primitive uniform map, and
|
|
609
|
+
* setup change tracking for shape defines to know when to rebuild the shader.
|
|
610
|
+
*
|
|
611
|
+
* @param {VoxelPrimitive} primitive The primitive with which the shape uniforms are associated.
|
|
612
|
+
* @param {VoxelShape} shape The shape from which to pull the shader uniforms and defines.
|
|
613
|
+
*
|
|
614
|
+
* @private
|
|
615
|
+
*/
|
|
616
|
+
function setupShapeUniformsAndDefines(primitive, shape) {
|
|
617
|
+
const uniformMap = primitive._uniformMap;
|
|
618
|
+
const { shaderUniforms, shaderDefines } = shape;
|
|
619
|
+
for (const uniformName in shaderUniforms) {
|
|
620
|
+
if (shaderUniforms.hasOwnProperty(uniformName)) {
|
|
621
|
+
const name = `u_${uniformName}`;
|
|
586
622
|
|
|
587
|
-
|
|
623
|
+
//>>includeStart('debug', pragmas.debug);
|
|
624
|
+
if (defined(uniformMap[name])) {
|
|
625
|
+
oneTimeWarning(
|
|
626
|
+
`VoxelPrimitive: Uniform name "${name}" is already defined`,
|
|
627
|
+
);
|
|
628
|
+
}
|
|
629
|
+
//>>includeEnd('debug');
|
|
588
630
|
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
631
|
+
uniformMap[name] = function () {
|
|
632
|
+
return shaderUniforms[uniformName];
|
|
633
|
+
};
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
primitive._shapeDefinesOld = clone(shaderDefines, true);
|
|
593
637
|
}
|
|
594
638
|
|
|
595
639
|
Object.defineProperties(VoxelPrimitive.prototype, {
|
|
@@ -685,6 +729,7 @@ Object.defineProperties(VoxelPrimitive.prototype, {
|
|
|
685
729
|
* @memberof VoxelPrimitive.prototype
|
|
686
730
|
* @type {Cartesian3}
|
|
687
731
|
* @readonly
|
|
732
|
+
* @constant
|
|
688
733
|
*/
|
|
689
734
|
dimensions: {
|
|
690
735
|
get: function () {
|
|
@@ -698,6 +743,7 @@ Object.defineProperties(VoxelPrimitive.prototype, {
|
|
|
698
743
|
* @memberof VoxelPrimitive.prototype
|
|
699
744
|
* @type {Cartesian3}
|
|
700
745
|
* @readonly
|
|
746
|
+
* @constant
|
|
701
747
|
*/
|
|
702
748
|
inputDimensions: {
|
|
703
749
|
get: function () {
|
|
@@ -711,6 +757,7 @@ Object.defineProperties(VoxelPrimitive.prototype, {
|
|
|
711
757
|
* @memberof VoxelPrimitive.prototype
|
|
712
758
|
* @type {Cartesian3}
|
|
713
759
|
* @readonly
|
|
760
|
+
* @constant
|
|
714
761
|
*/
|
|
715
762
|
paddingBefore: {
|
|
716
763
|
get: function () {
|
|
@@ -724,6 +771,7 @@ Object.defineProperties(VoxelPrimitive.prototype, {
|
|
|
724
771
|
* @memberof VoxelPrimitive.prototype
|
|
725
772
|
* @type {Cartesian3}
|
|
726
773
|
* @readonly
|
|
774
|
+
* @constant
|
|
727
775
|
*/
|
|
728
776
|
paddingAfter: {
|
|
729
777
|
get: function () {
|
|
@@ -737,6 +785,7 @@ Object.defineProperties(VoxelPrimitive.prototype, {
|
|
|
737
785
|
* @memberof VoxelPrimitive.prototype
|
|
738
786
|
* @type {number[][]}
|
|
739
787
|
* @readonly
|
|
788
|
+
* @constant
|
|
740
789
|
*/
|
|
741
790
|
minimumValues: {
|
|
742
791
|
get: function () {
|
|
@@ -750,6 +799,7 @@ Object.defineProperties(VoxelPrimitive.prototype, {
|
|
|
750
799
|
* @memberof VoxelPrimitive.prototype
|
|
751
800
|
* @type {number[][]}
|
|
752
801
|
* @readonly
|
|
802
|
+
* @constant
|
|
753
803
|
*/
|
|
754
804
|
maximumValues: {
|
|
755
805
|
get: function () {
|
|
@@ -1023,7 +1073,8 @@ Object.defineProperties(VoxelPrimitive.prototype, {
|
|
|
1023
1073
|
},
|
|
1024
1074
|
|
|
1025
1075
|
/**
|
|
1026
|
-
* Gets or sets the custom shader. If undefined,
|
|
1076
|
+
* Gets or sets the custom shader. If undefined, attempt to build a default custom shader
|
|
1077
|
+
* appropriate to the metadata type. If that fails, use {@link VoxelPrimitive.DefaultCustomShader}.
|
|
1027
1078
|
*
|
|
1028
1079
|
* @memberof VoxelPrimitive.prototype
|
|
1029
1080
|
* @type {CustomShader}
|
|
@@ -1034,28 +1085,28 @@ Object.defineProperties(VoxelPrimitive.prototype, {
|
|
|
1034
1085
|
return this._customShader;
|
|
1035
1086
|
},
|
|
1036
1087
|
set: function (customShader) {
|
|
1037
|
-
if (this._customShader
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
delete uniformMap[uniformName];
|
|
1049
|
-
}
|
|
1088
|
+
if (customShader === this._customShader) {
|
|
1089
|
+
return;
|
|
1090
|
+
}
|
|
1091
|
+
// Delete old custom shader entries from the uniform map
|
|
1092
|
+
// (they were added in VoxelRenderResources when the shader was built)
|
|
1093
|
+
const uniformMap = this._uniformMap;
|
|
1094
|
+
const oldCustomShader = this._customShader;
|
|
1095
|
+
const oldCustomShaderUniformMap = oldCustomShader.uniformMap;
|
|
1096
|
+
for (const uniformName in oldCustomShaderUniformMap) {
|
|
1097
|
+
if (oldCustomShaderUniformMap.hasOwnProperty(uniformName)) {
|
|
1098
|
+
delete uniformMap[uniformName];
|
|
1050
1099
|
}
|
|
1100
|
+
}
|
|
1051
1101
|
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
this.
|
|
1102
|
+
if (!defined(customShader)) {
|
|
1103
|
+
const defaultShader = buildVoxelCustomShader(this._provider);
|
|
1104
|
+
this._customShader =
|
|
1105
|
+
defaultShader ?? VoxelPrimitive.DefaultCustomShader;
|
|
1106
|
+
} else {
|
|
1107
|
+
this._customShader = customShader;
|
|
1058
1108
|
}
|
|
1109
|
+
this._shaderDirty = true;
|
|
1059
1110
|
},
|
|
1060
1111
|
},
|
|
1061
1112
|
|
|
@@ -1073,8 +1124,8 @@ Object.defineProperties(VoxelPrimitive.prototype, {
|
|
|
1073
1124
|
},
|
|
1074
1125
|
|
|
1075
1126
|
/**
|
|
1076
|
-
*
|
|
1077
|
-
* To use `visited` and `numberOfTilesWithContentReady` statistics, set options.
|
|
1127
|
+
* Loading and rendering information for requested content.
|
|
1128
|
+
* To use `visited` and `numberOfTilesWithContentReady` statistics, set options.calculateStatistics` to `true` in the constructor.
|
|
1078
1129
|
* @type {Cesium3DTilesetStatistics}
|
|
1079
1130
|
* @readonly
|
|
1080
1131
|
* @private
|
|
@@ -1106,12 +1157,13 @@ VoxelPrimitive.prototype.update = function (frameState) {
|
|
|
1106
1157
|
// Update the custom shader in case it has texture uniforms.
|
|
1107
1158
|
this._customShader.update(frameState);
|
|
1108
1159
|
|
|
1109
|
-
// Initialize from the
|
|
1160
|
+
// Initialize from the provider. This only happens once.
|
|
1110
1161
|
const context = frameState.context;
|
|
1111
1162
|
if (!this._ready) {
|
|
1112
|
-
|
|
1113
|
-
// Set the primitive as ready after the first frame render since
|
|
1114
|
-
// the
|
|
1163
|
+
initializeFromContext(this, provider, context);
|
|
1164
|
+
// Set the primitive as ready after the first frame render since
|
|
1165
|
+
// the user might set up events subscribed to the post render event,
|
|
1166
|
+
// and the primitive may not be ready for those past the first frame.
|
|
1115
1167
|
frameState.afterRender.push(() => {
|
|
1116
1168
|
this._ready = true;
|
|
1117
1169
|
return true;
|
|
@@ -1368,82 +1420,12 @@ function updateVerticalExaggeration(primitive, frameState) {
|
|
|
1368
1420
|
* @param {Context} context
|
|
1369
1421
|
* @private
|
|
1370
1422
|
*/
|
|
1371
|
-
function
|
|
1423
|
+
function initializeFromContext(primitive, provider, context) {
|
|
1372
1424
|
const uniforms = primitive._uniforms;
|
|
1373
1425
|
|
|
1374
1426
|
primitive._pickId = context.createPickId({ primitive });
|
|
1375
1427
|
uniforms.pickColor = Color.clone(primitive._pickId.color, uniforms.pickColor);
|
|
1376
1428
|
|
|
1377
|
-
const { shaderDefines, shaderUniforms: shapeUniforms } = primitive._shape;
|
|
1378
|
-
primitive._shapeDefinesOld = clone(shaderDefines, true);
|
|
1379
|
-
|
|
1380
|
-
// Add shape uniforms to the uniform map
|
|
1381
|
-
const uniformMap = primitive._uniformMap;
|
|
1382
|
-
for (const key in shapeUniforms) {
|
|
1383
|
-
if (shapeUniforms.hasOwnProperty(key)) {
|
|
1384
|
-
const name = `u_${key}`;
|
|
1385
|
-
|
|
1386
|
-
//>>includeStart('debug', pragmas.debug);
|
|
1387
|
-
if (defined(uniformMap[name])) {
|
|
1388
|
-
oneTimeWarning(
|
|
1389
|
-
`VoxelPrimitive: Uniform name "${name}" is already defined`,
|
|
1390
|
-
);
|
|
1391
|
-
}
|
|
1392
|
-
//>>includeEnd('debug');
|
|
1393
|
-
|
|
1394
|
-
uniformMap[name] = function () {
|
|
1395
|
-
return shapeUniforms[key];
|
|
1396
|
-
};
|
|
1397
|
-
}
|
|
1398
|
-
}
|
|
1399
|
-
|
|
1400
|
-
// Set uniforms that come from the provider.
|
|
1401
|
-
// Note that minBounds and maxBounds can be set dynamically, so their uniforms aren't set here.
|
|
1402
|
-
primitive._dimensions = Cartesian3.clone(
|
|
1403
|
-
provider.dimensions,
|
|
1404
|
-
primitive._dimensions,
|
|
1405
|
-
);
|
|
1406
|
-
uniforms.dimensions = Cartesian3.clone(
|
|
1407
|
-
primitive._dimensions,
|
|
1408
|
-
uniforms.dimensions,
|
|
1409
|
-
);
|
|
1410
|
-
primitive._paddingBefore = Cartesian3.clone(
|
|
1411
|
-
provider.paddingBefore ?? Cartesian3.ZERO,
|
|
1412
|
-
primitive._paddingBefore,
|
|
1413
|
-
);
|
|
1414
|
-
uniforms.paddingBefore = Cartesian3.clone(
|
|
1415
|
-
primitive._paddingBefore,
|
|
1416
|
-
uniforms.paddingBefore,
|
|
1417
|
-
);
|
|
1418
|
-
primitive._paddingAfter = Cartesian3.clone(
|
|
1419
|
-
provider.paddingAfter ?? Cartesian3.ZERO,
|
|
1420
|
-
primitive._paddingAfter,
|
|
1421
|
-
);
|
|
1422
|
-
uniforms.paddingAfter = Cartesian3.clone(
|
|
1423
|
-
primitive._paddingAfter,
|
|
1424
|
-
uniforms.paddingAfter,
|
|
1425
|
-
);
|
|
1426
|
-
primitive._inputDimensions = Cartesian3.add(
|
|
1427
|
-
primitive._dimensions,
|
|
1428
|
-
primitive._paddingBefore,
|
|
1429
|
-
primitive._inputDimensions,
|
|
1430
|
-
);
|
|
1431
|
-
primitive._inputDimensions = Cartesian3.add(
|
|
1432
|
-
primitive._inputDimensions,
|
|
1433
|
-
primitive._paddingAfter,
|
|
1434
|
-
primitive._inputDimensions,
|
|
1435
|
-
);
|
|
1436
|
-
if (provider.metadataOrder === VoxelMetadataOrder.Y_UP) {
|
|
1437
|
-
const inputDimensionsY = primitive._inputDimensions.y;
|
|
1438
|
-
primitive._inputDimensions.y = primitive._inputDimensions.z;
|
|
1439
|
-
primitive._inputDimensions.z = inputDimensionsY;
|
|
1440
|
-
}
|
|
1441
|
-
uniforms.inputDimensions = Cartesian3.clone(
|
|
1442
|
-
primitive._inputDimensions,
|
|
1443
|
-
uniforms.inputDimensions,
|
|
1444
|
-
);
|
|
1445
|
-
primitive._availableLevels = provider.availableLevels ?? 1;
|
|
1446
|
-
|
|
1447
1429
|
// Create the VoxelTraversal, and set related uniforms
|
|
1448
1430
|
const keyframeCount = provider.keyframeCount ?? 1;
|
|
1449
1431
|
primitive._traversal = new VoxelTraversal(primitive, context, keyframeCount);
|
|
@@ -2122,13 +2104,15 @@ function debugDraw(that, frameState) {
|
|
|
2122
2104
|
VoxelPrimitive.DefaultCustomShader = new CustomShader({
|
|
2123
2105
|
fragmentShaderText: `void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material)
|
|
2124
2106
|
{
|
|
2125
|
-
|
|
2107
|
+
vec3 voxelNormal = fsInput.attributes.normalEC;
|
|
2108
|
+
float diffuse = max(0.0, dot(voxelNormal, czm_lightDirectionEC));
|
|
2109
|
+
float lighting = 0.5 + 0.5 * diffuse;
|
|
2110
|
+
material.diffuse = vec3(lighting);
|
|
2126
2111
|
material.alpha = 1.0;
|
|
2127
2112
|
}`,
|
|
2128
2113
|
});
|
|
2129
2114
|
|
|
2130
2115
|
function DefaultVoxelProvider() {
|
|
2131
|
-
this.ready = true;
|
|
2132
2116
|
this.shape = VoxelShapeType.BOX;
|
|
2133
2117
|
this.dimensions = new Cartesian3(1, 1, 1);
|
|
2134
2118
|
this.names = ["data"];
|