@jdultra/threedtiles 12.0.1 → 13.0.1
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 +5 -1
- package/dist/assets/PointsManager.worker-5fpGpVvf.js +178 -0
- package/dist/assets/PointsManager.worker-5fpGpVvf.js.map +1 -0
- package/dist/decoder/SplatsDecoder.d.ts +7 -0
- package/dist/geometry/obb copy.d.ts +16 -0
- package/dist/geometry/obb.d.ts +12 -9
- package/dist/splats/PointsManager.d.ts +22 -0
- package/dist/splats/PointsManager.worker.d.ts +1 -0
- package/dist/splats/SplatsColider.d.ts +53 -0
- package/dist/splats/SplatsMesh.d.ts +57 -0
- package/dist/splats/radix/wasm_sorter.d.ts +12 -0
- package/dist/threedtiles.cjs.js +196 -6
- package/dist/threedtiles.cjs.js.map +1 -1
- package/dist/threedtiles.es.js +3907 -2401
- package/dist/threedtiles.es.js.map +1 -1
- package/dist/threedtiles.umd.js +196 -6
- package/dist/threedtiles.umd.js.map +1 -1
- package/dist/tileset/OGC3DTile.d.ts +42 -27
- package/dist/tileset/TileLoader.d.ts +6 -3
- package/package.json +19 -4
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-
|
|
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,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";
|
package/dist/geometry/obb.d.ts
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
export class OBB {
|
|
2
2
|
constructor(values: any);
|
|
3
3
|
center: Vector3;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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>;
|