s3m-three 0.4.26 → 0.4.28
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/dist/browser/assets/s3mWorker-B2u-xt54.js +1 -0
- package/dist/browser/s3m-three.iife.ext-three.js +52 -40
- package/dist/browser/s3m-three.iife.js +52 -40
- package/dist/core/BakeMercator.d.ts +54 -0
- package/dist/core/BakeMercator.d.ts.map +1 -0
- package/dist/core/BakeMercator.js +65 -0
- package/dist/core/BakeMercator.js.map +1 -0
- package/dist/core/S3M1Parser.d.ts +19 -0
- package/dist/core/S3M1Parser.d.ts.map +1 -1
- package/dist/core/S3M1Parser.js +179 -8
- package/dist/core/S3M1Parser.js.map +1 -1
- package/dist/core/TileGeometry.d.ts +7 -0
- package/dist/core/TileGeometry.d.ts.map +1 -1
- package/dist/core/TileGeometry.js +20 -0
- package/dist/core/TileGeometry.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/render/DatasetManager.d.ts +27 -0
- package/dist/render/DatasetManager.d.ts.map +1 -1
- package/dist/render/DatasetManager.js +18 -4
- package/dist/render/DatasetManager.js.map +1 -1
- package/dist/render/GeoAdapter.d.ts +49 -24
- package/dist/render/GeoAdapter.d.ts.map +1 -1
- package/dist/render/GeoAdapter.js +96 -8
- package/dist/render/GeoAdapter.js.map +1 -1
- package/dist/render/GeometryBuilder.d.ts +17 -0
- package/dist/render/GeometryBuilder.d.ts.map +1 -1
- package/dist/render/GeometryBuilder.js +31 -2
- package/dist/render/GeometryBuilder.js.map +1 -1
- package/dist/render/S3MViewer.d.ts +80 -2
- package/dist/render/S3MViewer.d.ts.map +1 -1
- package/dist/render/S3MViewer.js +299 -9
- package/dist/render/S3MViewer.js.map +1 -1
- package/dist/render/StyleMaterial.d.ts +5 -0
- package/dist/render/StyleMaterial.d.ts.map +1 -1
- package/dist/render/StyleMaterial.js +21 -0
- package/dist/render/StyleMaterial.js.map +1 -1
- package/dist/render/tilePlacement.d.ts +84 -0
- package/dist/render/tilePlacement.d.ts.map +1 -0
- package/dist/render/tilePlacement.js +71 -0
- package/dist/render/tilePlacement.js.map +1 -0
- package/dist/render/viewer/EdgeDecorator.d.ts +1 -0
- package/dist/render/viewer/EdgeDecorator.d.ts.map +1 -1
- package/dist/render/viewer/EdgeDecorator.js +3 -0
- package/dist/render/viewer/EdgeDecorator.js.map +1 -1
- package/dist/render/viewer/PickService.d.ts +13 -0
- package/dist/render/viewer/PickService.d.ts.map +1 -1
- package/dist/render/viewer/PickService.js +24 -15
- package/dist/render/viewer/PickService.js.map +1 -1
- package/dist/render/viewer/types.d.ts +53 -0
- package/dist/render/viewer/types.d.ts.map +1 -1
- package/dist/render/viewer/types.js.map +1 -1
- package/dist/tileset/S3MTileset.d.ts +43 -1
- package/dist/tileset/S3MTileset.d.ts.map +1 -1
- package/dist/tileset/S3MTileset.js +217 -2
- package/dist/tileset/S3MTileset.js.map +1 -1
- package/dist/worker/s3mWorker.js +691 -508
- package/dist/worker/s3mWorker.js.map +1 -1
- package/docs/API.md +18 -0
- package/package.json +1 -1
- package/src/core/BakeMercator.ts +96 -0
- package/src/core/S3M1Parser.ts +179 -9
- package/src/core/TileGeometry.ts +26 -0
- package/src/index.ts +11 -1
- package/src/render/DatasetManager.ts +43 -5
- package/src/render/GeoAdapter.ts +139 -11
- package/src/render/GeometryBuilder.ts +53 -2
- package/src/render/S3MViewer.ts +335 -13
- package/src/render/StyleMaterial.ts +26 -0
- package/src/render/tilePlacement.ts +121 -0
- package/src/render/viewer/EdgeDecorator.ts +3 -0
- package/src/render/viewer/PickService.ts +44 -16
- package/src/render/viewer/types.ts +51 -0
- package/src/tileset/S3MTileset.ts +240 -3
- package/dist/browser/assets/s3mWorker-DHOVIrAU.js +0 -1
|
@@ -73,7 +73,22 @@ export interface LightOptions {
|
|
|
73
73
|
/** 太阳/光源仰角(度,0~90),默认 50 */
|
|
74
74
|
altitude?: number;
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* 本层绘制前如何处理宿主已有的深度缓冲。
|
|
78
|
+
* - `'scene'` 保留(默认)。地形能遮挡本层几何,适用于建筑、管线等离散对象。
|
|
79
|
+
* - `'clear'` 先清深度再画,本层只与自己做深度测试。适用于贴地地面类数据(倾斜摄影、大范围 DEM 化模型等),消除共面 z-fighting。
|
|
80
|
+
* - `'auto'` 按数据集类型推断:有 ground 覆盖 / OSGB 倾斜摄影 / 地面类网格 → `'clear'`,否则 `'scene'`。
|
|
81
|
+
*/
|
|
82
|
+
export type DepthMode = 'scene' | 'clear' | 'auto';
|
|
76
83
|
export interface S3MViewerOptions {
|
|
84
|
+
/**
|
|
85
|
+
* 本层绘制前如何处理宿主已有的深度缓冲。
|
|
86
|
+
* - `'scene'` 保留(默认)。地形能遮挡本层几何,适用于建筑、管线等离散对象。
|
|
87
|
+
* - `'clear'` 先清深度再画,本层只与自己做深度测试。适用于贴地地面类数据。
|
|
88
|
+
* - `'auto'` 按数据集类型推断:有 ground 覆盖 / OSGB 倾斜摄影 / 地面类网格 → `'clear'`,否则 `'scene'`。
|
|
89
|
+
* 默认 `'scene'`,与改动前行为逐字一致。
|
|
90
|
+
*/
|
|
91
|
+
depthMode?: DepthMode;
|
|
77
92
|
/**
|
|
78
93
|
* 光照预设:
|
|
79
94
|
* - `'default'`(默认):现有 PBR 打光,亮部线性总量 ≈ 2.55;
|
|
@@ -133,6 +148,34 @@ export interface S3MViewerOptions {
|
|
|
133
148
|
* 所以默认不启用,由接入方按设备档位自行决定。运行时可用 `setLodPixelRatioCap()` 调整。
|
|
134
149
|
*/
|
|
135
150
|
lodPixelRatioCap?: number;
|
|
151
|
+
/**
|
|
152
|
+
* 瓦片级放置(默认 `true`)。
|
|
153
|
+
*
|
|
154
|
+
* 开启后每块瓦片用自己的中心纬度算 `meterInMercator`,几何绕自身中心缩放,
|
|
155
|
+
* 修正「全场景共用一个切平面」在大范围下的尺度误差。
|
|
156
|
+
*
|
|
157
|
+
* 误差量级(北纬 40°,距场景锚点的距离 → 相对尺度的偏差):
|
|
158
|
+
* `5 km → 0.065%`、`20 km → 0.26%(约 26 m)`、`200 km → 2.8%(约 2.8 km)`。
|
|
159
|
+
* 城市级(几公里)随手开无妨;多数据集相距几十公里、或单个数据集跨 20 km 以上时
|
|
160
|
+
* 必须开,否则远处的模型会整体偏大/偏小。
|
|
161
|
+
*
|
|
162
|
+
* 代价与遗留:
|
|
163
|
+
* - 每块瓦片的 `Object3D` 走 `matrixAutoUpdate = false`,多一次矩阵乘;
|
|
164
|
+
* - 场景 ENU 仍是**一个平面**,所以只是把误差按瓦片重新分摊(瓦片跨 2 km 时
|
|
165
|
+
* 剩余约 0.5 m),彻底消除要逐顶点烘焙墨卡托;
|
|
166
|
+
* - 拾取 / 量算的 `lngLat ↔ 场景 ENU` 换算仍用场景锚点的常量 s,在本模式下
|
|
167
|
+
* 保持修复前的误差量级(几何与反解不再自洽,但都不比之前差)。
|
|
168
|
+
*
|
|
169
|
+
* 见 `render/tilePlacement.ts` 的文件头。
|
|
170
|
+
*/
|
|
171
|
+
perTilePlacement?: boolean;
|
|
172
|
+
/**
|
|
173
|
+
* 是否对瓦片逐顶点烘焙精确 Web 墨卡托偏移(消除全球大尺度下的视差游动/呼吸效应)。
|
|
174
|
+
* - undefined(默认):自动判定。当瓦片集根节点包围球半径 > 25 km 时自动启用,<= 25 km 时保持关闭(逐字节保持原有 ENU 顶点缓冲不变)。
|
|
175
|
+
* - true:强制开启。
|
|
176
|
+
* - false:强制关闭。
|
|
177
|
+
*/
|
|
178
|
+
bakeMercator?: boolean;
|
|
136
179
|
/**
|
|
137
180
|
* 每个数据集驻留三角形总数的软上限(默认不限制)。
|
|
138
181
|
* 见 `S3MTilesetOptions.maxTriangles`:瓦片数管不住的场景(精模、大面片)用这条刹车。
|
|
@@ -236,6 +279,16 @@ export interface S3MViewerOptions {
|
|
|
236
279
|
* 编译着色器、卡一帧。预热在首帧之后异步做,期间跳一两帧渲染,肉眼不可见。
|
|
237
280
|
*/
|
|
238
281
|
prewarmShading?: boolean;
|
|
282
|
+
/**
|
|
283
|
+
* LOD 细化过渡策略:
|
|
284
|
+
* - 'binary'(默认):整节点二值切换
|
|
285
|
+
* - 'incremental':增量细化(primary / fallback 双列表 + LEQUAL 深度推移)
|
|
286
|
+
*/
|
|
287
|
+
lodTransition?: 'binary' | 'incremental';
|
|
288
|
+
fallbackOffset?: {
|
|
289
|
+
factor?: number;
|
|
290
|
+
units?: number;
|
|
291
|
+
};
|
|
239
292
|
}
|
|
240
293
|
export interface PickableRef {
|
|
241
294
|
datasetId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/render/viewer/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,UAAW,SAAQ,iBAAiB;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACtC,oCAAoC;IACpC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACxC,wBAAwB;IACxB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACjC,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,mBAAmB;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,qBAAqB;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0BAA0B;IAC1B,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,0BAA0B;IAC1B,qBAAqB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxC,oBAAoB;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,mBAAmB;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uBAAuB;IACvB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAC5B,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,mCAAmC;IACnC,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;;OAIG;IACH,aAAa,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IAChC,qBAAqB;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1B,wBAAwB;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,gFAAgF;IAChF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACpC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACpC,8BAA8B;IAC9B,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B;;;OAGG;IACH,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/render/viewer/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/render/viewer/types.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/render/viewer/types.ts"],"names":[],"mappings":";AA6VA,2EAA2E"}
|
|
@@ -121,11 +121,23 @@ export type BuildTileFn = (tile: ParsedTile, options: {
|
|
|
121
121
|
colorPipeline?: 'linear' | 'direct';
|
|
122
122
|
/** 纹理创建参数(透传给 buildTileObjects → createTexture) */
|
|
123
123
|
textureOptions?: TextureCreateOptions;
|
|
124
|
+
bakeMercator?: boolean;
|
|
125
|
+
tileAnchor?: {
|
|
126
|
+
lon: number;
|
|
127
|
+
lat: number;
|
|
128
|
+
height?: number;
|
|
129
|
+
};
|
|
130
|
+
tileCenter?: {
|
|
131
|
+
x: number;
|
|
132
|
+
y: number;
|
|
133
|
+
z?: number;
|
|
134
|
+
};
|
|
124
135
|
}) => Promise<{
|
|
125
136
|
group: Group;
|
|
126
137
|
stats: Partial<Stats>;
|
|
127
138
|
}>;
|
|
128
139
|
export interface S3MTilesetOptions {
|
|
140
|
+
bakeMercator?: boolean;
|
|
129
141
|
configUrl: string;
|
|
130
142
|
maxTiles?: number;
|
|
131
143
|
maxConcurrent?: number;
|
|
@@ -209,6 +221,21 @@ export interface S3MTilesetOptions {
|
|
|
209
221
|
* 'silent' —— 只记录到 `stats.degradations`,由 UI 自己决定怎么提示。
|
|
210
222
|
*/
|
|
211
223
|
unsupported?: UnsupportedPolicy;
|
|
224
|
+
/**
|
|
225
|
+
* LOD 细化过渡策略:
|
|
226
|
+
* - 'binary'(默认):整节点二值切换。所有子瓦片全部就绪或失败后,父瓦片整块隐藏、子瓦片整块接替。
|
|
227
|
+
* - 'incremental':增量细化(primary / fallback 双列表 + LEQUAL 深度推移)。
|
|
228
|
+
* 子瓦片就绪一个显示一个,未就绪区域由父级(fallback)兜底填充,消除整块跳变与慢 child 阻塞。
|
|
229
|
+
*/
|
|
230
|
+
lodTransition?: 'binary' | 'incremental';
|
|
231
|
+
/**
|
|
232
|
+
* 增量细化模式下 fallback 兜底瓦片的材质深度偏移系数。
|
|
233
|
+
* 默认 { factor: 1, units: 2 },通过向远处推移深度配合 gl.LEQUAL 消除共面 z-fighting。
|
|
234
|
+
*/
|
|
235
|
+
fallbackOffset?: {
|
|
236
|
+
factor?: number;
|
|
237
|
+
units?: number;
|
|
238
|
+
};
|
|
212
239
|
}
|
|
213
240
|
/** 估算单个纹理占用的显存字节数 */
|
|
214
241
|
export declare function estimateTextureBytes(tex: any): number;
|
|
@@ -264,6 +291,13 @@ export declare class S3MTileset {
|
|
|
264
291
|
*/
|
|
265
292
|
maxMemory: number;
|
|
266
293
|
lodRangeScale: number;
|
|
294
|
+
lodTransition: 'binary' | 'incremental';
|
|
295
|
+
fallbackOffset: {
|
|
296
|
+
factor: number;
|
|
297
|
+
units: number;
|
|
298
|
+
};
|
|
299
|
+
readonly primaryNodes: Set<string>;
|
|
300
|
+
readonly fallbackNodes: Set<string>;
|
|
267
301
|
/** 数据集配置声明的高度范围(米),若配置未声明则返回 null */
|
|
268
302
|
get heightRange(): {
|
|
269
303
|
min: number;
|
|
@@ -289,8 +323,11 @@ export declare class S3MTileset {
|
|
|
289
323
|
/** 请求量的硬上限(软上限 maxTiles 的超额余量),见构造函数注释 */
|
|
290
324
|
hardCap: number;
|
|
291
325
|
/** 本数据集是 S3M 1.x(SuperMapCache,.s3m):子瓦地址规则与 3.x 不同 */
|
|
292
|
-
|
|
326
|
+
isS3MV1: boolean;
|
|
293
327
|
private _buildTile;
|
|
328
|
+
private _bakeMercator?;
|
|
329
|
+
rootRadius?: number;
|
|
330
|
+
shouldBakeMercator(radius?: number): boolean;
|
|
294
331
|
private readonly _polygonOffset;
|
|
295
332
|
private _materialQuality;
|
|
296
333
|
private _colorPipeline;
|
|
@@ -475,6 +512,11 @@ export declare class S3MTileset {
|
|
|
475
512
|
*/
|
|
476
513
|
update(camEnu: [number, number, number], fovRad: number, screenHeight: number): boolean;
|
|
477
514
|
private _updateNodeVisibility;
|
|
515
|
+
getLodTransition(): 'binary' | 'incremental';
|
|
516
|
+
setLodTransition(mode: 'binary' | 'incremental'): void;
|
|
517
|
+
private _applyNodeFallbackPolygonOffset;
|
|
518
|
+
private _restoreNodePolygonOffset;
|
|
519
|
+
private _updateVisibilityIncremental;
|
|
478
520
|
dispose(): void;
|
|
479
521
|
}
|
|
480
522
|
//# sourceMappingURL=S3MTileset.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"S3MTileset.d.ts","sourceRoot":"","sources":["../../src/tileset/S3MTileset.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAatE,OAAO,KAAK,EAEV,kBAAkB,EAInB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"S3MTileset.d.ts","sourceRoot":"","sources":["../../src/tileset/S3MTileset.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAatE,OAAO,KAAK,EAEV,kBAAkB,EAInB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAgC5C;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASnD;AAMD,kBAAkB;AAClB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAS5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAiB7F;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+DrE;AAED,kDAAkD;AAClD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,CAKnG;AAuBD,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE;QAAE,MAAM,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,kCAAkC;IAClC,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClF;AAED,yCAAyC;AACzC,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE;IACP,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,yDAAyD;IACzD,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,oEAAoE;IACpE,aAAa,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,sEAAsE;IACtE,eAAe,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACpC,kEAAkE;IAClE,aAAa,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACpC,mDAAmD;IACnD,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACxC,YAAY,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,UAAU,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD,KACE,OAAO,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;CAAE,CAAC,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,oDAAoD;IACpD,aAAa,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD;;;OAGG;IACH,eAAe,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACpC,+DAA+D;IAC/D,aAAa,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACpC,wDAAwD;IACxD,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,6CAA6C;IAC7C,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;IACzC;;;OAGG;IACH,cAAc,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AAED,qBAAqB;AACrB,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAqBrD;AAED,yBAAyB;AACzB,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAqB5D;AAED,qBAAa,UAAU;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAQ;IAC9C;;;;OAIG;IACH,OAAO,CAAC,eAAe,CAA4B;IACnD,MAAM,EAAE,MAAM,CAAiC;IAE/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAM;IACjC,QAAQ,CAAC,KAAK,wBAA+B;IAC7C,QAAQ,CAAC,MAAM,cAAqB;IACpC,QAAQ,CAAC,YAAY,uBAA8B;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA+B;IAChE,QAAQ,CAAC,OAAO,cAAqB;IACrC,4DAA4D;IAC5D,QAAQ,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,QAAQ,CAAC,aAAa,yCAAgD;IACtE,uDAAuD;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,oDAAoD;IACpD,QAAQ,CAAC,kBAAkB,yCAAgD;IAC3E;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,2CAAkD;IAC3E,gDAAgD;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoC;IACjE,4BAA4B;IAC5B,QAAQ,CAAC,aAAa,cAAqB;IAC3C,uCAAuC;IACvC,QAAQ,CAAC,mBAAmB,sBAA6B;IAGzD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAanB;IAEF,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,QAAQ,GAAG,aAAa,CAAC;IACxC,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,QAAQ,CAAC,YAAY,cAAqB;IAC1C,QAAQ,CAAC,aAAa,cAAqB;IAE3C,qCAAqC;IACrC,IAAI,WAAW,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAMrD;IAED,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,yCAAyC;IACzC,QAAQ,CAAC,YAAY,EAAE,cAAc,GAAG,SAAS,CAAC;IAClD,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,gCAAgC;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,MAAM,CAAK;IACnB,kCAAkC;IAClC,OAAO,CAAC,kBAAkB,CAAS;IACnC,0CAA0C;IAC1C,OAAO,SAAM;IACb,uDAAuD;IACvD,OAAO,UAAS;IAChB,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,aAAa,CAAC,CAAU;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;IAK5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgD;IAC/E,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IACjD,gEAAgE;IAChE,OAAO,CAAC,aAAa,CAAqC;IAAE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACjG,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAK;gBAER,OAAO,EAAE,iBAAiB;IA0ChC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA8D3B,OAAO,CAAC,QAAQ;IAiBhB;;;;;;;;;;;OAWG;IACH,6BAA6B;IAC7B,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI;IAW9D,sBAAsB;IACtB,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAiCtC,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,IAAI,GAAG,IAAI;IAQlE,aAAa;IACb,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,GAAG,SAAS;IAInE,8BAA8B;IAC9B,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,IAAI,GAAG,IAAI;IAQrE,kBAAkB;IAClB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,EAAE,GAAG,IAAI,GAAG,SAAS;IAIrE,OAAO,CAAC,SAAS;IA4CjB,yCAAyC;IACzC,OAAO,CAAC,kBAAkB;IAM1B;;;OAGG;IACH,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIhC;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC;;;;OAIG;IACH,kBAAkB,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI;IAI1D;;;OAGG;IACH,gBAAgB,CAAC,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,cAAc,CAAC,EAAE,oBAAoB,CAAA;KAAE,GAAG,IAAI;IAKzG;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,qBAAqB;IAQ7B;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;IAkBnB;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;IAqCnB,mCAAmC;IACnC,WAAW,IAAI,MAAM;IAQrB,OAAO,CAAC,KAAK;IAWb;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;IAqCtB,OAAO,CAAC,QAAQ;YAOF,QAAQ;IAQtB;;;;OAIG;YACW,iBAAiB;IAoB/B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAUvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;YACW,oBAAoB;IAuJlC,mDAAmD;IACnD,OAAO,CAAC,gBAAgB;IASxB;;;;;;OAMG;YACW,cAAc;IAiB5B,gDAAgD;YAClC,cAAc;IAc5B;;;;;;OAMG;YACW,gBAAgB;IAI9B;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;YASX,KAAK;IAqKnB;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAiLvF,OAAO,CAAC,qBAAqB;IAwD7B,gBAAgB,IAAI,QAAQ,GAAG,aAAa;IAI5C,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,aAAa,GAAG,IAAI;IAWtD,OAAO,CAAC,+BAA+B;IAsCvC,OAAO,CAAC,yBAAyB;IA0BjC,OAAO,CAAC,4BAA4B;IAmFpC,OAAO,IAAI,IAAI;CAiBhB"}
|
|
@@ -13,6 +13,7 @@ import { authFetch } from '../core/AuthFetch.js';
|
|
|
13
13
|
import { getSharedS3MWorker, WorkerDeadError } from '../worker/S3MWorkerClient.js';
|
|
14
14
|
import { composeLeafAtlas, expandTexblockRequestNames, parseS3MBlockGroups, parseTexblockSegments, rebuildBlockTextureState, unpackBlockTextures, } from '../core/S3MBlockParser.js';
|
|
15
15
|
import { evaluateAtlasUpgrade } from '../core/AtlasUpgrade.js';
|
|
16
|
+
import { AUTO_BAKE_RADIUS_THRESHOLD } from '../core/BakeMercator.js';
|
|
16
17
|
function dirOf(url) {
|
|
17
18
|
return url.slice(0, url.lastIndexOf('/') + 1);
|
|
18
19
|
}
|
|
@@ -345,6 +346,10 @@ export class S3MTileset {
|
|
|
345
346
|
*/
|
|
346
347
|
maxMemory;
|
|
347
348
|
lodRangeScale;
|
|
349
|
+
lodTransition;
|
|
350
|
+
fallbackOffset;
|
|
351
|
+
primaryNodes = new Set();
|
|
352
|
+
fallbackNodes = new Set();
|
|
348
353
|
/** 数据集配置声明的高度范围(米),若配置未声明则返回 null */
|
|
349
354
|
get heightRange() {
|
|
350
355
|
const hr = this.config?.heightRange;
|
|
@@ -375,6 +380,14 @@ export class S3MTileset {
|
|
|
375
380
|
/** 本数据集是 S3M 1.x(SuperMapCache,.s3m):子瓦地址规则与 3.x 不同 */
|
|
376
381
|
isS3MV1 = false;
|
|
377
382
|
_buildTile;
|
|
383
|
+
_bakeMercator;
|
|
384
|
+
rootRadius;
|
|
385
|
+
shouldBakeMercator(radius) {
|
|
386
|
+
if (this._bakeMercator !== undefined)
|
|
387
|
+
return this._bakeMercator;
|
|
388
|
+
const r = radius ?? this.rootRadius ?? 0;
|
|
389
|
+
return r > AUTO_BAKE_RADIUS_THRESHOLD;
|
|
390
|
+
}
|
|
378
391
|
_polygonOffset;
|
|
379
392
|
_materialQuality;
|
|
380
393
|
_colorPipeline;
|
|
@@ -388,6 +401,11 @@ export class S3MTileset {
|
|
|
388
401
|
constructor(options) {
|
|
389
402
|
this.configUrl = options.configUrl;
|
|
390
403
|
this.lodRangeScale = options.lodRangeScale ?? 3.0;
|
|
404
|
+
this.lodTransition = options.lodTransition ?? 'binary';
|
|
405
|
+
this.fallbackOffset = {
|
|
406
|
+
factor: options.fallbackOffset?.factor ?? 1,
|
|
407
|
+
units: options.fallbackOffset?.units ?? 2,
|
|
408
|
+
};
|
|
391
409
|
this._onTile = options.onTile ?? (() => { });
|
|
392
410
|
this._onTileRemoved = options.onTileRemoved ?? (() => { });
|
|
393
411
|
this._onError = options.onError ?? ((e) => console.warn(e));
|
|
@@ -397,6 +415,7 @@ export class S3MTileset {
|
|
|
397
415
|
this._unsupported = options.unsupported ?? 'warn';
|
|
398
416
|
// 渲染层可注入:Node 环境下不需要 three,也能跑 URL / 解析链路
|
|
399
417
|
this._buildTile = options.buildTile ?? null;
|
|
418
|
+
this._bakeMercator = options.bakeMercator;
|
|
400
419
|
this._polygonOffset = options.polygonOffset;
|
|
401
420
|
this._materialQuality = options.materialQuality;
|
|
402
421
|
this._colorPipeline = options.colorPipeline;
|
|
@@ -724,6 +743,9 @@ export class S3MTileset {
|
|
|
724
743
|
continue;
|
|
725
744
|
// 正在显示且没有可见子瓦接手 → 踢了就是洞
|
|
726
745
|
if (!allowUncovered && node.group.visible) {
|
|
746
|
+
if (this.lodTransition === 'incremental') {
|
|
747
|
+
continue;
|
|
748
|
+
}
|
|
727
749
|
const covered = childUrls.some((u) => {
|
|
728
750
|
const c = this.nodes.get(u);
|
|
729
751
|
return !!c && c.group.visible;
|
|
@@ -735,6 +757,16 @@ export class S3MTileset {
|
|
|
735
757
|
victim = node;
|
|
736
758
|
continue;
|
|
737
759
|
}
|
|
760
|
+
// 可见性优先于时间戳:没有包围球的瓦片算不出距离,`lastSeen` 天然比别的瓦片旧,
|
|
761
|
+
// 只看时间戳会把「正在显示」的那块先踢掉(开洞 → 回补 → 再踢 = 闪)。
|
|
762
|
+
// 只有不可见的候选分不出来时,才轮到 lastSeen / distance 决定。
|
|
763
|
+
const nodeVisible = node.group.visible ? 1 : 0;
|
|
764
|
+
const victimVisible = victim.group.visible ? 1 : 0;
|
|
765
|
+
if (nodeVisible !== victimVisible) {
|
|
766
|
+
if (nodeVisible < victimVisible)
|
|
767
|
+
victim = node;
|
|
768
|
+
continue;
|
|
769
|
+
}
|
|
738
770
|
const a = node.lastSeen ?? -1;
|
|
739
771
|
const b = victim.lastSeen ?? -1;
|
|
740
772
|
if (a < b || (a === b && (node.distance ?? 0) > (victim.distance ?? 0)))
|
|
@@ -1170,6 +1202,11 @@ export class S3MTileset {
|
|
|
1170
1202
|
}
|
|
1171
1203
|
// 解析成功但能力不完整的(目前只有 3DGS),在花力气建几何之前先决定处置
|
|
1172
1204
|
this._noteDegradations(tile);
|
|
1205
|
+
const lodForBake = this._pickLod(tile);
|
|
1206
|
+
if (this.rootRadius === undefined && lodForBake?.boundingSphere?.radius) {
|
|
1207
|
+
this.rootRadius = lodForBake.boundingSphere.radius;
|
|
1208
|
+
}
|
|
1209
|
+
const shouldBake = this.shouldBakeMercator(lodForBake?.boundingSphere?.radius);
|
|
1173
1210
|
const build = await this._builder();
|
|
1174
1211
|
const buildRes = await build(tile, {
|
|
1175
1212
|
textureCache: this.textureCache,
|
|
@@ -1179,6 +1216,9 @@ export class S3MTileset {
|
|
|
1179
1216
|
materialQuality: this._materialQuality,
|
|
1180
1217
|
colorPipeline: this._colorPipeline,
|
|
1181
1218
|
textureOptions: this._textureOptions,
|
|
1219
|
+
bakeMercator: shouldBake,
|
|
1220
|
+
tileAnchor: this.anchor,
|
|
1221
|
+
tileCenter: lodForBake?.boundingSphere?.center,
|
|
1182
1222
|
});
|
|
1183
1223
|
const { group, stats } = buildRes;
|
|
1184
1224
|
const texKeys = buildRes.textureKeys ?? group.userData?.textureKeys ?? Object.keys(tile.textures ?? {});
|
|
@@ -1285,6 +1325,11 @@ export class S3MTileset {
|
|
|
1285
1325
|
let hasChanges = false;
|
|
1286
1326
|
for (const node of this.nodes.values()) {
|
|
1287
1327
|
if (!node.sphere) {
|
|
1328
|
+
// 没有包围球(S3M 1.x 叶子瓦片:XML 是 `<PageLods><Geode>`,没有 PagedLOD)时
|
|
1329
|
+
// 算不出距离,但**仍要记「最近用过」**:`lastSeen` 恒为 undefined 会让它在
|
|
1330
|
+
// `_pickVictim` 里永远排最前(`?? -1`),硬上限一触发 `allowUncovered`,
|
|
1331
|
+
// 第一块被踢掉的就是正在显示的那块 —— 画面立刻一个洞,下一帧又加载回来。
|
|
1332
|
+
node.lastSeen = this._frame;
|
|
1288
1333
|
node.needRefine = false;
|
|
1289
1334
|
continue;
|
|
1290
1335
|
}
|
|
@@ -1380,11 +1425,24 @@ export class S3MTileset {
|
|
|
1380
1425
|
if (!p || !this.nodes.has(p))
|
|
1381
1426
|
roots.add(url);
|
|
1382
1427
|
}
|
|
1383
|
-
|
|
1384
|
-
if (this.
|
|
1428
|
+
if (this.lodTransition === 'incremental') {
|
|
1429
|
+
if (this._updateVisibilityIncremental(roots, visited)) {
|
|
1385
1430
|
hasChanges = true;
|
|
1386
1431
|
}
|
|
1387
1432
|
}
|
|
1433
|
+
else {
|
|
1434
|
+
for (const rootUrl of roots) {
|
|
1435
|
+
if (this._updateNodeVisibility(rootUrl, true, visited)) {
|
|
1436
|
+
hasChanges = true;
|
|
1437
|
+
}
|
|
1438
|
+
}
|
|
1439
|
+
this.primaryNodes.clear();
|
|
1440
|
+
for (const [url, node] of this.nodes) {
|
|
1441
|
+
if (node.group.visible)
|
|
1442
|
+
this.primaryNodes.add(url);
|
|
1443
|
+
}
|
|
1444
|
+
this.fallbackNodes.clear();
|
|
1445
|
+
}
|
|
1388
1446
|
// 防御:若有任何未被 root 树访问到的游离瓦片,全部隐藏
|
|
1389
1447
|
for (const [url, node] of this.nodes) {
|
|
1390
1448
|
if (!visited.has(url)) {
|
|
@@ -1392,6 +1450,9 @@ export class S3MTileset {
|
|
|
1392
1450
|
node.group.visible = false;
|
|
1393
1451
|
hasChanges = true;
|
|
1394
1452
|
}
|
|
1453
|
+
if (this.lodTransition === 'incremental') {
|
|
1454
|
+
this._restoreNodePolygonOffset(node);
|
|
1455
|
+
}
|
|
1395
1456
|
}
|
|
1396
1457
|
}
|
|
1397
1458
|
// 显示职责已经分配完毕,现在才裁预算(make-before-break):
|
|
@@ -1479,6 +1540,160 @@ export class S3MTileset {
|
|
|
1479
1540
|
}
|
|
1480
1541
|
return changed;
|
|
1481
1542
|
}
|
|
1543
|
+
getLodTransition() {
|
|
1544
|
+
return this.lodTransition;
|
|
1545
|
+
}
|
|
1546
|
+
setLodTransition(mode) {
|
|
1547
|
+
if (this.lodTransition === mode)
|
|
1548
|
+
return;
|
|
1549
|
+
this.lodTransition = mode;
|
|
1550
|
+
if (mode === 'binary') {
|
|
1551
|
+
for (const node of this.nodes.values()) {
|
|
1552
|
+
this._restoreNodePolygonOffset(node);
|
|
1553
|
+
}
|
|
1554
|
+
this.fallbackNodes.clear();
|
|
1555
|
+
}
|
|
1556
|
+
}
|
|
1557
|
+
_applyNodeFallbackPolygonOffset(node, depth) {
|
|
1558
|
+
const factor = this.fallbackOffset.factor;
|
|
1559
|
+
const units = Math.max(2, (10 - Math.min(depth, 8)) * this.fallbackOffset.units);
|
|
1560
|
+
let changed = false;
|
|
1561
|
+
node.group.traverse((obj) => {
|
|
1562
|
+
const target = obj;
|
|
1563
|
+
if ((target.isMesh || target.isPoints || target.isLine) && target.material) {
|
|
1564
|
+
const materials = Array.isArray(target.material) ? target.material : [target.material];
|
|
1565
|
+
for (const mat of materials) {
|
|
1566
|
+
if (!mat)
|
|
1567
|
+
continue;
|
|
1568
|
+
if (!mat.userData)
|
|
1569
|
+
mat.userData = {};
|
|
1570
|
+
if (!mat.userData._basePolygonOffset) {
|
|
1571
|
+
mat.userData._basePolygonOffset = {
|
|
1572
|
+
polygonOffset: mat.polygonOffset === true,
|
|
1573
|
+
factor: mat.polygonOffsetFactor ?? 0,
|
|
1574
|
+
units: mat.polygonOffsetUnits ?? 0,
|
|
1575
|
+
};
|
|
1576
|
+
}
|
|
1577
|
+
const base = mat.userData._basePolygonOffset;
|
|
1578
|
+
const targetFactor = base.factor + factor;
|
|
1579
|
+
const targetUnits = base.units + units;
|
|
1580
|
+
if (mat.polygonOffset !== true ||
|
|
1581
|
+
mat.polygonOffsetFactor !== targetFactor ||
|
|
1582
|
+
mat.polygonOffsetUnits !== targetUnits) {
|
|
1583
|
+
mat.polygonOffset = true;
|
|
1584
|
+
mat.polygonOffsetFactor = targetFactor;
|
|
1585
|
+
mat.polygonOffsetUnits = targetUnits;
|
|
1586
|
+
changed = true;
|
|
1587
|
+
}
|
|
1588
|
+
}
|
|
1589
|
+
}
|
|
1590
|
+
});
|
|
1591
|
+
return changed;
|
|
1592
|
+
}
|
|
1593
|
+
_restoreNodePolygonOffset(node) {
|
|
1594
|
+
let changed = false;
|
|
1595
|
+
node.group.traverse((obj) => {
|
|
1596
|
+
const target = obj;
|
|
1597
|
+
if ((target.isMesh || target.isPoints || target.isLine) && target.material) {
|
|
1598
|
+
const materials = Array.isArray(target.material) ? target.material : [target.material];
|
|
1599
|
+
for (const mat of materials) {
|
|
1600
|
+
if (mat?.userData?._basePolygonOffset) {
|
|
1601
|
+
const base = mat.userData._basePolygonOffset;
|
|
1602
|
+
if (mat.polygonOffset !== base.polygonOffset ||
|
|
1603
|
+
mat.polygonOffsetFactor !== base.factor ||
|
|
1604
|
+
mat.polygonOffsetUnits !== base.units) {
|
|
1605
|
+
mat.polygonOffset = base.polygonOffset;
|
|
1606
|
+
mat.polygonOffsetFactor = base.factor;
|
|
1607
|
+
mat.polygonOffsetUnits = base.units;
|
|
1608
|
+
changed = true;
|
|
1609
|
+
}
|
|
1610
|
+
}
|
|
1611
|
+
}
|
|
1612
|
+
}
|
|
1613
|
+
});
|
|
1614
|
+
return changed;
|
|
1615
|
+
}
|
|
1616
|
+
_updateVisibilityIncremental(roots, visited) {
|
|
1617
|
+
const nextPrimary = new Set();
|
|
1618
|
+
const nextFallback = new Set();
|
|
1619
|
+
const nodeDepths = new Map();
|
|
1620
|
+
const traverse = (url, depth) => {
|
|
1621
|
+
if (visited.has(url))
|
|
1622
|
+
return;
|
|
1623
|
+
visited.add(url);
|
|
1624
|
+
nodeDepths.set(url, depth);
|
|
1625
|
+
const node = this.nodes.get(url);
|
|
1626
|
+
if (!node)
|
|
1627
|
+
return;
|
|
1628
|
+
const childUrls = node.childUrls ?? (node.childUrl ? [node.childUrl] : []);
|
|
1629
|
+
const hasChildren = childUrls.length > 0;
|
|
1630
|
+
const readyChildren = childUrls.filter((cUrl) => this.nodes.has(cUrl));
|
|
1631
|
+
const missingChildren = childUrls.filter((cUrl) => !this.nodes.has(cUrl) && !this.failed.has(cUrl));
|
|
1632
|
+
const canRefine = !!node.needRefine && hasChildren && readyChildren.length > 0;
|
|
1633
|
+
if (canRefine) {
|
|
1634
|
+
if (missingChildren.length > 0) {
|
|
1635
|
+
nextFallback.add(url);
|
|
1636
|
+
}
|
|
1637
|
+
for (const cUrl of readyChildren) {
|
|
1638
|
+
traverse(cUrl, depth + 1);
|
|
1639
|
+
}
|
|
1640
|
+
}
|
|
1641
|
+
else {
|
|
1642
|
+
nextPrimary.add(url);
|
|
1643
|
+
}
|
|
1644
|
+
};
|
|
1645
|
+
for (const rootUrl of roots) {
|
|
1646
|
+
traverse(rootUrl, 0);
|
|
1647
|
+
}
|
|
1648
|
+
let changed = false;
|
|
1649
|
+
for (const [url, node] of this.nodes) {
|
|
1650
|
+
if (!visited.has(url))
|
|
1651
|
+
continue;
|
|
1652
|
+
if (nextPrimary.has(url)) {
|
|
1653
|
+
if (!node.group.visible) {
|
|
1654
|
+
node.group.visible = true;
|
|
1655
|
+
changed = true;
|
|
1656
|
+
}
|
|
1657
|
+
const depth = nodeDepths.get(url) ?? 0;
|
|
1658
|
+
const targetOrder = 100 + depth;
|
|
1659
|
+
if (node.group.renderOrder !== targetOrder) {
|
|
1660
|
+
node.group.renderOrder = targetOrder;
|
|
1661
|
+
changed = true;
|
|
1662
|
+
}
|
|
1663
|
+
if (this._restoreNodePolygonOffset(node))
|
|
1664
|
+
changed = true;
|
|
1665
|
+
}
|
|
1666
|
+
else if (nextFallback.has(url)) {
|
|
1667
|
+
if (!node.group.visible) {
|
|
1668
|
+
node.group.visible = true;
|
|
1669
|
+
changed = true;
|
|
1670
|
+
}
|
|
1671
|
+
const depth = nodeDepths.get(url) ?? 0;
|
|
1672
|
+
const targetOrder = depth;
|
|
1673
|
+
if (node.group.renderOrder !== targetOrder) {
|
|
1674
|
+
node.group.renderOrder = targetOrder;
|
|
1675
|
+
changed = true;
|
|
1676
|
+
}
|
|
1677
|
+
if (this._applyNodeFallbackPolygonOffset(node, depth))
|
|
1678
|
+
changed = true;
|
|
1679
|
+
}
|
|
1680
|
+
else {
|
|
1681
|
+
if (node.group.visible) {
|
|
1682
|
+
node.group.visible = false;
|
|
1683
|
+
changed = true;
|
|
1684
|
+
}
|
|
1685
|
+
if (this._restoreNodePolygonOffset(node))
|
|
1686
|
+
changed = true;
|
|
1687
|
+
}
|
|
1688
|
+
}
|
|
1689
|
+
this.primaryNodes.clear();
|
|
1690
|
+
for (const u of nextPrimary)
|
|
1691
|
+
this.primaryNodes.add(u);
|
|
1692
|
+
this.fallbackNodes.clear();
|
|
1693
|
+
for (const u of nextFallback)
|
|
1694
|
+
this.fallbackNodes.add(u);
|
|
1695
|
+
return changed;
|
|
1696
|
+
}
|
|
1482
1697
|
dispose() {
|
|
1483
1698
|
this._workerClient?.dispose();
|
|
1484
1699
|
for (const node of this.nodes.values()) {
|