s3m-three 0.3.5 → 0.3.7

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.
Files changed (69) hide show
  1. package/dist/browser/assets/s3mWorker-D7AV6O30.js +1 -0
  2. package/dist/browser/s3m-three.iife.ext-three.js +26 -20
  3. package/dist/browser/s3m-three.iife.js +26 -20
  4. package/dist/core/TextureDecode.d.ts +39 -0
  5. package/dist/core/TextureDecode.d.ts.map +1 -0
  6. package/dist/core/TextureDecode.js +174 -0
  7. package/dist/core/TextureDecode.js.map +1 -0
  8. package/dist/core/TextureFormat.d.ts +22 -2
  9. package/dist/core/TextureFormat.d.ts.map +1 -1
  10. package/dist/core/TextureFormat.js +22 -2
  11. package/dist/core/TextureFormat.js.map +1 -1
  12. package/dist/core/TileGeometry.d.ts +92 -0
  13. package/dist/core/TileGeometry.d.ts.map +1 -0
  14. package/dist/core/TileGeometry.js +607 -0
  15. package/dist/core/TileGeometry.js.map +1 -0
  16. package/dist/render/DatasetManager.d.ts +2 -0
  17. package/dist/render/DatasetManager.d.ts.map +1 -1
  18. package/dist/render/DatasetManager.js +1 -0
  19. package/dist/render/DatasetManager.js.map +1 -1
  20. package/dist/render/FeatureStyleManager.d.ts +4 -2
  21. package/dist/render/FeatureStyleManager.d.ts.map +1 -1
  22. package/dist/render/FeatureStyleManager.js +33 -1
  23. package/dist/render/FeatureStyleManager.js.map +1 -1
  24. package/dist/render/GeometryBuilder.d.ts +8 -10
  25. package/dist/render/GeometryBuilder.d.ts.map +1 -1
  26. package/dist/render/GeometryBuilder.js +77 -555
  27. package/dist/render/GeometryBuilder.js.map +1 -1
  28. package/dist/render/S3MViewer.d.ts +4 -0
  29. package/dist/render/S3MViewer.d.ts.map +1 -1
  30. package/dist/render/S3MViewer.js +13 -2
  31. package/dist/render/S3MViewer.js.map +1 -1
  32. package/dist/render/StyleMaterial.d.ts.map +1 -1
  33. package/dist/render/StyleMaterial.js +6 -0
  34. package/dist/render/StyleMaterial.js.map +1 -1
  35. package/dist/render/TextureFactory.d.ts +9 -19
  36. package/dist/render/TextureFactory.d.ts.map +1 -1
  37. package/dist/render/TextureFactory.js +62 -115
  38. package/dist/render/TextureFactory.js.map +1 -1
  39. package/dist/tileset/S3MTileset.d.ts +21 -0
  40. package/dist/tileset/S3MTileset.d.ts.map +1 -1
  41. package/dist/tileset/S3MTileset.js +41 -2
  42. package/dist/tileset/S3MTileset.js.map +1 -1
  43. package/dist/worker/S3MWorkerClient.d.ts +48 -0
  44. package/dist/worker/S3MWorkerClient.d.ts.map +1 -0
  45. package/dist/worker/S3MWorkerClient.js +124 -0
  46. package/dist/worker/S3MWorkerClient.js.map +1 -0
  47. package/dist/worker/s3mWorker.d.ts +2 -0
  48. package/dist/worker/s3mWorker.d.ts.map +1 -0
  49. package/dist/worker/s3mWorker.js +56 -0
  50. package/dist/worker/s3mWorker.js.map +1 -0
  51. package/dist/worker/transferables.d.ts +14 -0
  52. package/dist/worker/transferables.d.ts.map +1 -0
  53. package/dist/worker/transferables.js +61 -0
  54. package/dist/worker/transferables.js.map +1 -0
  55. package/docs/API.md +6 -0
  56. package/package.json +1 -1
  57. package/src/core/TextureDecode.ts +224 -0
  58. package/src/core/TextureFormat.ts +23 -2
  59. package/src/core/TileGeometry.ts +745 -0
  60. package/src/render/DatasetManager.ts +3 -0
  61. package/src/render/FeatureStyleManager.ts +31 -2
  62. package/src/render/GeometryBuilder.ts +91 -617
  63. package/src/render/S3MViewer.ts +18 -4
  64. package/src/render/StyleMaterial.ts +6 -0
  65. package/src/render/TextureFactory.ts +78 -123
  66. package/src/tileset/S3MTileset.ts +55 -3
  67. package/src/worker/S3MWorkerClient.ts +159 -0
  68. package/src/worker/s3mWorker.ts +76 -0
  69. package/src/worker/transferables.ts +58 -0
