@jdultra/threedtiles 12.0.1 → 13.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/README.md CHANGED
@@ -13,7 +13,7 @@ Getting started vanilla js:
13
13
 
14
14
  GettingStarted RTF:
15
15
  [app](https://www.jdultra.com/threedtiles/demos/gettingStartedRTF)
16
- [code](https://www.jdultra.com/threedtiles/demos/gettingStartedRTF/threedtiles-gettingStarted-RTF.zip)
16
+ [code](https://www.jdultra.com/threedtiles/demos/gettingStartedRTF/threedtiles-gettingStarted-rtf.zip)
17
17
 
18
18
  ## Demos
19
19
 
@@ -632,6 +632,10 @@ animate();
632
632
  However, if you have several OGC3DTiles loaded or when you use instancedTilesets, you may have hundreds or even thousands of LOD trees that need to be updated individually. In order to preserve frame-rate,
633
633
  you'll want to avoid updating every single tileset on every frame.
634
634
 
635
+ #### Mobile performance
636
+ just a note because this is valid for any heavy webgl app. mobiles throttle automatically when it deems the app heavy.
637
+ if you control frame-rate manually by only doing updates and renders at 30fps, mobile apps will run more smoothly because the automatic throttling, which is very un-smooth, doesn't kick in as much.
638
+
635
639
  ### Memory
636
640
  This is especially important for iOS that limits the memory per tab quite harshly and doesn't allow growing the memory allocated to a tab.
637
641
 
@@ -0,0 +1,178 @@
1
+ let s, n = null;
2
+ function F() {
3
+ return (n === null || n.byteLength === 0) && (n = new Uint32Array(s.memory.buffer)), n;
4
+ }
5
+ let c = 0;
6
+ function M(A, I) {
7
+ const g = I(A.length * 4, 4) >>> 0;
8
+ return F().set(A, g / 4), c = A.length, g;
9
+ }
10
+ function U(A, I) {
11
+ return A = A >>> 0, F().subarray(A / 4, A / 4 + I);
12
+ }
13
+ function k(A, I) {
14
+ const g = M(A, s.__wbindgen_malloc), B = c, Q = M(I, s.__wbindgen_malloc), i = c, a = s.radix_sort_indices(g, B, Q, i);
15
+ var E = U(a[0], a[1]).slice();
16
+ return s.__wbindgen_free(a[0], a[1] * 4, 4), E;
17
+ }
18
+ async function S(A, I) {
19
+ if (typeof Response == "function" && A instanceof Response) {
20
+ if (typeof WebAssembly.instantiateStreaming == "function")
21
+ try {
22
+ return await WebAssembly.instantiateStreaming(A, I);
23
+ } catch (B) {
24
+ if (A.headers.get("Content-Type") != "application/wasm")
25
+ console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", B);
26
+ else
27
+ throw B;
28
+ }
29
+ const g = await A.arrayBuffer();
30
+ return await WebAssembly.instantiate(g, I);
31
+ } else {
32
+ const g = await WebAssembly.instantiate(A, I);
33
+ return g instanceof WebAssembly.Instance ? { instance: g, module: A } : g;
34
+ }
35
+ }
36
+ function d() {
37
+ const A = {};
38
+ return A.wbg = {}, A.wbg.__wbindgen_init_externref_table = function() {
39
+ const I = s.__wbindgen_export_0, g = I.grow(4);
40
+ I.set(0, void 0), I.set(g + 0, void 0), I.set(g + 1, null), I.set(g + 2, !0), I.set(g + 3, !1);
41
+ }, A;
42
+ }
43
+ function J(A, I) {
44
+ return s = A.exports, Y.__wbindgen_wasm_module = I, n = null, s.__wbindgen_start(), s;
45
+ }
46
+ async function Y(A) {
47
+ if (s !== void 0) return s;
48
+ typeof A < "u" && (Object.getPrototypeOf(A) === Object.prototype ? { module_or_path: A } = A : console.warn("using deprecated parameters for the initialization function; pass a single object instead")), typeof A > "u" && (A = new URL("data:application/wasm;base64,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aiIFIAMgAmsiAkEBcjYCBEGIjMAAIAI2AgBBkIzAACAFNgIAIAgMAQsgCAsMAgsLQQEgAUUNABpBqYjAAC0AABogAUEBECMLIgIEQCAAIAE2AgggACACNgIEIABBADYCAA8LIAAgATYCCCAAQQE2AgQMAQsgAEEANgIECyAAQQE2AgALdgEBfyMAQSBrIgIkAAJ/IAAoAgBBgICAgHhHBEAgASAAKAIEIAAoAggQIQwBCyACQRhqIAAoAgwiAEEQaikCADcDACACQRBqIABBCGopAgA3AwAgAiAAKQIANwMIIAEoAhQgASgCGCACQQhqEAULIAJBIGokAAtsAQF/IwBBMGsiASQAIAEgADYCACABQYABNgIEIAFBAjYCDCABQZiIwAA2AgggAUICNwIUIAEgAUEEaq1CgICAgCCENwMoIAEgAa1CgICAgCCENwMgIAEgAUEgajYCECABQQhqQYiGwAAQFAALZQAjAEEwayIAJABBqIjAAC0AAARAIABBAjYCDCAAQdiCwAA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIAghDcDICAAIABBIGo2AhAgAEEIakH4gsAAEBQACyAAQTBqJAALtAIBA38jAEEgayICJAAgAkEQaiIDIABBEGopAgA3AwAgAkEIaiIEIABBCGopAgA3AwAgAkEBOwEcIAIgATYCGCACIAApAgA3AwAjAEEgayIAJAAgAigCGCEBIABBEGogAykCADcDACAAQQhqIAQpAgA3AwAgACACNgIcIAAgATYCGCAAIAIpAgA3AwBBACECIwBBEGsiASQAIAAoAgwhAwJAAkACQAJAIAAoAgQOAgABAgsgAw0BQQEhAwwCCyADDQAgACgCACIDKAIEIQIgAygCACEDDAELIAFBgICAgHg2AgAgASAANgIMIAFBxIPAACAAKAIYIAAoAhwiAC0AHCAALQAdEA0ACyABIAI2AgQgASADNgIAIAFBqIPAACAAKAIYIAAoAhwiAC0AHCAALQAdEA0AC0EBAX8gAiAAKAIAIAAoAggiA2tLBEAgACADIAIQDCAAKAIIIQMLIAAoAgQgA2ogASACEAgaIAAgAiADajYCCEEACyYBAX8CQCAAEAEiAUUNACABQQRrLQAAQQNxRQ0AIAEgABAOCyABC00BAn9BqYjAAC0AABogASgCBCECIAEo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", import.meta.url));
49
+ const I = d();
50
+ (typeof A == "string" || typeof Request == "function" && A instanceof Request || typeof URL == "function" && A instanceof URL) && (A = fetch(A));
51
+ const { instance: g, module: B } = await S(await A, I);
52
+ return J(g, B);
53
+ }
54
+ const R = new ArrayBuffer(4), K = new Float32Array(R), L = new Uint32Array(R);
55
+ class f {
56
+ constructor(I) {
57
+ this.points = new Float32Array(4096 * 3), this.distances = new Uint32Array(4096), this.pointSets = /* @__PURE__ */ new Map(), this.numUsed = 0, this.sortOngoing = !1, this.sortCallback = I, this.sortPromise = Promise.resolve();
58
+ }
59
+ hidePoints(I) {
60
+ const g = this.pointSets.get(I);
61
+ g.used && (g.used = !1);
62
+ }
63
+ removePoints(I) {
64
+ const g = this.pointSets.get(I);
65
+ g.used && (g.used = !1), this.pointSets.delete(I);
66
+ let B = 0;
67
+ for (const [Q, i] of this.pointSets.entries())
68
+ Q + i.length > B && (B = Q + i.length);
69
+ }
70
+ showPoints(I) {
71
+ const g = this.pointSets.get(I);
72
+ g.used || (g.used = !0);
73
+ }
74
+ resizeArrays(I) {
75
+ if (isNaN(I) && console.log("hit max splats"), I > this.points.length) {
76
+ I = Math.max(this.points.length * 2, I);
77
+ const g = new Float32Array(I);
78
+ g.set(this.points, 0), this.points = g;
79
+ const B = Math.floor(I / 3), Q = new Uint32Array(B);
80
+ Q.set(this.distances, 0), this.distances = Q;
81
+ }
82
+ }
83
+ addBatchesOffsetStrideCount(I, g, B, Q, i) {
84
+ const a = Math.max(this.points.length, g[g.length - 1] + i * 3);
85
+ this.resizeArrays(a);
86
+ for (let E = 0; E < g.length; E++) {
87
+ const o = g[E], w = E * i * Q, D = Math.min((I.length - w) / Q, i);
88
+ for (let t = 0; t < D; t++)
89
+ this.points[o + t * 3] = I[t * Q + B + w], this.points[o + t * 3 + 1] = I[t * Q + B + w + 1], this.points[o + t * 3 + 2] = I[t * Q + B + w + 2];
90
+ this.pointSets.set(o, { length: D * 3, used: !1 });
91
+ }
92
+ }
93
+ computeDistances(I, g, B) {
94
+ this.distances.fill(0);
95
+ const Q = Array.from(this.pointSets.keys()), i = Q.length;
96
+ this.numUsed = 0;
97
+ for (let E = 0; E < i; E++) {
98
+ const o = Q[E], w = this.pointSets.get(o);
99
+ if (!w.used) continue;
100
+ const D = Math.floor(w.length / 3);
101
+ this.numUsed += D;
102
+ }
103
+ this.indexes = new Uint32Array(this.numUsed), this.distances = new Uint32Array(this.numUsed);
104
+ let a = 0;
105
+ for (let E = 0; E < i; E++) {
106
+ const o = Q[E], w = Math.floor(o / 3), D = this.pointSets.get(o);
107
+ if (!D.used) continue;
108
+ const t = Math.floor(D.length / 3);
109
+ for (let N = 0; N < t; N++) {
110
+ const y = o + N * 3, G = I - this.points[y], e = g - this.points[y + 1], h = B - this.points[y + 2], r = G * G + e * e + h * h;
111
+ K[0] = r, this.distances[a] = L[0], this.indexes[a++] = w + N;
112
+ }
113
+ }
114
+ }
115
+ sort(I, g) {
116
+ this.pendingSort = I, this.pendingID = g, this.sortOngoing || (this.sortOngoing = !0, this.processSortQueue());
117
+ }
118
+ // Asynchronous loop to process sort requests sequentially
119
+ async processSortQueue() {
120
+ for (this.initialized || (await Y(), this.initialized = !0); this.pendingSort; ) {
121
+ const I = this.pendingSort, g = this.pendingID;
122
+ this.pendingSort = null, this.pendingID = null;
123
+ const B = performance.now();
124
+ this.computeDistances(I[0], I[1], I[2]), this.indexes = k(this.indexes, this.distances), performance.now() - B, this.sortCallback(this.indexes, this.numUsed, g), await new Promise((Q) => setTimeout(Q, 0));
125
+ }
126
+ this.sortOngoing = !1;
127
+ }
128
+ }
129
+ const H = (A, I, g) => {
130
+ const B = new Uint32Array(A);
131
+ postMessage({
132
+ order: B.buffer,
133
+ count: I,
134
+ id: g
135
+ }, [B.buffer]);
136
+ };
137
+ let C;
138
+ self.onmessage = function(A) {
139
+ try {
140
+ switch (A.data.method) {
141
+ case "addBatches":
142
+ C || (C = new f(H)), C.addBatchesOffsetStrideCount(new Float32Array(A.data.positions), A.data.insertionIndexes, A.data.offset, A.data.stride, A.data.batchSize);
143
+ break;
144
+ case "hide":
145
+ C && C.hidePoints(A.data.insertionIndex);
146
+ break;
147
+ case "hideBatches":
148
+ C && (A.data.insertionIndexes.forEach((I) => {
149
+ C.hidePoints(I);
150
+ }), C.sort(A.data.xyz, A.data.id));
151
+ break;
152
+ case "show":
153
+ C && (C.showPoints(A.data.insertionIndex), C.sort(A.data.xyz, A.data.id));
154
+ break;
155
+ case "showBatches":
156
+ C && (A.data.insertionIndexes.forEach((I) => {
157
+ C.showPoints(I);
158
+ }), C.sort(A.data.xyz, A.data.id));
159
+ break;
160
+ case "remove":
161
+ C && (C.removePoints(A.data.insertionIndex), C.sort(A.data.xyz, A.data.id));
162
+ break;
163
+ case "removeBatches":
164
+ C && (A.data.insertionIndexes.forEach((I) => {
165
+ C.removePoints(I);
166
+ }), C.sort(A.data.xyz, A.data.id));
167
+ break;
168
+ case "sort":
169
+ C && C.sort(A.data.xyz, A.data.id);
170
+ break;
171
+ default:
172
+ throw new Error(`No method with name ${A.data.method}`);
173
+ }
174
+ } catch (I) {
175
+ postMessage({ error: I.message });
176
+ }
177
+ };
178
+ //# sourceMappingURL=PointsManager.worker-5fpGpVvf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PointsManager.worker-5fpGpVvf.js","sources":["../src/splats/radix/wasm_sorter.js","../src/splats/PointsManager.js","../src/splats/PointsManager.worker.js"],"sourcesContent":["let wasm;\n\nlet cachedUint32ArrayMemory0 = null;\n\nfunction getUint32ArrayMemory0() {\n if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {\n cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachedUint32ArrayMemory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray32ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 4, 4) >>> 0;\n getUint32ArrayMemory0().set(arg, ptr / 4);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);\n}\n/**\n * Radix Sort implementation for sorting indices based on distances.\n * Both `indices` and `distances` should have the same length.\n * Returns a new vector of sorted indices in descending order based on distances.\n * @param {Uint32Array} indices\n * @param {Uint32Array} distances\n * @returns {Uint32Array}\n */\nexport function radix_sort_indices(indices, distances) {\n const ptr0 = passArray32ToWasm0(indices, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArray32ToWasm0(distances, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.radix_sort_indices(ptr0, len0, ptr1, len1);\n var v3 = getArrayU32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v3;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n\n } catch (e) {\n if (module.headers.get('Content-Type') != 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbindgen_init_externref_table = function() {\n const table = wasm.__wbindgen_export_0;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n ;\n };\n\n return imports;\n}\n\nfunction __wbg_init_memory(imports, memory) {\n\n}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedUint32ArrayMemory0 = null;\n\n\n wasm.__wbindgen_start();\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n\n __wbg_init_memory(imports);\n\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n\n const instance = new WebAssembly.Instance(module, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (typeof module_or_path === 'undefined') {\n module_or_path = new URL('wasm_sorter_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n __wbg_init_memory(imports);\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n","import init, { radix_sort_indices } from './radix/wasm_sorter.js';\r\n\r\nconst buffer = new ArrayBuffer(4);\r\nconst floatView = new Float32Array(buffer);\r\nconst uintView = new Uint32Array(buffer);\r\n\r\nclass PointsManager {\r\n constructor(sortCallback) {\r\n this.points = new Float32Array(4096 * 3);\r\n this.distances = new Uint32Array(4096);\r\n this.pointSets = new Map(); // Map<number, object>\r\n this.numUsed = 0;\r\n this.sortOngoing = false;\r\n this.sortCallback = sortCallback;\r\n this.sortPromise = Promise.resolve();\r\n }\r\n\r\n\r\n\r\n hidePoints(insertionIndex) {\r\n /* console.log(\"hide\"); */\r\n const pointSet = this.pointSets.get(insertionIndex);\r\n if (pointSet.used) {\r\n pointSet.used = false;\r\n }\r\n }\r\n removePoints(insertionIndex) {\r\n /* console.log(\"remove\"); */\r\n const pointSet = this.pointSets.get(insertionIndex);\r\n if (pointSet.used) {\r\n pointSet.used = false;\r\n }\r\n\r\n this.pointSets.delete(insertionIndex);\r\n\r\n // Determine newLength based on remaining points\r\n let newLength = 0;\r\n for (const [key, aPointSet] of this.pointSets.entries()) {\r\n if (key + aPointSet.length > newLength) {\r\n newLength = key + aPointSet.length;\r\n }\r\n }\r\n\r\n }\r\n showPoints(insertionIndex) {\r\n /* console.log(\"show\"); */\r\n const pointSet = this.pointSets.get(insertionIndex);\r\n if (!pointSet.used) {\r\n pointSet.used = true;\r\n }\r\n\r\n }\r\n\r\n resizeArrays(newLength) {\r\n\r\n if (isNaN(newLength)) {\r\n console.log(\"hit max splats\")\r\n }\r\n //console.log(newLength)\r\n if (newLength > this.points.length) {\r\n newLength = Math.max(this.points.length * 2, newLength);\r\n // Resize points array\r\n const newPoints = new Float32Array(newLength);\r\n newPoints.set(this.points, 0);\r\n this.points = newPoints;\r\n\r\n // Resize distances array\r\n const newNumPoints = Math.floor(newLength / 3);\r\n const newDistances = new Uint32Array(newNumPoints);\r\n newDistances.set(this.distances, 0);\r\n this.distances = newDistances;\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n addBatchesOffsetStrideCount(positions, insertionIndexes, offset, stride, batchSize) {\r\n\r\n const newLength = Math.max(this.points.length, insertionIndexes[insertionIndexes.length - 1] + batchSize * 3);\r\n\r\n this.resizeArrays(newLength);\r\n for (let batchIndex = 0; batchIndex < insertionIndexes.length; batchIndex++) {\r\n\r\n const insertionIndex = insertionIndexes[batchIndex];\r\n const start = Math.floor(insertionIndex / 3);\r\n const batchPositionStartIndex = batchIndex * batchSize * stride;\r\n const batchNumPoints = Math.min((positions.length - batchPositionStartIndex) / stride, batchSize);\r\n\r\n\r\n for (let i = 0; i < batchNumPoints; i++) {\r\n\r\n this.points[insertionIndex + i * 3] = positions[i * stride + offset + batchPositionStartIndex]\r\n this.points[insertionIndex + i * 3 + 1] = positions[i * stride + offset + batchPositionStartIndex + 1]\r\n this.points[insertionIndex + i * 3 + 2] = positions[i * stride + offset + batchPositionStartIndex + 2]\r\n\r\n }\r\n this.pointSets.set(insertionIndex, { length: batchNumPoints * 3, used: false });\r\n\r\n\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n\r\n\r\n computeDistances(x, y, z) {\r\n\r\n this.distances.fill(0);\r\n const keys = Array.from(this.pointSets.keys());\r\n const numKeys = keys.length;\r\n this.numUsed = 0;\r\n for (let i = 0; i < numKeys; i++) {\r\n const key = keys[i];\r\n const pointSet = this.pointSets.get(key);\r\n if (!pointSet.used) continue;\r\n const length = Math.floor(pointSet.length / 3);\r\n this.numUsed += length\r\n }\r\n //console.log(\"num used : \"+this.numUsed);\r\n this.indexes = new Uint32Array(this.numUsed);\r\n this.distances = new Uint32Array(this.numUsed);\r\n let c = 0;\r\n for (let i = 0; i < numKeys; i++) {\r\n const key = keys[i];\r\n const keyBase = Math.floor(key / 3);\r\n const pointSet = this.pointSets.get(key);\r\n if (!pointSet.used) continue;\r\n const length = Math.floor(pointSet.length / 3);\r\n //this.numUsed += length\r\n for (let j = 0; j < length; j++) {\r\n const idx = key + (j * 3);\r\n const dx = x - this.points[idx];\r\n const dy = y - this.points[idx + 1];\r\n const dz = z - this.points[idx + 2];\r\n const d = dx*dx + dy*dy + dz*dz;\r\n floatView[0] = d;\r\n this.distances[c] = uintView[0];\r\n this.indexes[c++] = keyBase + j;\r\n }\r\n }\r\n \r\n }\r\n\r\n sort(xyz, id) {\r\n // Always store the latest sort request\r\n\r\n this.pendingSort = xyz;\r\n this.pendingID = id;\r\n //console.log(`Received sort request with ID: ${id}`);\r\n\r\n // If no sort is currently ongoing, start processing\r\n if (!this.sortOngoing) {\r\n this.sortOngoing = true;\r\n this.processSortQueue();\r\n }\r\n }\r\n\r\n // Asynchronous loop to process sort requests sequentially\r\n async processSortQueue() {\r\n if(!this.initialized){\r\n await init();\r\n this.initialized = true;\r\n }\r\n while (this.pendingSort) {\r\n const currentSort = this.pendingSort;\r\n const currentID = this.pendingID;\r\n\r\n // Clear the pending sort to capture any new requests during processing\r\n this.pendingSort = null;\r\n this.pendingID = null;\r\n\r\n //console.log(`Starting sort with ID: ${currentID}`);\r\n\r\n const start = performance.now();\r\n\r\n // Perform the synchronous sort operations\r\n this.computeDistances(currentSort[0], currentSort[1], currentSort[2]);\r\n //console.log((performance.now() - start)+' ms');\r\n \r\n //console.log(this.indexes.length)\r\n \r\n this.indexes = radix_sort_indices(this.indexes, this.distances);\r\n /* radixSort(this.indexes, {\r\n get: (el) => this.distances[el],\r\n reversed: true\r\n }); */\r\n \r\n const duration = performance.now() - start;\r\n //console.log(`Sort with ID: ${currentID} completed in ${duration.toFixed(2)}ms`);\r\n\r\n // Callback after sorting is done\r\n this.sortCallback(this.indexes, this.numUsed, currentID);\r\n\r\n // Yield control to the event loop to handle new incoming sort requests\r\n await new Promise(resolve => setTimeout(resolve, 0));\r\n }\r\n\r\n // No more pending sorts\r\n this.sortOngoing = false;\r\n //console.log(\"No more pending sorts. SortWorker is idle.\");\r\n }\r\n} export { PointsManager }","import { PointsManager } from \"./PointsManager\";\r\n\r\nconst sortCallback = ((array, numUsed, id)=>{\r\n const copy = new Uint32Array(array)\r\n postMessage({\r\n order: copy.buffer,\r\n count: numUsed,\r\n id: id\r\n }, [copy.buffer]);\r\n})\r\nlet pointsManager;\r\nself.onmessage = function (e) {\r\n\r\n try {\r\n\r\n switch (e.data.method) {\r\n \r\n case \"addBatches\":\r\n if (!pointsManager) {\r\n pointsManager = new PointsManager(sortCallback);\r\n }\r\n pointsManager.addBatchesOffsetStrideCount(new Float32Array(e.data.positions), e.data.insertionIndexes, e.data.offset, e.data.stride, e.data.batchSize);\r\n break\r\n case \"hide\":\r\n\r\n if (!!pointsManager) {\r\n pointsManager.hidePoints(e.data.insertionIndex);\r\n }\r\n\r\n break\r\n case \"hideBatches\":\r\n\r\n if (!!pointsManager) {\r\n e.data.insertionIndexes.forEach(insertionIndex => {\r\n pointsManager.hidePoints(insertionIndex);\r\n });\r\n pointsManager.sort(e.data.xyz, e.data.id)\r\n }\r\n\r\n break\r\n case \"show\":\r\n\r\n if (!!pointsManager) {\r\n pointsManager.showPoints(e.data.insertionIndex);\r\n pointsManager.sort(e.data.xyz, e.data.id)\r\n }\r\n\r\n break;\r\n case \"showBatches\":\r\n\r\n if (!!pointsManager) {\r\n e.data.insertionIndexes.forEach(insertionIndex => {\r\n pointsManager.showPoints(insertionIndex);\r\n });\r\n pointsManager.sort(e.data.xyz, e.data.id)\r\n }\r\n\r\n break\r\n case \"remove\":\r\n if (!!pointsManager) {\r\n pointsManager.removePoints(e.data.insertionIndex);\r\n pointsManager.sort(e.data.xyz, e.data.id)\r\n }\r\n\r\n break\r\n case \"removeBatches\":\r\n\r\n if (!!pointsManager) {\r\n e.data.insertionIndexes.forEach(insertionIndex => {\r\n pointsManager.removePoints(insertionIndex);\r\n });\r\n pointsManager.sort(e.data.xyz, e.data.id)\r\n }\r\n\r\n break\r\n case \"sort\":\r\n if (!!pointsManager) {\r\n pointsManager.sort(e.data.xyz, e.data.id)\r\n }\r\n break\r\n default:\r\n throw new Error(`No method with name ${e.data.method}`)\r\n }\r\n } catch (error) {\r\n postMessage({ error: error.message })\r\n }\r\n}"],"names":["wasm","cachedUint32ArrayMemory0","getUint32ArrayMemory0","WASM_VECTOR_LEN","passArray32ToWasm0","arg","malloc","ptr","getArrayU32FromWasm0","len","radix_sort_indices","indices","distances","ptr0","len0","ptr1","len1","ret","v3","__wbg_load","module","imports","e","bytes","instance","__wbg_get_imports","table","offset","__wbg_finalize_init","__wbg_init","module_or_path","buffer","floatView","uintView","PointsManager","sortCallback","insertionIndex","pointSet","newLength","key","aPointSet","newPoints","newNumPoints","newDistances","positions","insertionIndexes","stride","batchSize","batchIndex","batchPositionStartIndex","batchNumPoints","i","x","y","z","keys","numKeys","length","c","keyBase","j","idx","dx","dy","dz","d","xyz","id","init","currentSort","currentID","start","resolve","array","numUsed","copy","pointsManager","error"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export class SplatsDecoder {
2
+ constructor(gltfLoader: any, renderer: any);
3
+ renderer: any;
4
+ gltfLoader: any;
5
+ parseSplats(arrayBuffer: any, sceneZupToYUp: any, meshZUpToYUp: any, splatsMesh: any): Promise<any>;
6
+ checkLoaderInitialized: () => Promise<any>;
7
+ }
@@ -0,0 +1,16 @@
1
+ export class OBB {
2
+ constructor(values: any);
3
+ center: Vector3;
4
+ halfWidth: number;
5
+ halfHeight: number;
6
+ halfDepth: number;
7
+ aabb: Box3;
8
+ sphere: Sphere;
9
+ matrixToOBBCoordinateSystem: Matrix3;
10
+ inFrustum(frustum: any): any;
11
+ distanceToPoint(point: any): number;
12
+ }
13
+ import { Vector3 } from "three";
14
+ import { Box3 } from "three";
15
+ import { Sphere } from "three";
16
+ import { Matrix3 } from "three";
@@ -1,16 +1,19 @@
1
1
  export class OBB {
2
2
  constructor(values: any);
3
3
  center: Vector3;
4
- halfWidth: number;
5
- halfHeight: number;
6
- halfDepth: number;
7
- aabb: Box3;
8
- sphere: Sphere;
9
- matrixToOBBCoordinateSystem: Matrix3;
10
- inFrustum(frustum: any): any;
4
+ e1: Vector3;
5
+ e2: Vector3;
6
+ e3: Vector3;
7
+ halfSize: Vector3;
8
+ rotationMatrix: Matrix3;
9
+ copy(aObb: any): void;
10
+ getSize(result: any): any;
11
+ applyMatrix4(matrix: any): this;
12
+ intersectRay(ray: any, result: any): any;
13
+ intersectsRay(ray: any): boolean;
14
+ insidePlane(plane: any): boolean[];
15
+ inFrustum(frustum: any): boolean;
11
16
  distanceToPoint(point: any): number;
12
17
  }
13
18
  import { Vector3 } from "three";
14
- import { Box3 } from "three";
15
- import { Sphere } from "three";
16
19
  import { Matrix3 } from "three";
@@ -0,0 +1,22 @@
1
+ export class PointsManager {
2
+ constructor(sortCallback: any);
3
+ points: Float32Array;
4
+ distances: Uint32Array;
5
+ pointSets: Map<any, any>;
6
+ numUsed: number;
7
+ sortOngoing: boolean;
8
+ sortCallback: any;
9
+ sortPromise: Promise<void>;
10
+ hidePoints(insertionIndex: any): void;
11
+ removePoints(insertionIndex: any): void;
12
+ showPoints(insertionIndex: any): void;
13
+ resizeArrays(newLength: any): void;
14
+ addBatchesOffsetStrideCount(positions: any, insertionIndexes: any, offset: any, stride: any, batchSize: any): void;
15
+ computeDistances(x: any, y: any, z: any): void;
16
+ indexes: any;
17
+ sort(xyz: any, id: any): void;
18
+ pendingSort: any;
19
+ pendingID: any;
20
+ processSortQueue(): Promise<void>;
21
+ initialized: boolean | undefined;
22
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Octree class for splats raycast.
3
+ */
4
+ export class SplatsCollider {
5
+ /**
6
+ * @param {Box3} bounds - The bounding box of the octree node.
7
+ * @param {number} maxPoints - Maximum number of points per node before subdivision.
8
+ * @param {number} [threshold] - Optional threshold. If not provided, it defaults to bounds diagonal / 100000.
9
+ */
10
+ constructor(bounds: Box3, maxPoints: number, threshold?: number | undefined);
11
+ bounds: Box3;
12
+ maxPointsPerNode: number;
13
+ points: any[];
14
+ children: any[] | null;
15
+ threshold: number;
16
+ /**
17
+ * Inserts a splat object into the Octree.
18
+ * @param {Object} splat - The splat object with a Vector3 'center' property.
19
+ */
20
+ insert(splat: Object): void;
21
+ /**
22
+ * Queries the Octree with a Ray to find all splats within a threshold.
23
+ * Returns the splats ordered front to back relative to the ray origin.
24
+ * @param {Ray} ray - The three.js Ray object.
25
+ * @param {number} [threshold=this.threshold] - The maximum allowed distance from the ray.
26
+ * @returns {Array<{ t: number, splat: Object }>} - Array of splats within the threshold, sorted by t ascending.
27
+ */
28
+ query(ray: Ray, queryResults: any, threshold?: number | undefined): Array<{
29
+ t: number;
30
+ splat: Object;
31
+ }>;
32
+ /**
33
+ * Recursively queries the Octree to find all splats within a threshold.
34
+ * @private
35
+ * @param {Ray} ray - The three.js Ray object.
36
+ * @param {number} threshold - The maximum allowed distance from the ray.
37
+ */
38
+ private queryRecursive;
39
+ /**
40
+ * Determines which child Octree node the point belongs to.
41
+ * @private
42
+ * @param {Vector3} point - The point to determine the child index for.
43
+ * @returns {number} - The index of the child node (0-7).
44
+ */
45
+ private getChildIndex;
46
+ /**
47
+ * Subdivides the current Octree node into eight children.
48
+ * @private
49
+ */
50
+ private subdivide;
51
+ }
52
+ import { Box3 } from 'three';
53
+ import { Ray } from 'three';
@@ -0,0 +1,57 @@
1
+ export class SplatsMesh extends Mesh<import("three").BufferGeometry<import("three").NormalBufferAttributes>, import("three").Material | import("three").Material[], import("three").Object3DEventMap> {
2
+ constructor(renderer: any);
3
+ orderAttribute: InstancedBufferAttribute;
4
+ textureSize: number;
5
+ numTextures: number;
6
+ batchSize: number;
7
+ maxSplats: number;
8
+ colorRenderTarget: WebGL3DRenderTarget;
9
+ positionRenderTarget: WebGL3DRenderTarget;
10
+ cov1RenderTarget: WebGL3DRenderTarget;
11
+ cov2RenderTarget: WebGL3DRenderTarget;
12
+ renderer: any;
13
+ sortID: number;
14
+ freeAddresses: MinPriorityQueue<any, any>;
15
+ worker: Worker;
16
+ sortListeners: any[];
17
+ cameraPosition: Vector3;
18
+ copyMaterial2D: ShaderMaterial;
19
+ copyMaterial3D: ShaderMaterial;
20
+ copyCamera: OrthographicCamera;
21
+ copyScene: Scene;
22
+ copyQuad: Mesh<PlaneGeometry, ShaderMaterial, import("three").Object3DEventMap>;
23
+ dispose(): void;
24
+ copyTex2D(src: any, dst: any, scissorBox: any, layer: any): void;
25
+ copyTex3D(src: any, dst: any, numLayers: any): void;
26
+ /**
27
+ * Specify a size multiplier for splats
28
+ * @param {number} sizeMultiplier
29
+ */
30
+ setSplatsSizeMultiplier(sizeMultiplier: number): void;
31
+ /**
32
+ * specify a crop radius for splats
33
+ * @param {number} cropRadius
34
+ */
35
+ setSplatsCropRadius(cropRadius: number): void;
36
+ sort(cameraPosition: any): void;
37
+ raycast(raycaster: any, intersects: any): void;
38
+ addSplatsTile(positions: any, colors: any, cov1: any, cov2: any): {
39
+ hide: () => void;
40
+ show: (callback: any) => void;
41
+ remove: () => void;
42
+ sort: (cameraPosition: any) => void;
43
+ raycast: () => void;
44
+ isSplatsBatch: boolean;
45
+ };
46
+ addSplatsBatch(positionsStartIndex: any, address: any, positions: any, colors: any, cov1: any, cov2: any): void;
47
+ growTextures(): void;
48
+ }
49
+ import { Mesh } from "three";
50
+ import { InstancedBufferAttribute } from "three";
51
+ import { WebGL3DRenderTarget } from "three";
52
+ import { MinPriorityQueue } from 'data-structure-typed';
53
+ import { Vector3 } from "three";
54
+ import { ShaderMaterial } from "three";
55
+ import { OrthographicCamera } from "three";
56
+ import { Scene } from "three";
57
+ import { PlaneGeometry } from "three";
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Radix Sort implementation for sorting indices based on distances.
3
+ * Both `indices` and `distances` should have the same length.
4
+ * Returns a new vector of sorted indices in descending order based on distances.
5
+ * @param {Uint32Array} indices
6
+ * @param {Uint32Array} distances
7
+ * @returns {Uint32Array}
8
+ */
9
+ export function radix_sort_indices(indices: Uint32Array, distances: Uint32Array): Uint32Array;
10
+ export default __wbg_init;
11
+ export function initSync(module: any): any;
12
+ declare function __wbg_init(module_or_path: any): Promise<any>;