@@ -0,0 +1,607 @@
1
+ /**
2
+ * S3M 规范里 `DrawPrimitiveType` 的两个特殊值(原住 GeometryBuilder,随组装层
3
+ * 下沉到 core —— 渲染层从这里 re-export,对外 API 不变):
4
+ * 13 = 数据自带的「棱线包」—— 索引是线段对,不是三角形(把 13 当三角形画,
5
+ * 每条棱线都会被连成一根几十上百米的尖刺);
6
+ * 1 = 点云包。索引是点序号,画成三角面就是满屏彩色尖刺。
7
+ */
8
+ export const LINE_PRIMITIVE = 13;
9
+ export const POINT_PRIMITIVE = 1;
10
+ /* ------------------------------------------------------------------ 顶点流工具 */
11
+ function bytesPerElement(dtype) {
12
+ return dtype === 'u8' ? 1 : dtype === 'u16' ? 2 : 4;
13
+ }
14
+ function typedArray(dtype, buffer) {
15
+ switch (dtype) {
16
+ case 'u8':
17
+ return new Uint8Array(buffer);
18
+ case 'u16':
19
+ return new Uint16Array(buffer);
20
+ case 'u32':
21
+ return new Uint32Array(buffer);
22
+ default:
23
+ return new Float32Array(buffer);
24
+ }
25
+ }
26
+ function typedArrayOf(dtype, length) {
27
+ switch (dtype) {
28
+ case 'u8':
29
+ return new Uint8Array(length);
30
+ case 'u16':
31
+ return new Uint16Array(length);
32
+ case 'u32':
33
+ return new Uint32Array(length);
34
+ default:
35
+ return new Float32Array(length);
36
+ }
37
+ }
38
+ /** 非交错整段铺开 / 交错逐元素抽取(原 toBufferAttribute 的数据部分) */
39
+ export function deinterleave(attr) {
40
+ const { data, stride, offsetInBytes, dtype = 'f32' } = attr;
41
+ const components = attr.components ?? attr.comp ?? 3;
42
+ const bpe = bytesPerElement(dtype);
43
+ const itemBytes = components * bpe;
44
+ const actualStride = stride ?? itemBytes;
45
+ const actualOffset = offsetInBytes ?? 0;
46
+ const normalized = dtype === 'u8';
47
+ if (actualStride === itemBytes && actualOffset === 0) {
48
+ const view = typedArray(dtype, data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength));
49
+ return { array: view, components, normalized };
50
+ }
51
+ const count = Math.floor(data.byteLength / actualStride);
52
+ const out = typedArrayOf(dtype, count * components);
53
+ const dv = new DataView(data.buffer, data.byteOffset, data.byteLength);
54
+ for (let i = 0; i < count; i++) {
55
+ const base = i * actualStride + actualOffset;
56
+ for (let c = 0; c < components; c++) {
57
+ const o = base + c * bpe;
58
+ out[i * components + c] =
59
+ dtype === 'u8'
60
+ ? dv.getUint8(o)
61
+ : dtype === 'u16'
62
+ ? dv.getUint16(o, true)
63
+ : dtype === 'u32'
64
+ ? dv.getUint32(o, true)
65
+ : dv.getFloat32(o, true);
66
+ }
67
+ }
68
+ return { array: out, components, normalized };
69
+ }
70
+ /** 把 u8 顶点色转成 float vec3,供着色器直接相乘(原 toColorAttribute) */
71
+ function colorData(attr, vertexCount) {
72
+ const out = new Float32Array(vertexCount * 3);
73
+ if (!attr) {
74
+ out.fill(1);
75
+ return out;
76
+ }
77
+ const src = attr.data;
78
+ const comp = attr.components ?? 4;
79
+ const scale = attr.dtype === 'u8' ? 1 / 255 : 1;
80
+ for (let i = 0; i < vertexCount; i++) {
81
+ const o = i * comp;
82
+ out[i * 3] = (src[o] ?? 255) * scale;
83
+ out[i * 3 + 1] = (src[o + 1] ?? 255) * scale;
84
+ out[i * 3 + 2] = (src[o + 2] ?? 255) * scale;
85
+ }
86
+ return out;
87
+ }
88
+ /** 解出索引(原 toIndex 的数据部分),返回 null = 无索引走 drawRange */
89
+ function indexData(pack) {
90
+ const { indices, indexType, indexCount } = pack;
91
+ if (!indices || indexCount === 0)
92
+ return null;
93
+ // 以字节宽度为准:S3M 的 indexType 在 MeshOpt 包里恒为 0,靠它会读错一半索引。
94
+ const width = Math.floor(indices.byteLength / indexCount);
95
+ const wide = width === 4 || (width !== 2 && (indexType === 1 || indexType === 3));
96
+ const n = indexCount * (wide ? 4 : 2);
97
+ if (n > indices.byteLength)
98
+ return null;
99
+ const buf = indices.buffer.slice(indices.byteOffset, indices.byteOffset + n);
100
+ return wide ? new Uint32Array(buf) : new Uint16Array(buf);
101
+ }
102
+ /**
103
+ * 顶点法线计算(等价 BufferGeometry.computeVertexNormals:索引几何按面累积、
104
+ * 非索引逐面复制,最后归一化)。仅三角面在数据没带 normal 时调用。
105
+ */
106
+ function computeVertexNormals(position, index, vertexCount) {
107
+ const normals = new Float32Array(vertexCount * 3);
108
+ const addFace = (a, b, c) => {
109
+ const ax = position[a * 3], ay = position[a * 3 + 1], az = position[a * 3 + 2];
110
+ const bx = position[b * 3], by = position[b * 3 + 1], bz = position[b * 3 + 2];
111
+ const cx = position[c * 3], cy = position[c * 3 + 1], cz = position[c * 3 + 2];
112
+ const e1x = bx - ax, e1y = by - ay, e1z = bz - az;
113
+ const e2x = cx - ax, e2y = cy - ay, e2z = cz - az;
114
+ const nx = e1y * e2z - e1z * e2y;
115
+ const ny = e1z * e2x - e1x * e2z;
116
+ const nz = e1x * e2y - e1y * e2x;
117
+ for (const v of [a, b, c]) {
118
+ normals[v * 3] += nx;
119
+ normals[v * 3 + 1] += ny;
120
+ normals[v * 3 + 2] += nz;
121
+ }
122
+ };
123
+ if (index) {
124
+ for (let i = 0; i + 2 < index.length; i += 3) {
125
+ addFace(index[i], index[i + 1], index[i + 2]);
126
+ }
127
+ }
128
+ else {
129
+ for (let i = 0; i + 2 < vertexCount; i += 3) {
130
+ addFace(i, i + 1, i + 2);
131
+ }
132
+ }
133
+ for (let i = 0; i < vertexCount; i++) {
134
+ const o = i * 3;
135
+ const len = Math.hypot(normals[o], normals[o + 1], normals[o + 2]);
136
+ if (len > 0) {
137
+ normals[o] /= len;
138
+ normals[o + 1] /= len;
139
+ normals[o + 2] /= len;
140
+ }
141
+ }
142
+ return normals;
143
+ }
144
+ /** 等价 BufferGeometry.computeBoundingBox / computeBoundingSphere 的数学部分 */
145
+ export function computeBounds(position, vertexCount) {
146
+ const min = [Infinity, Infinity, Infinity];
147
+ const max = [-Infinity, -Infinity, -Infinity];
148
+ for (let i = 0; i < vertexCount; i++) {
149
+ for (let c = 0; c < 3; c++) {
150
+ const v = position[i * 3 + c];
151
+ if (v < min[c])
152
+ min[c] = v;
153
+ if (v > max[c])
154
+ max[c] = v;
155
+ }
156
+ }
157
+ const center = [
158
+ (min[0] + max[0]) / 2,
159
+ (min[1] + max[1]) / 2,
160
+ (min[2] + max[2]) / 2,
161
+ ];
162
+ let radius = 0;
163
+ for (let i = 0; i < vertexCount; i++) {
164
+ const dx = position[i * 3] - center[0];
165
+ const dy = position[i * 3 + 1] - center[1];
166
+ const dz = position[i * 3 + 2] - center[2];
167
+ const d = dx * dx + dy * dy + dz * dz;
168
+ if (d > radius)
169
+ radius = d;
170
+ }
171
+ return { boxMin: min, boxMax: max, sphereCenter: center, sphereRadius: Math.sqrt(radius) };
172
+ }
173
+ const LINE_PRIMITIVES = [LINE_PRIMITIVE, 2, 3];
174
+ const POINT_PRIMITIVE_TYPE = POINT_PRIMITIVE;
175
+ function isLinePrimitive(primitiveType) {
176
+ return LINE_PRIMITIVES.includes(primitiveType);
177
+ }
178
+ /** 列主序 mat4 是否为单位阵(等价 THREE.Matrix4.equals(IDENTITY)) */
179
+ function isIdentity(m) {
180
+ if (!m)
181
+ return true;
182
+ return (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 0 &&
183
+ m[4] === 0 && m[5] === 1 && m[6] === 0 && m[7] === 0 &&
184
+ m[8] === 0 && m[9] === 0 && m[10] === 1 && m[11] === 0 &&
185
+ m[12] === 0 && m[13] === 0 && m[14] === 0 && m[15] === 1);
186
+ }
187
+ /** 列主序 mat4 变换点(仿射,忽略投影行——与 applyMatrix4 对点一致) */
188
+ function xformPoint(m, x, y, z, out) {
189
+ out[0] = m[0] * x + m[4] * y + m[8] * z + m[12];
190
+ out[1] = m[1] * x + m[5] * y + m[9] * z + m[13];
191
+ out[2] = m[2] * x + m[6] * y + m[10] * z + m[14];
192
+ }
193
+ /**
194
+ * 上 3x3 的逆转置(normal matrix),列主序展开。
195
+ * 等价 THREE.Matrix3.getNormalMatrix,纯标量实现,不依赖 three。
196
+ */
197
+ function normalMatrixOf(m) {
198
+ // 上 3x3(列主序):a=m0 b=m4 c=m8 / d=m1 e=m5 f=m9 / g=m2 h=m6 i=m10
199
+ const a = m[0], b = m[4], c = m[8];
200
+ const d = m[1], e = m[5], f = m[9];
201
+ const g = m[2], h = m[6], i = m[10];
202
+ const A = e * i - f * h, B = -(d * i - f * g), C = d * h - e * g;
203
+ const D = -(b * i - c * h), E = a * i - c * g, F = -(a * h - b * g);
204
+ const G = b * f - c * e, H = -(a * f - c * d), I = a * e - b * d;
205
+ const det = a * A + b * B + c * C || 1e-12;
206
+ // 逆转置 = inv 上 3x3 的转置;inv 的元素 = cofactor / det(行主序),转置后回列主序
207
+ const inv = [A / det, B / det, C / det, D / det, E / det, F / det, G / det, H / det, I / det];
208
+ // 转置回列主序布局:n[0..2] 是第一列
209
+ const n = new Float32Array(9);
210
+ n[0] = inv[0];
211
+ n[1] = inv[3];
212
+ n[2] = inv[6];
213
+ n[3] = inv[1];
214
+ n[4] = inv[4];
215
+ n[5] = inv[7];
216
+ n[6] = inv[2];
217
+ n[7] = inv[5];
218
+ n[8] = inv[8];
219
+ return n;
220
+ }
221
+ /** 逆转置 3x3 变换法线并归一化 */
222
+ function xformNormal(n, x, y, z, out) {
223
+ out[0] = n[0] * x + n[3] * y + n[6] * z;
224
+ out[1] = n[1] * x + n[4] * y + n[7] * z;
225
+ out[2] = n[2] * x + n[5] * y + n[8] * z;
226
+ const len = Math.hypot(out[0], out[1], out[2]) || 1;
227
+ out[0] /= len;
228
+ out[1] /= len;
229
+ out[2] /= len;
230
+ }
231
+ /**
232
+ * 合并同材质候选(等价 GeometryBuilder.mergeBatchGeometries 的数据部分)。
233
+ * 矩阵变换烘进顶点;合出的 primitive 自身 matrix 为 null。
234
+ */
235
+ function mergeCandidates(candidates) {
236
+ let totalVertices = 0;
237
+ let totalIndices = 0;
238
+ let hasNormal = false;
239
+ let hasUv = false;
240
+ let hasUv1 = false;
241
+ let hasAtlas = false;
242
+ for (const c of candidates) {
243
+ totalVertices += c.vertexCount;
244
+ totalIndices += c.index ? c.indexCount : c.vertexCount;
245
+ if (c.attrs.normal)
246
+ hasNormal = true;
247
+ if (c.attrs.uv)
248
+ hasUv = true;
249
+ if (c.attrs.uv1)
250
+ hasUv1 = true;
251
+ if (c.attrs.aAtlasRect)
252
+ hasAtlas = true;
253
+ }
254
+ const mergedPos = { array: new Float32Array(totalVertices * 3), components: 3, normalized: false };
255
+ const mergedNorm = hasNormal ? { array: new Float32Array(totalVertices * 3), components: 3, normalized: false } : null;
256
+ const mergedUv = hasUv ? { array: new Float32Array(totalVertices * 2), components: 2, normalized: false } : null;
257
+ const mergedUv1 = hasUv1 ? { array: new Float32Array(totalVertices * 2), components: 2, normalized: false } : null;
258
+ const mergedColor = { array: new Float32Array(totalVertices * 3), components: 3, normalized: false };
259
+ const mergedBatchId = { array: new Float32Array(totalVertices), components: 1, normalized: false };
260
+ const mergedRect0 = hasAtlas ? { array: new Float32Array(totalVertices * 4), components: 4, normalized: false } : null;
261
+ const mergedRect1 = hasAtlas ? { array: new Float32Array(totalVertices * 4), components: 4, normalized: false } : null;
262
+ const mergedSecUv = hasAtlas ? { array: new Float32Array(totalVertices * 2), components: 2, normalized: false } : null;
263
+ const mergedIndices = (totalVertices > 65535 ? new Uint32Array(totalIndices) : new Uint16Array(totalIndices));
264
+ const tmp = [0, 0, 0];
265
+ let vertexOffset = 0;
266
+ let indexOffset = 0;
267
+ for (const c of candidates) {
268
+ const { attrs } = c;
269
+ const vCount = c.vertexCount;
270
+ const m = isIdentity(c.matrix) ? null : c.matrix;
271
+ const nrm = m && mergedNorm ? normalMatrixOf(m) : null;
272
+ const posArr = attrs.position.array;
273
+ const normArr = attrs.normal?.array;
274
+ const uvArr = attrs.uv?.array;
275
+ const uv1Arr = attrs.uv1?.array;
276
+ const colArr = attrs.aColor.array;
277
+ const bArr = attrs.aBatchId.array;
278
+ const posOut = mergedPos.array;
279
+ const normOut = mergedNorm?.array;
280
+ const uvOut = mergedUv?.array;
281
+ const uv1Out = mergedUv1?.array;
282
+ const colOut = mergedColor.array;
283
+ const bOut = mergedBatchId.array;
284
+ for (let i = 0; i < vCount; i++) {
285
+ const dst = vertexOffset + i;
286
+ // position
287
+ if (m) {
288
+ xformPoint(m, posArr[i * 3], posArr[i * 3 + 1], posArr[i * 3 + 2], tmp);
289
+ posOut[dst * 3] = tmp[0];
290
+ posOut[dst * 3 + 1] = tmp[1];
291
+ posOut[dst * 3 + 2] = tmp[2];
292
+ }
293
+ else {
294
+ posOut[dst * 3] = posArr[i * 3];
295
+ posOut[dst * 3 + 1] = posArr[i * 3 + 1];
296
+ posOut[dst * 3 + 2] = posArr[i * 3 + 2];
297
+ }
298
+ // normal
299
+ if (normOut) {
300
+ if (normArr && nrm) {
301
+ xformNormal(nrm, normArr[i * 3], normArr[i * 3 + 1], normArr[i * 3 + 2], tmp);
302
+ normOut[dst * 3] = tmp[0];
303
+ normOut[dst * 3 + 1] = tmp[1];
304
+ normOut[dst * 3 + 2] = tmp[2];
305
+ }
306
+ else if (normArr) {
307
+ normOut[dst * 3] = normArr[i * 3];
308
+ normOut[dst * 3 + 1] = normArr[i * 3 + 1];
309
+ normOut[dst * 3 + 2] = normArr[i * 3 + 2];
310
+ }
311
+ }
312
+ // uv / uv1
313
+ if (uvOut && uvArr) {
314
+ uvOut[dst * 2] = uvArr[i * 2];
315
+ uvOut[dst * 2 + 1] = uvArr[i * 2 + 1];
316
+ }
317
+ if (uv1Out && uv1Arr) {
318
+ uv1Out[dst * 2] = uv1Arr[i * 2];
319
+ uv1Out[dst * 2 + 1] = uv1Arr[i * 2 + 1];
320
+ }
321
+ // aColor
322
+ if (colArr) {
323
+ colOut[dst * 3] = colArr[i * 3];
324
+ colOut[dst * 3 + 1] = colArr[i * 3 + 1];
325
+ colOut[dst * 3 + 2] = colArr[i * 3 + 2];
326
+ }
327
+ else {
328
+ colOut[dst * 3] = 1;
329
+ colOut[dst * 3 + 1] = 1;
330
+ colOut[dst * 3 + 2] = 1;
331
+ }
332
+ // aBatchId
333
+ bOut[dst] = bArr ? bArr[i] : -1;
334
+ }
335
+ // 图集矩形(缺失补 0,等价原 copyAttr 的 fallback)
336
+ if (mergedRect0) {
337
+ const r0 = attrs.aAtlasRect?.array;
338
+ const r1 = attrs.aAtlasRect1?.array;
339
+ const su = attrs.aSecUv?.array;
340
+ const r0Out = mergedRect0.array;
341
+ const r1Out = mergedRect1.array;
342
+ const suOut = mergedSecUv.array;
343
+ for (let i = 0; i < vCount; i++) {
344
+ const dst = (vertexOffset + i) * 4;
345
+ for (let k = 0; k < 4; k++) {
346
+ r0Out[dst + k] = r0 ? r0[i * 4 + k] ?? 0 : 0;
347
+ r1Out[dst + k] = r1 ? r1[i * 4 + k] ?? 0 : 0;
348
+ }
349
+ suOut[(vertexOffset + i) * 2] = su ? su[i * 2] ?? 0 : 0;
350
+ suOut[(vertexOffset + i) * 2 + 1] = su ? su[i * 2 + 1] ?? 0 : 0;
351
+ }
352
+ }
353
+ // index(偏移累加;无索引按序号)
354
+ if (c.index) {
355
+ for (let k = 0; k < c.indexCount; k++) {
356
+ mergedIndices[indexOffset + k] = c.index[k] + vertexOffset;
357
+ }
358
+ indexOffset += c.indexCount;
359
+ }
360
+ else {
361
+ for (let k = 0; k < vCount; k++) {
362
+ mergedIndices[indexOffset + k] = k + vertexOffset;
363
+ }
364
+ indexOffset += vCount;
365
+ }
366
+ vertexOffset += vCount;
367
+ }
368
+ const bounds = computeBounds(mergedPos.array, totalVertices);
369
+ return {
370
+ skeletonName: candidates[0].name,
371
+ geoNames: candidates.map((c) => c.name),
372
+ primitiveType: 4,
373
+ passNames: candidates[0].passNames,
374
+ matrix: null,
375
+ vertexCount: totalVertices,
376
+ indexCount: totalIndices,
377
+ attributes: {
378
+ position: mergedPos,
379
+ normal: mergedNorm ?? undefined,
380
+ uv: mergedUv ?? undefined,
381
+ uv1: mergedUv1 ?? undefined,
382
+ aColor: mergedColor,
383
+ aBatchId: mergedBatchId,
384
+ aAtlasRect: mergedRect0 ?? undefined,
385
+ aAtlasRect1: mergedRect1 ?? undefined,
386
+ aSecUv: mergedSecUv ?? undefined,
387
+ },
388
+ index: mergedIndices,
389
+ bounds,
390
+ batchedFrom: candidates.length,
391
+ };
392
+ }
393
+ /** 每骨架只解一次交错流(同一骨架被多个 pack / geode 引用时共享同一份数据) */
394
+ function assembleSkeleton(name, geo, tile, skipped) {
395
+ const vp = geo.vertexPackage;
396
+ const positionAttr = vp.vertexAttributes.find((a) => a.semantic === 'position');
397
+ if (!positionAttr) {
398
+ skipped.push(`${name} 无 position`);
399
+ return null;
400
+ }
401
+ const vertexCount = vp.verticesCount || 0;
402
+ const attrs = {
403
+ position: deinterleave(positionAttr),
404
+ aColor: { array: new Float32Array(0), components: 3, normalized: false },
405
+ aBatchId: { array: new Float32Array(0), components: 1, normalized: false },
406
+ };
407
+ let colorAttr = null;
408
+ let batchAttr = null;
409
+ let normalData = null;
410
+ let uvData = null;
411
+ let uv1Data = null;
412
+ for (const attr of vp.vertexAttributes) {
413
+ if (attr.divisor !== undefined)
414
+ continue; // 实例属性不进顶点流
415
+ if (attr.semantic === 'position')
416
+ continue;
417
+ if (attr.semantic === 'color')
418
+ colorAttr = attr;
419
+ else if (attr.semantic === 'batchId')
420
+ batchAttr = attr;
421
+ else if (attr.semantic === 'normal')
422
+ normalData = deinterleave(attr);
423
+ else if (attr.semantic === 'uv')
424
+ uvData = deinterleave(attr);
425
+ else if (attr.semantic === 'uv2')
426
+ uv1Data = deinterleave(attr);
427
+ }
428
+ attrs.aColor = { array: colorData(colorAttr, vertexCount), components: 3, normalized: false };
429
+ attrs.aBatchId = batchAttr
430
+ ? { array: deinterleave(batchAttr).array, components: 1, normalized: false }
431
+ : { array: new Float32Array(vertexCount).fill(-1), components: 1, normalized: false };
432
+ if (normalData)
433
+ attrs.normal = normalData;
434
+ if (uvData)
435
+ attrs.uv = uvData;
436
+ if (uv1Data)
437
+ attrs.uv1 = uv1Data;
438
+ // S3MBLOCK 图集:逐顶点带子区域矩形;烘焙图用第二套 UV(aSecUv)
439
+ const rects = tile.atlasRects?.[name];
440
+ if (rects) {
441
+ attrs.aAtlasRect = { array: rects.uv ?? new Float32Array(vertexCount * 4), components: 4, normalized: false };
442
+ if (rects.uv2 && uv1Data) {
443
+ attrs.aAtlasRect1 = { array: rects.uv2, components: 4, normalized: false };
444
+ attrs.aSecUv = { array: uv1Data.array, components: uv1Data.components, normalized: uv1Data.normalized };
445
+ }
446
+ else {
447
+ attrs.aAtlasRect1 = { array: new Float32Array(vertexCount * 4), components: 4, normalized: false };
448
+ attrs.aSecUv = attrs.uv ?? { array: new Float32Array(vertexCount * 2), components: 2, normalized: false };
449
+ }
450
+ }
451
+ // 一个索引包都没有的骨架 = 纯点集(高斯泼溅 / 无索引点云):补「顶点即点」伪包
452
+ let packs = geo.indexPackages ?? [];
453
+ if (packs.length === 0 && vertexCount > 0) {
454
+ packs = [
455
+ {
456
+ indexCount: 0,
457
+ indexType: 0,
458
+ useIndex: 0,
459
+ primitiveType: POINT_PRIMITIVE_TYPE,
460
+ indices: null,
461
+ passNames: [],
462
+ },
463
+ ];
464
+ }
465
+ return {
466
+ attrs,
467
+ packs,
468
+ instanced: vp.instanceIndex !== -1 && (vp.instanceMode === 16 || vp.instanceMode === 17),
469
+ };
470
+ }
471
+ function primitiveOf(skeletonName, geoName, geo, asm, pack, matrix) {
472
+ const vertexCount = geo.vertexPackage.verticesCount || 0;
473
+ const index = indexData(pack);
474
+ const attrs = { ...asm.attrs };
475
+ // 数据没带法线的三角网格:必须按索引后的连续顶点算,否则法线朝向错乱甚至 NaN 死黑面
476
+ if (!isLinePrimitive(pack.primitiveType) && pack.primitiveType !== POINT_PRIMITIVE_TYPE && !attrs.normal) {
477
+ attrs.normal = {
478
+ array: computeVertexNormals(attrs.position.array, index, vertexCount),
479
+ components: 3,
480
+ normalized: false,
481
+ };
482
+ }
483
+ return {
484
+ skeletonName,
485
+ geoNames: [geoName],
486
+ primitiveType: pack.primitiveType,
487
+ passNames: pack.passNames ?? [],
488
+ matrix,
489
+ vertexCount,
490
+ indexCount: pack.indexCount || 0,
491
+ attributes: attrs,
492
+ index,
493
+ bounds: computeBounds(attrs.position.array, vertexCount),
494
+ };
495
+ }
496
+ /**
497
+ * 瓦片几何组装入口。与 GeometryBuilder 的摆放/分组逻辑逐位对齐,
498
+ * 但只产出纯数据 —— three 包装在渲染层。
499
+ */
500
+ export function assembleTileGeometry(tile, options = {}) {
501
+ const batching = options.batching !== false;
502
+ const skipped = [];
503
+ const stats = { vertices: 0, instanced: 0, edgeLines: 0, skipped };
504
+ const skeletons = new Map();
505
+ for (const [name, geo] of Object.entries(tile.geoPackage ?? {})) {
506
+ const asm = assembleSkeleton(name, geo, tile, skipped);
507
+ if (asm) {
508
+ skeletons.set(name, asm);
509
+ stats.vertices += geo.vertexPackage.verticesCount || 0;
510
+ }
511
+ }
512
+ const primitives = [];
513
+ const batchGroups = new Map();
514
+ let placed = 0;
515
+ const emit = (p) => {
516
+ if (isLinePrimitive(p.primitiveType))
517
+ stats.edgeLines++;
518
+ primitives.push(p);
519
+ };
520
+ const group = (candidate) => {
521
+ const matKey = candidate.passNames[0] ?? '__default__';
522
+ let list = batchGroups.get(matKey);
523
+ if (!list) {
524
+ list = [];
525
+ batchGroups.set(matKey, list);
526
+ }
527
+ list.push(candidate);
528
+ };
529
+ const placeOrGroup = (name, geo, asm, pi, matrix) => {
530
+ const pack = asm.packs[pi];
531
+ const isInstanced = asm.instanced && !!geo.vertexPackage.instanceBuffer && (geo.vertexPackage.instanceCount ?? 0) > 0;
532
+ if (isLinePrimitive(pack.primitiveType) || isInstanced) {
533
+ if (isInstanced)
534
+ stats.instanced++;
535
+ emit(primitiveOf(name, name, geo, asm, pack, matrix));
536
+ placed++;
537
+ return;
538
+ }
539
+ if (batching && pack.primitiveType === 4) {
540
+ group({
541
+ attrs: asm.attrs,
542
+ index: indexData(pack),
543
+ vertexCount: geo.vertexPackage.verticesCount || 0,
544
+ indexCount: pack.indexCount || 0,
545
+ name,
546
+ geo,
547
+ matrix,
548
+ passNames: pack.passNames ?? [],
549
+ primitiveType: pack.primitiveType,
550
+ });
551
+ placed++;
552
+ return;
553
+ }
554
+ emit(primitiveOf(name, name, geo, asm, pack, matrix));
555
+ placed++;
556
+ };
557
+ // 按 Geode 摆放:一个骨架可能被多个 geode 以不同矩阵引用
558
+ for (const pageLod of tile.groupNode?.pageLods ?? []) {
559
+ for (const geode of pageLod.geodes ?? []) {
560
+ const matrix = geode.matrix && geode.matrix.length === 16 ? geode.matrix : null;
561
+ for (const name of geode.skeletonNames ?? []) {
562
+ const asm = skeletons.get(name);
563
+ if (!asm)
564
+ continue;
565
+ const geo = tile.geoPackage[name];
566
+ if (!geo)
567
+ continue;
568
+ for (let pi = 0; pi < asm.packs.length; pi++) {
569
+ placeOrGroup(name, geo, asm, pi, matrix);
570
+ }
571
+ }
572
+ }
573
+ }
574
+ // 兜底:没有被任何 geode 引用的骨架,按单位矩阵渲染,避免整块消失
575
+ if (placed === 0) {
576
+ for (const [name, asm] of skeletons) {
577
+ const geo = tile.geoPackage[name];
578
+ if (!geo)
579
+ continue;
580
+ for (let pi = 0; pi < asm.packs.length; pi++) {
581
+ placeOrGroup(name, geo, asm, pi, null);
582
+ }
583
+ }
584
+ }
585
+ // 执行同材质几何合批
586
+ if (batchGroups.size > 0) {
587
+ for (const [, list] of batchGroups) {
588
+ stats.originalMeshes = (stats.originalMeshes ?? 0) + list.length;
589
+ if (list.length === 1) {
590
+ const c = list[0];
591
+ emit(primitiveOf(c.name, c.name, c.geo, { attrs: c.attrs, packs: [], instanced: false }, {
592
+ indexCount: c.indexCount,
593
+ indexType: 0,
594
+ useIndex: 1,
595
+ primitiveType: c.primitiveType,
596
+ indices: c.index ? new Uint8Array(c.index.buffer, c.index.byteOffset, c.index.byteLength) : null,
597
+ passNames: c.passNames,
598
+ }, c.matrix));
599
+ }
600
+ else {
601
+ emit(mergeCandidates(list));
602
+ }
603
+ }
604
+ }
605
+ return { primitives, stats };
606
+ }
607
+ //# sourceMappingURL=TileGeometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TileGeometry.js","sourceRoot":"","sources":["../../src/core/TileGeometry.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,8 @@ export interface S3MDatasetOptions {
29
29
  align?: DatasetAlignment;
30
30
  /** 垂直高度偏移(米),在 align 对齐基准上的额外偏移,正数抬升,负数下降,默认 0 */
31
31
  heightOffset?: number;
32
+ /** 是否用 Web Worker 解析经典 .s3mb 瓦片(默认开,崩溃自动降级主线程),见 S3MTilesetOptions.useWorker */
33
+ useWorker?: boolean;
32
34
  /**
33
35
  * 是否对该数据集生成几何棱线(CPU 端 EdgesGeometry)。
34
36
  * - 不填:跟随全局 `style.edges`