s3m-three 0.4.17 → 0.4.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/assets/s3mWorker-4iTAmWIu.js +1 -0
- package/dist/browser/s3m-three.iife.ext-three.js +406 -91
- package/dist/browser/s3m-three.iife.js +434 -119
- package/dist/core/AttributeQuery.d.ts +13 -0
- package/dist/core/AttributeQuery.d.ts.map +1 -1
- package/dist/core/AttributeQuery.js +20 -3
- package/dist/core/AttributeQuery.js.map +1 -1
- package/dist/core/AuthFetch.d.ts +52 -0
- package/dist/core/AuthFetch.d.ts.map +1 -0
- package/dist/core/AuthFetch.js +44 -0
- package/dist/core/AuthFetch.js.map +1 -0
- package/dist/core/GaussianSplat.d.ts +64 -0
- package/dist/core/GaussianSplat.d.ts.map +1 -0
- package/dist/core/GaussianSplat.js +139 -0
- package/dist/core/GaussianSplat.js.map +1 -0
- package/dist/core/S3M1Parser.d.ts +1 -1
- package/dist/core/S3M1Parser.d.ts.map +1 -1
- package/dist/core/S3M1Parser.js +320 -25
- package/dist/core/S3M1Parser.js.map +1 -1
- package/dist/core/S3MBParser.d.ts.map +1 -1
- package/dist/core/S3MBParser.js +13 -0
- package/dist/core/S3MBParser.js.map +1 -1
- package/dist/core/S3MBlockParser.d.ts.map +1 -1
- package/dist/core/S3MBlockParser.js +56 -14
- package/dist/core/S3MBlockParser.js.map +1 -1
- package/dist/core/SplatLod.d.ts +36 -0
- package/dist/core/SplatLod.d.ts.map +1 -0
- package/dist/core/SplatLod.js +54 -0
- package/dist/core/SplatLod.js.map +1 -0
- package/dist/core/SplatProjection.d.ts +75 -0
- package/dist/core/SplatProjection.d.ts.map +1 -0
- package/dist/core/SplatProjection.js +162 -0
- package/dist/core/SplatProjection.js.map +1 -0
- package/dist/core/SplatSort.d.ts +13 -0
- package/dist/core/SplatSort.d.ts.map +1 -0
- package/dist/core/SplatSort.js +14 -0
- package/dist/core/SplatSort.js.map +1 -0
- package/dist/core/TexCoordZ.d.ts +94 -0
- package/dist/core/TexCoordZ.d.ts.map +1 -0
- package/dist/core/TexCoordZ.js +125 -0
- package/dist/core/TexCoordZ.js.map +1 -0
- package/dist/core/TextureDecode.d.ts +19 -0
- package/dist/core/TextureDecode.d.ts.map +1 -1
- package/dist/core/TextureDecode.js +53 -11
- package/dist/core/TextureDecode.js.map +1 -1
- package/dist/core/TileGeometry.d.ts +29 -0
- package/dist/core/TileGeometry.d.ts.map +1 -1
- package/dist/core/TileGeometry.js +130 -14
- package/dist/core/TileGeometry.js.map +1 -1
- package/dist/core/degradations.d.ts +37 -0
- package/dist/core/degradations.d.ts.map +1 -0
- package/dist/core/degradations.js +32 -0
- package/dist/core/degradations.js.map +1 -0
- package/dist/core/types.d.ts +36 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/render/DatasetManager.d.ts +18 -1
- package/dist/render/DatasetManager.d.ts.map +1 -1
- package/dist/render/DatasetManager.js +4 -1
- package/dist/render/DatasetManager.js.map +1 -1
- package/dist/render/FeatureStyleManager.d.ts.map +1 -1
- package/dist/render/FeatureStyleManager.js +7 -5
- package/dist/render/FeatureStyleManager.js.map +1 -1
- package/dist/render/GeometryBuilder.d.ts +24 -0
- package/dist/render/GeometryBuilder.d.ts.map +1 -1
- package/dist/render/GeometryBuilder.js +196 -5
- package/dist/render/GeometryBuilder.js.map +1 -1
- package/dist/render/HostRenderer.d.ts +105 -0
- package/dist/render/HostRenderer.d.ts.map +1 -0
- package/dist/render/HostRenderer.js +170 -0
- package/dist/render/HostRenderer.js.map +1 -0
- package/dist/render/Picker.d.ts.map +1 -1
- package/dist/render/Picker.js +19 -5
- package/dist/render/Picker.js.map +1 -1
- package/dist/render/S3MViewer.d.ts +79 -0
- package/dist/render/S3MViewer.d.ts.map +1 -1
- package/dist/render/S3MViewer.js +235 -16
- package/dist/render/S3MViewer.js.map +1 -1
- package/dist/render/SplatMaterial.d.ts +103 -0
- package/dist/render/SplatMaterial.d.ts.map +1 -0
- package/dist/render/SplatMaterial.js +388 -0
- package/dist/render/SplatMaterial.js.map +1 -0
- package/dist/render/SplatSorter.d.ts +14 -0
- package/dist/render/SplatSorter.d.ts.map +1 -0
- package/dist/render/SplatSorter.js +59 -0
- package/dist/render/SplatSorter.js.map +1 -0
- package/dist/render/StyleMaterial.d.ts +48 -0
- package/dist/render/StyleMaterial.d.ts.map +1 -1
- package/dist/render/StyleMaterial.js +292 -69
- package/dist/render/StyleMaterial.js.map +1 -1
- package/dist/render/TextureFactory.d.ts +10 -0
- package/dist/render/TextureFactory.d.ts.map +1 -1
- package/dist/render/TextureFactory.js +35 -5
- package/dist/render/TextureFactory.js.map +1 -1
- package/dist/render/lightingPreset.d.ts +53 -0
- package/dist/render/lightingPreset.d.ts.map +1 -0
- package/dist/render/lightingPreset.js +36 -0
- package/dist/render/lightingPreset.js.map +1 -0
- package/dist/render/materialAlpha.d.ts +51 -0
- package/dist/render/materialAlpha.d.ts.map +1 -0
- package/dist/render/materialAlpha.js +68 -0
- package/dist/render/materialAlpha.js.map +1 -0
- package/dist/tileset/S3MTileset.d.ts +50 -0
- package/dist/tileset/S3MTileset.d.ts.map +1 -1
- package/dist/tileset/S3MTileset.js +60 -5
- package/dist/tileset/S3MTileset.js.map +1 -1
- package/dist/vendor/browser-node-stub.js +10 -0
- package/dist/worker/s3mWorker.js +1166 -979
- package/dist/worker/s3mWorker.js.map +1 -1
- package/docs/API.md +55 -1
- package/docs/FORMAT-NOTES.md +338 -0
- package/package.json +1 -1
- package/src/core/AttributeQuery.ts +26 -3
- package/src/core/AuthFetch.ts +82 -0
- package/src/core/GaussianSplat.ts +175 -0
- package/src/core/S3M1Parser.ts +330 -24
- package/src/core/S3MBParser.ts +18 -0
- package/src/core/S3MBlockParser.ts +56 -11
- package/src/core/SplatLod.ts +83 -0
- package/src/core/SplatProjection.ts +231 -0
- package/src/core/SplatSort.ts +30 -0
- package/src/core/TexCoordZ.ts +160 -0
- package/src/core/TextureDecode.ts +63 -11
- package/src/core/TileGeometry.ts +138 -14
- package/src/core/degradations.ts +74 -0
- package/src/core/types.ts +32 -0
- package/src/index.ts +12 -1
- package/src/render/DatasetManager.ts +19 -1
- package/src/render/FeatureStyleManager.ts +7 -5
- package/src/render/GeometryBuilder.ts +239 -6
- package/src/render/HostRenderer.ts +222 -0
- package/src/render/Picker.ts +21 -5
- package/src/render/S3MViewer.ts +277 -15
- package/src/render/SplatMaterial.ts +433 -0
- package/src/render/SplatSorter.ts +59 -0
- package/src/render/StyleMaterial.ts +339 -69
- package/src/render/TextureFactory.ts +39 -5
- package/src/render/lightingPreset.ts +76 -0
- package/src/render/materialAlpha.ts +75 -0
- package/src/tileset/S3MTileset.ts +91 -5
- package/src/vendor/browser-node-stub.js +10 -0
- package/dist/browser/assets/s3mWorker-BjPOUgjg.js +0 -1
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
* 所以默认策略:`.fastjson` + 一次性把**全部字段**取回来(字段名很便宜,model 才是大头),
|
|
23
23
|
* 这样换专题字段时全部命中缓存,不再发请求。
|
|
24
24
|
*/
|
|
25
|
+
import { type AuthenticateFn } from './AuthFetch.js';
|
|
25
26
|
export interface AttributeQueryOptions {
|
|
26
27
|
/** 数据服务根地址,形如 https://host/iserver/services/data-xxx/rest/data */
|
|
27
28
|
dataServiceUrl: string;
|
|
@@ -38,6 +39,11 @@ export interface AttributeQueryOptions {
|
|
|
38
39
|
format?: 'auto' | 'fastjson' | 'json';
|
|
39
40
|
/** 便于测试时替换,默认用全局 fetch */
|
|
40
41
|
fetchImpl?: typeof fetch;
|
|
42
|
+
/**
|
|
43
|
+
* 鉴权适配函数(不填则用图层级的 `authenticate`)。请求发出前过一遍,
|
|
44
|
+
* 可改写 URL(加 `?token=`)或附加请求头。见 `AuthenticateFn`。
|
|
45
|
+
*/
|
|
46
|
+
authenticate?: AuthenticateFn;
|
|
41
47
|
}
|
|
42
48
|
export interface AttributeField {
|
|
43
49
|
name: string;
|
|
@@ -60,6 +66,7 @@ export declare class AttributeQuery {
|
|
|
60
66
|
private readonly _chunkSize;
|
|
61
67
|
private readonly _formatOption;
|
|
62
68
|
private readonly _fetch;
|
|
69
|
+
private readonly _authenticate;
|
|
63
70
|
private readonly _cache;
|
|
64
71
|
private _schema;
|
|
65
72
|
private _resolvedFields;
|
|
@@ -68,6 +75,12 @@ export declare class AttributeQuery {
|
|
|
68
75
|
constructor(options: AttributeQueryOptions);
|
|
69
76
|
/** 数据集的 REST 路径:.../datasources/name/{ds}/datasets/name/{name} */
|
|
70
77
|
get datasetPath(): string;
|
|
78
|
+
/**
|
|
79
|
+
* 带鉴权的请求:先过 `authenticate` 钩子改写 URL / 追加 header,再走本查询的
|
|
80
|
+
* 传输层(`fetchImpl` 或全局 fetch,自定义传输不被绕过)。未配置鉴权时与旧版
|
|
81
|
+
* 行为逐字一致(参数原样透传)。
|
|
82
|
+
*/
|
|
83
|
+
private _request;
|
|
71
84
|
/** 累计的请求代价(不清零,用来观察整体开销) */
|
|
72
85
|
get stats(): AttributeQueryStats;
|
|
73
86
|
/** 字段表(顺手也用来判断「这个数据集到底有没有属性表」) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeQuery.d.ts","sourceRoot":"","sources":["../../src/core/AttributeQuery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"AttributeQuery.d.ts","sourceRoot":"","sources":["../../src/core/AttributeQuery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAOzE,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,cAAc,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;mDAC+C;IAC/C,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IACtC,0BAA0B;IAC1B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;OAGG;IACH,YAAY,CAAC,EAAE,cAAc,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAE3D,sCAAsC;AACtC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ;AAwBD,qBAAa,cAAc;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,MAAM,CAAyD;gBAE3D,OAAO,EAAE,qBAAqB;IAiB1C,kEAAkE;IAClE,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;;;OAIG;YACW,QAAQ;IAStB,4BAA4B;IAC5B,IAAI,KAAK,IAAI,mBAAmB,CAE/B;IAED,kCAAkC;IAC5B,UAAU,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAU7C,uBAAuB;IACvB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIhC,UAAU,IAAI,IAAI;IAKlB;;;OAGG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAuBzD,cAAc;IAY5B;;;;;;;OAOG;YACW,cAAc;YAgBd,WAAW;YAsCX,KAAK;IAenB,OAAO,CAAC,MAAM;CAGf"}
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
* 所以默认策略:`.fastjson` + 一次性把**全部字段**取回来(字段名很便宜,model 才是大头),
|
|
23
23
|
* 这样换专题字段时全部命中缓存,不再发请求。
|
|
24
24
|
*/
|
|
25
|
+
import { resolveAuthRequest } from './AuthFetch.js';
|
|
25
26
|
const DEFAULT_ID_FIELD = 'SmID';
|
|
26
27
|
const DEFAULT_CHUNK_SIZE = 200;
|
|
27
28
|
/** 几何/索引字段取回来没用,还特别占带宽 */
|
|
@@ -46,6 +47,7 @@ export class AttributeQuery {
|
|
|
46
47
|
_chunkSize;
|
|
47
48
|
_formatOption;
|
|
48
49
|
_fetch;
|
|
50
|
+
_authenticate;
|
|
49
51
|
_cache = new Map();
|
|
50
52
|
_schema = null;
|
|
51
53
|
_resolvedFields = null;
|
|
@@ -66,11 +68,26 @@ export class AttributeQuery {
|
|
|
66
68
|
this._chunkSize = Math.max(1, options.chunkSize ?? DEFAULT_CHUNK_SIZE);
|
|
67
69
|
this._formatOption = options.format ?? 'auto';
|
|
68
70
|
this._fetch = options.fetchImpl ?? globalThis.fetch.bind(globalThis);
|
|
71
|
+
this._authenticate = options.authenticate;
|
|
69
72
|
}
|
|
70
73
|
/** 数据集的 REST 路径:.../datasources/name/{ds}/datasets/name/{name} */
|
|
71
74
|
get datasetPath() {
|
|
72
75
|
return `${this.dataServiceUrl}/datasources/name/${encodeURIComponent(this.datasourceName)}/datasets/name/${encodeURIComponent(this.datasetName)}`;
|
|
73
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* 带鉴权的请求:先过 `authenticate` 钩子改写 URL / 追加 header,再走本查询的
|
|
79
|
+
* 传输层(`fetchImpl` 或全局 fetch,自定义传输不被绕过)。未配置鉴权时与旧版
|
|
80
|
+
* 行为逐字一致(参数原样透传)。
|
|
81
|
+
*/
|
|
82
|
+
async _request(url, init) {
|
|
83
|
+
const resolved = await resolveAuthRequest(url, this._authenticate, 'attributes');
|
|
84
|
+
const hookHeaders = resolved.headers && Object.keys(resolved.headers).length > 0 ? resolved.headers : null;
|
|
85
|
+
if (!hookHeaders)
|
|
86
|
+
return init === undefined ? this._fetch(resolved.url) : this._fetch(resolved.url, init);
|
|
87
|
+
// 钩子头在前,init 头在后:调用方显式给的头(如 Content-Type)不被覆盖
|
|
88
|
+
const headers = { ...hookHeaders, ...init?.headers };
|
|
89
|
+
return this._fetch(resolved.url, { ...init, headers });
|
|
90
|
+
}
|
|
74
91
|
/** 累计的请求代价(不清零,用来观察整体开销) */
|
|
75
92
|
get stats() {
|
|
76
93
|
return { ...this._stats };
|
|
@@ -79,7 +96,7 @@ export class AttributeQuery {
|
|
|
79
96
|
async loadSchema() {
|
|
80
97
|
if (this._schema)
|
|
81
98
|
return this._schema;
|
|
82
|
-
const res = await this.
|
|
99
|
+
const res = await this._request(`${this.datasetPath}/fields.json`);
|
|
83
100
|
this._stats.requests++;
|
|
84
101
|
if (!res.ok)
|
|
85
102
|
throw new Error(`[s3m] 读取字段表失败 ${res.status}:${this.datasetPath}/fields.json`);
|
|
@@ -147,7 +164,7 @@ export class AttributeQuery {
|
|
|
147
164
|
if (this._formatOption !== 'auto')
|
|
148
165
|
return (this._format = this._formatOption);
|
|
149
166
|
try {
|
|
150
|
-
const res = await this.
|
|
167
|
+
const res = await this._request(`${this.datasetPath}/features.json?fromIndex=0&toIndex=1`);
|
|
151
168
|
this._stats.requests++;
|
|
152
169
|
const json = (await res.json());
|
|
153
170
|
const isModel = String(json.geometryType ?? '').toUpperCase().includes('MODEL');
|
|
@@ -201,7 +218,7 @@ export class AttributeQuery {
|
|
|
201
218
|
}
|
|
202
219
|
async _post(body, format) {
|
|
203
220
|
const t0 = performance.now();
|
|
204
|
-
const res = await this.
|
|
221
|
+
const res = await this._request(`${this.dataServiceUrl}/featureResults.${format}?returnContent=true`, {
|
|
205
222
|
method: 'POST',
|
|
206
223
|
headers: { 'Content-Type': 'application/json' },
|
|
207
224
|
body: JSON.stringify(body),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeQuery.js","sourceRoot":"","sources":["../../src/core/AttributeQuery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,0BAA0B;AAC1B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"AttributeQuery.js","sourceRoot":"","sources":["../../src/core/AttributeQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 鉴权适配(Authenticate Hook)
|
|
3
|
+
*
|
|
4
|
+
* S3M 服务经常挂在带鉴权的网关后面:有的要求 URL 带 `?token=...`,有的要求
|
|
5
|
+
* 请求头带 `Authorization` / `X-Token`,还有的 token 会过期需要定期换。内核在
|
|
6
|
+
* 主线程发出的全部请求(数据集配置 scp、瓦片 .s3mb/.s3mblock、子图集 .texblock、
|
|
7
|
+
* 棱线缓存、iServer 属性查询)都从这一个钩子过一遍,由使用方统一改写。
|
|
8
|
+
*
|
|
9
|
+
* 设计约束(对应 AGENTS.md 不变式①):不传 `authenticate` 时,请求路径与旧版
|
|
10
|
+
* 逐字一致——`authFetch` 直接短路到裸 `fetch(url)` / `fetch(url, init)`,连 init
|
|
11
|
+
* 对象都不新建。
|
|
12
|
+
*
|
|
13
|
+
* 注意:鉴权只作用于**发到网络上的请求**,不参与内核的缓存键(瓦片 URL 带 `#N`
|
|
14
|
+
* 片段与 nodes/pending 等内部 Map 的键都是改写前的原 URL),token 轮换不会导致
|
|
15
|
+
* 重复加载同一块瓦片。重试时每次重新过钩子,token 刷新后重试天然带上新值。
|
|
16
|
+
*/
|
|
17
|
+
/** 请求类别,钩子按类别区分处理(比如属性查询走另一个网关) */
|
|
18
|
+
export type AuthRequestKind = 'config' | 'tile' | 'texblock' | 'creases' | 'attributes';
|
|
19
|
+
/** 改写后的请求:实际请求的 URL + 需要附加的请求头 */
|
|
20
|
+
export interface AuthResolvedRequest {
|
|
21
|
+
/** 实际发到网络上的 URL(可追加 `?token=...` 等鉴权参数) */
|
|
22
|
+
url: string;
|
|
23
|
+
/** 需要附加的请求头(如 `Authorization` / `X-Token`) */
|
|
24
|
+
headers?: Record<string, string>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 鉴权适配函数。每个请求发出前调用一次:
|
|
28
|
+
*
|
|
29
|
+
* - 返回 `string`:只改写 URL(最简形式,如追加 `?token=`);
|
|
30
|
+
* - 返回 `{ url, headers }`:改写 URL 并附加请求头;
|
|
31
|
+
* - 返回 `Promise`:支持异步(如先向认证服务换 token)。
|
|
32
|
+
*
|
|
33
|
+
* ```js
|
|
34
|
+
* new S3MLayer({
|
|
35
|
+
* configUrl: 'https://gw.example.com/data/a.scp',
|
|
36
|
+
* authenticate: (url, kind) => ({
|
|
37
|
+
* url: `${url}${url.includes('?') ? '&' : '?'}token=${getToken()}`,
|
|
38
|
+
* headers: { 'X-Client': 's3m' },
|
|
39
|
+
* }),
|
|
40
|
+
* });
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export type AuthenticateFn = (url: string, kind: AuthRequestKind) => string | AuthResolvedRequest | Promise<string | AuthResolvedRequest>;
|
|
44
|
+
/** 把钩子返回值归一成 `{ url, headers }`;返回值异常时兜底用原 URL */
|
|
45
|
+
export declare function resolveAuthRequest(url: string, auth: AuthenticateFn | undefined, kind: AuthRequestKind): Promise<AuthResolvedRequest>;
|
|
46
|
+
/**
|
|
47
|
+
* 带鉴权的 fetch:先过钩子改写 URL / 追加 header,再发请求。
|
|
48
|
+
* `init.headers`(调用方自带的头)优先级高于钩子返回的 headers。
|
|
49
|
+
* `auth` 未配置时与裸 `fetch` 完全等价(参数原样透传,不新建 init)。
|
|
50
|
+
*/
|
|
51
|
+
export declare function authFetch(url: string, auth: AuthenticateFn | undefined, kind: AuthRequestKind, init?: RequestInit): Promise<Response>;
|
|
52
|
+
//# sourceMappingURL=AuthFetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthFetch.d.ts","sourceRoot":"","sources":["../../src/core/AuthFetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,mCAAmC;AACnC,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;AAExF,kCAAkC;AAClC,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,eAAe,KAClB,MAAM,GAAG,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,mBAAmB,CAAC,CAAC;AAE1E,kDAAkD;AAClD,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,cAAc,GAAG,SAAS,EAChC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,mBAAmB,CAAC,CAM9B;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,cAAc,GAAG,SAAS,EAChC,IAAI,EAAE,eAAe,EACrB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC,CAQnB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 鉴权适配(Authenticate Hook)
|
|
3
|
+
*
|
|
4
|
+
* S3M 服务经常挂在带鉴权的网关后面:有的要求 URL 带 `?token=...`,有的要求
|
|
5
|
+
* 请求头带 `Authorization` / `X-Token`,还有的 token 会过期需要定期换。内核在
|
|
6
|
+
* 主线程发出的全部请求(数据集配置 scp、瓦片 .s3mb/.s3mblock、子图集 .texblock、
|
|
7
|
+
* 棱线缓存、iServer 属性查询)都从这一个钩子过一遍,由使用方统一改写。
|
|
8
|
+
*
|
|
9
|
+
* 设计约束(对应 AGENTS.md 不变式①):不传 `authenticate` 时,请求路径与旧版
|
|
10
|
+
* 逐字一致——`authFetch` 直接短路到裸 `fetch(url)` / `fetch(url, init)`,连 init
|
|
11
|
+
* 对象都不新建。
|
|
12
|
+
*
|
|
13
|
+
* 注意:鉴权只作用于**发到网络上的请求**,不参与内核的缓存键(瓦片 URL 带 `#N`
|
|
14
|
+
* 片段与 nodes/pending 等内部 Map 的键都是改写前的原 URL),token 轮换不会导致
|
|
15
|
+
* 重复加载同一块瓦片。重试时每次重新过钩子,token 刷新后重试天然带上新值。
|
|
16
|
+
*/
|
|
17
|
+
/** 把钩子返回值归一成 `{ url, headers }`;返回值异常时兜底用原 URL */
|
|
18
|
+
export async function resolveAuthRequest(url, auth, kind) {
|
|
19
|
+
if (!auth)
|
|
20
|
+
return { url };
|
|
21
|
+
const out = await auth(url, kind);
|
|
22
|
+
if (typeof out === 'string')
|
|
23
|
+
return { url: out || url };
|
|
24
|
+
if (!out || typeof out !== 'object')
|
|
25
|
+
return { url };
|
|
26
|
+
return { url: out.url || url, headers: out.headers };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 带鉴权的 fetch:先过钩子改写 URL / 追加 header,再发请求。
|
|
30
|
+
* `init.headers`(调用方自带的头)优先级高于钩子返回的 headers。
|
|
31
|
+
* `auth` 未配置时与裸 `fetch` 完全等价(参数原样透传,不新建 init)。
|
|
32
|
+
*/
|
|
33
|
+
export async function authFetch(url, auth, kind, init) {
|
|
34
|
+
if (!auth)
|
|
35
|
+
return init === undefined ? fetch(url) : fetch(url, init);
|
|
36
|
+
const resolved = await resolveAuthRequest(url, auth, kind);
|
|
37
|
+
const hookHeaders = resolved.headers && Object.keys(resolved.headers).length > 0 ? resolved.headers : null;
|
|
38
|
+
if (!hookHeaders)
|
|
39
|
+
return init === undefined ? fetch(resolved.url) : fetch(resolved.url, init);
|
|
40
|
+
// 钩子头在前,init 头在后:调用方显式给的头不被覆盖
|
|
41
|
+
const headers = { ...hookHeaders, ...init?.headers };
|
|
42
|
+
return fetch(resolved.url, { ...init, headers });
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=AuthFetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthFetch.js","sourceRoot":"","sources":["../../src/core/AuthFetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAmCH,kDAAkD;AAClD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAW,EACX,IAAgC,EAChC,IAAqB;IAErB,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAClC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;IACxD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IACpD,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,IAAgC,EAChC,IAAqB,EACrB,IAAkB;IAElB,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3G,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9F,8BAA8B;IAC9B,MAAM,OAAO,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,IAAI,EAAE,OAAO,EAA4B,CAAC;IAC/E,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 3DGS(高斯泼溅)逐点属性的解码
|
|
3
|
+
*
|
|
4
|
+
* 输入是 MeshOpt 骨架里的两条自定义流,各 4 字节/顶点:
|
|
5
|
+
* `gsScale` —— 3 个 u8,log 量化;第 4 字节是填充
|
|
6
|
+
* `gsRotation` —— 3 个 u8 存四元数的 x/y/z;w 由公式补;第 4 字节是填充
|
|
7
|
+
*
|
|
8
|
+
* 这两条流以前是「保留原始字节但语义未知」(FORMAT-NOTES 第九节的 D 级),
|
|
9
|
+
* 所以只能按点渲染。量化格式最终不是靠统计猜出来的,是从官方 worker
|
|
10
|
+
* `SuperMap3D/Workers/GaussianSplating.js`(3.9 KB)里读出来的,公式逐字如下:
|
|
11
|
+
*
|
|
12
|
+
* ```js
|
|
13
|
+
* function j(t){ // scale
|
|
14
|
+
* a[n*3+0] = Math.exp(t[n*4+0]/16 - 10)
|
|
15
|
+
* a[n*3+1] = Math.exp(t[n*4+1]/16 - 10)
|
|
16
|
+
* a[n*3+2] = Math.exp(t[n*4+2]/16 - 10)
|
|
17
|
+
* }
|
|
18
|
+
* function D(t){ // rotation
|
|
19
|
+
* c = t[n]/127.5 - 1; f = t[n+1]/127.5 - 1; x = t[n+2]/127.5 - 1
|
|
20
|
+
* s = Math.sqrt(Math.max(0, 1 - (c*c + f*f + x*x)))
|
|
21
|
+
* a[n] = s; a[n+1] = c; a[n+2] = f; a[n+3] = x // (w, x, y, z)
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* 官方还有第二条分支(`isSPZCompress && version === 1.1`)走 10-10-10-2 的
|
|
26
|
+
* 「smallest three」打包,本模块也实现了 —— 见 `decodeRotation` 的 mode 判定。
|
|
27
|
+
*
|
|
28
|
+
* **为什么以前看这 4 字节像乱码**:第 4 字节确实不参与解码,于是同一瓦片里它
|
|
29
|
+
* 一会儿是 0 一会儿是 207(填充的残留),拿 32 位整数字段或 4 分量向量去套,
|
|
30
|
+
* 自然怎么都对不上。只取前 3 字节 + w 由单位化补出,立刻就是干净的四元数。
|
|
31
|
+
*/
|
|
32
|
+
export interface SplatData {
|
|
33
|
+
/** 3N(米,场景 ENU 坐标) */
|
|
34
|
+
positions: Float32Array;
|
|
35
|
+
/** 3N(米,三个主轴的高斯半径) */
|
|
36
|
+
scales: Float32Array;
|
|
37
|
+
/** 4N,单位四元数 (x, y, z, w) —— three 的 Quaternion 顺序 */
|
|
38
|
+
rotations: Float32Array;
|
|
39
|
+
/** 4N,RGBA8 */
|
|
40
|
+
colors: Uint8Array;
|
|
41
|
+
count: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* scale:`exp(byte/16 - 10)` 米。
|
|
45
|
+
* 值域 byte ∈ [0,255] → [4.54e-5, 380] 米,建筑泼溅的典型值(0.01~1 米)落在中段。
|
|
46
|
+
*/
|
|
47
|
+
export declare function decodeScale(bytes: Uint8Array, stride: number, offset: number, count: number): Float32Array;
|
|
48
|
+
/**
|
|
49
|
+
* rotation:3 个 u8 直接归一化到 [-1,1],第四个分量由单位化补出。
|
|
50
|
+
*
|
|
51
|
+
* 输出顺序是 three 的 `(x, y, z, w)`,而官方内部是 `(w, x, y, z)` —— 这里已经换过。
|
|
52
|
+
*/
|
|
53
|
+
export declare function decodeRotation(bytes: Uint8Array, stride: number, offset: number, count: number): Float32Array;
|
|
54
|
+
export declare function lastRotationResidual(): number;
|
|
55
|
+
/**
|
|
56
|
+
* 10-10-10-2 的 smallest-three(官方 `U()`,`isSPZCompress && version === 1.1` 时走这条)。
|
|
57
|
+
*
|
|
58
|
+
* 3 个分量各 10 bit(第 9 bit 是符号),剩下 2 bit 记录「哪一维是最大的」,
|
|
59
|
+
* 最大维由单位化补出 —— 这样只需要 32 bit 就能无损表达一个单位四元数。
|
|
60
|
+
*/
|
|
61
|
+
export declare function decodeRotationSmallestThree(bytes: Uint8Array, stride: number, offset: number, count: number): Float32Array;
|
|
62
|
+
/** 逐点协方差矩阵的上三角(6 个 float):`Σ = R S Sᵀ Rᵀ`,供 EWA 投影用 */
|
|
63
|
+
export declare function covariance(sx: number, sy: number, sz: number, qx: number, qy: number, qz: number, qw: number, out: Float32Array, at: number): void;
|
|
64
|
+
//# sourceMappingURL=GaussianSplat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GaussianSplat.d.ts","sourceRoot":"","sources":["../../src/core/GaussianSplat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AASH,MAAM,WAAW,SAAS;IACxB,sBAAsB;IACtB,SAAS,EAAE,YAAY,CAAC;IACxB,sBAAsB;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,qDAAqD;IACrD,SAAS,EAAE,YAAY,CAAC;IACxB,eAAe;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAS1G;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAkB7G;AAUD,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,YAAY,CA0Bd;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CACxB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,YAAY,EACjB,EAAE,EAAE,MAAM,GACT,IAAI,CAqBN"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 3DGS(高斯泼溅)逐点属性的解码
|
|
3
|
+
*
|
|
4
|
+
* 输入是 MeshOpt 骨架里的两条自定义流,各 4 字节/顶点:
|
|
5
|
+
* `gsScale` —— 3 个 u8,log 量化;第 4 字节是填充
|
|
6
|
+
* `gsRotation` —— 3 个 u8 存四元数的 x/y/z;w 由公式补;第 4 字节是填充
|
|
7
|
+
*
|
|
8
|
+
* 这两条流以前是「保留原始字节但语义未知」(FORMAT-NOTES 第九节的 D 级),
|
|
9
|
+
* 所以只能按点渲染。量化格式最终不是靠统计猜出来的,是从官方 worker
|
|
10
|
+
* `SuperMap3D/Workers/GaussianSplating.js`(3.9 KB)里读出来的,公式逐字如下:
|
|
11
|
+
*
|
|
12
|
+
* ```js
|
|
13
|
+
* function j(t){ // scale
|
|
14
|
+
* a[n*3+0] = Math.exp(t[n*4+0]/16 - 10)
|
|
15
|
+
* a[n*3+1] = Math.exp(t[n*4+1]/16 - 10)
|
|
16
|
+
* a[n*3+2] = Math.exp(t[n*4+2]/16 - 10)
|
|
17
|
+
* }
|
|
18
|
+
* function D(t){ // rotation
|
|
19
|
+
* c = t[n]/127.5 - 1; f = t[n+1]/127.5 - 1; x = t[n+2]/127.5 - 1
|
|
20
|
+
* s = Math.sqrt(Math.max(0, 1 - (c*c + f*f + x*x)))
|
|
21
|
+
* a[n] = s; a[n+1] = c; a[n+2] = f; a[n+3] = x // (w, x, y, z)
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* 官方还有第二条分支(`isSPZCompress && version === 1.1`)走 10-10-10-2 的
|
|
26
|
+
* 「smallest three」打包,本模块也实现了 —— 见 `decodeRotation` 的 mode 判定。
|
|
27
|
+
*
|
|
28
|
+
* **为什么以前看这 4 字节像乱码**:第 4 字节确实不参与解码,于是同一瓦片里它
|
|
29
|
+
* 一会儿是 0 一会儿是 207(填充的残留),拿 32 位整数字段或 4 分量向量去套,
|
|
30
|
+
* 自然怎么都对不上。只取前 3 字节 + w 由单位化补出,立刻就是干净的四元数。
|
|
31
|
+
*/
|
|
32
|
+
/** SPZ 的 log 量化:scale 实际是 exp(v/16 - 10) 米 */
|
|
33
|
+
const SCALE_LOG_DIV = 16;
|
|
34
|
+
const SCALE_LOG_BIAS = 10;
|
|
35
|
+
/** rotation 的 u8 归一化:0 → -1,255 → 1 */
|
|
36
|
+
const ROT_U8_SCALE = 127.5;
|
|
37
|
+
/**
|
|
38
|
+
* scale:`exp(byte/16 - 10)` 米。
|
|
39
|
+
* 值域 byte ∈ [0,255] → [4.54e-5, 380] 米,建筑泼溅的典型值(0.01~1 米)落在中段。
|
|
40
|
+
*/
|
|
41
|
+
export function decodeScale(bytes, stride, offset, count) {
|
|
42
|
+
const out = new Float32Array(count * 3);
|
|
43
|
+
for (let i = 0; i < count; i++) {
|
|
44
|
+
const o = i * stride + offset;
|
|
45
|
+
out[i * 3] = Math.exp(bytes[o] / SCALE_LOG_DIV - SCALE_LOG_BIAS);
|
|
46
|
+
out[i * 3 + 1] = Math.exp(bytes[o + 1] / SCALE_LOG_DIV - SCALE_LOG_BIAS);
|
|
47
|
+
out[i * 3 + 2] = Math.exp(bytes[o + 2] / SCALE_LOG_DIV - SCALE_LOG_BIAS);
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* rotation:3 个 u8 直接归一化到 [-1,1],第四个分量由单位化补出。
|
|
53
|
+
*
|
|
54
|
+
* 输出顺序是 three 的 `(x, y, z, w)`,而官方内部是 `(w, x, y, z)` —— 这里已经换过。
|
|
55
|
+
*/
|
|
56
|
+
export function decodeRotation(bytes, stride, offset, count) {
|
|
57
|
+
const out = new Float32Array(count * 4);
|
|
58
|
+
let maxErr = 0;
|
|
59
|
+
for (let i = 0; i < count; i++) {
|
|
60
|
+
const o = i * stride + offset;
|
|
61
|
+
const x = bytes[o] / ROT_U8_SCALE - 1;
|
|
62
|
+
const y = bytes[o + 1] / ROT_U8_SCALE - 1;
|
|
63
|
+
const z = bytes[o + 2] / ROT_U8_SCALE - 1;
|
|
64
|
+
const w = Math.sqrt(Math.max(0, 1 - (x * x + y * y + z * z)));
|
|
65
|
+
out[i * 4] = x;
|
|
66
|
+
out[i * 4 + 1] = y;
|
|
67
|
+
out[i * 4 + 2] = z;
|
|
68
|
+
out[i * 4 + 3] = w;
|
|
69
|
+
maxErr = Math.max(maxErr, Math.abs(x * x + y * y + z * z + w * w - 1));
|
|
70
|
+
}
|
|
71
|
+
// 模长偏差只可能在「四元数确实不是这套编码」时出现,留给调用方判断
|
|
72
|
+
rotationResidual = maxErr;
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 上一次 `decodeRotation` 的单位化残差(|q|²-1 的最大绝对值)。
|
|
77
|
+
*
|
|
78
|
+
* 这是判定「编码分支猜对没有」的判据:`D()` 分支下 w 是补出来的,残差恒 ≈ 0;
|
|
79
|
+
* 如果数据其实是 smallest-three 打包,把前 3 字节当分量解出来的 |q|² 会明显偏离 1。
|
|
80
|
+
*/
|
|
81
|
+
let rotationResidual = 0;
|
|
82
|
+
export function lastRotationResidual() {
|
|
83
|
+
return rotationResidual;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 10-10-10-2 的 smallest-three(官方 `U()`,`isSPZCompress && version === 1.1` 时走这条)。
|
|
87
|
+
*
|
|
88
|
+
* 3 个分量各 10 bit(第 9 bit 是符号),剩下 2 bit 记录「哪一维是最大的」,
|
|
89
|
+
* 最大维由单位化补出 —— 这样只需要 32 bit 就能无损表达一个单位四元数。
|
|
90
|
+
*/
|
|
91
|
+
export function decodeRotationSmallestThree(bytes, stride, offset, count) {
|
|
92
|
+
const out = new Float32Array(count * 4);
|
|
93
|
+
const MASK = (1 << 9) - 1;
|
|
94
|
+
const SQRT_HALF = Math.SQRT1_2;
|
|
95
|
+
for (let i = 0; i < count; i++) {
|
|
96
|
+
const o = i * stride + offset;
|
|
97
|
+
const packed = (bytes[o] | (bytes[o + 1] << 8) | (bytes[o + 2] << 16) | (bytes[o + 3] << 24)) >>> 0;
|
|
98
|
+
const largest = (packed >>> 30) & 3;
|
|
99
|
+
let rest = packed;
|
|
100
|
+
let sumSq = 0;
|
|
101
|
+
for (let axis = 3; axis >= 0; axis--) {
|
|
102
|
+
if (axis === largest)
|
|
103
|
+
continue;
|
|
104
|
+
const mag = rest & MASK;
|
|
105
|
+
const negative = (rest >>> 9) & 1;
|
|
106
|
+
rest >>>= 10;
|
|
107
|
+
// 值域 [-√½, √½]:单位四元数里任一分量的上界
|
|
108
|
+
let v = (SQRT_HALF * mag) / MASK;
|
|
109
|
+
if (negative)
|
|
110
|
+
v = -v;
|
|
111
|
+
out[i * 4 + axis] = v;
|
|
112
|
+
sumSq += v * v;
|
|
113
|
+
}
|
|
114
|
+
out[i * 4 + largest] = Math.sqrt(Math.max(1 - sumSq, 0));
|
|
115
|
+
}
|
|
116
|
+
rotationResidual = 0;
|
|
117
|
+
return out;
|
|
118
|
+
}
|
|
119
|
+
/** 逐点协方差矩阵的上三角(6 个 float):`Σ = R S Sᵀ Rᵀ`,供 EWA 投影用 */
|
|
120
|
+
export function covariance(sx, sy, sz, qx, qy, qz, qw, out, at) {
|
|
121
|
+
// 旋转矩阵(列主序 3×3)
|
|
122
|
+
const xx = qx * qx, yy = qy * qy, zz = qz * qz;
|
|
123
|
+
const xy = qx * qy, xz = qx * qz, yz = qy * qz;
|
|
124
|
+
const wx = qw * qx, wy = qw * qy, wz = qw * qz;
|
|
125
|
+
const r00 = 1 - 2 * (yy + zz), r01 = 2 * (xy - wz), r02 = 2 * (xz + wy);
|
|
126
|
+
const r10 = 2 * (xy + wz), r11 = 1 - 2 * (xx + zz), r12 = 2 * (yz - wx);
|
|
127
|
+
const r20 = 2 * (xz - wy), r21 = 2 * (yz + wx), r22 = 1 - 2 * (xx + yy);
|
|
128
|
+
// M = R · diag(s),则 Σ = M Mᵀ
|
|
129
|
+
const m00 = r00 * sx, m01 = r01 * sy, m02 = r02 * sz;
|
|
130
|
+
const m10 = r10 * sx, m11 = r11 * sy, m12 = r12 * sz;
|
|
131
|
+
const m20 = r20 * sx, m21 = r21 * sy, m22 = r22 * sz;
|
|
132
|
+
out[at] = m00 * m00 + m01 * m01 + m02 * m02;
|
|
133
|
+
out[at + 1] = m00 * m10 + m01 * m11 + m02 * m12;
|
|
134
|
+
out[at + 2] = m00 * m20 + m01 * m21 + m02 * m22;
|
|
135
|
+
out[at + 3] = m10 * m10 + m11 * m11 + m12 * m12;
|
|
136
|
+
out[at + 4] = m10 * m20 + m11 * m21 + m12 * m22;
|
|
137
|
+
out[at + 5] = m20 * m20 + m21 * m21 + m22 * m22;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=GaussianSplat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GaussianSplat.js","sourceRoot":"","sources":["../../src/core/GaussianSplat.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import type { ParsedTile } from './types.js';
|
|
|
2
2
|
export interface ParseS3M1Options {
|
|
3
3
|
inflate?: (bytes: Uint8Array) => Uint8Array | Promise<Uint8Array>;
|
|
4
4
|
}
|
|
5
|
-
/** 是不是 S3M 1.x
|
|
5
|
+
/** 是不是 S3M 1.x 容器(版本字节 0 或 1) */
|
|
6
6
|
export declare function isS3M1Buffer(buffer: ArrayBuffer): boolean;
|
|
7
7
|
/**
|
|
8
8
|
* 按「字节/像素」反推 S3MPixelFormat。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"S3M1Parser.d.ts","sourceRoot":"","sources":["../../src/core/S3M1Parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"S3M1Parser.d.ts","sourceRoot":"","sources":["../../src/core/S3M1Parser.ts"],"names":[],"mappings":"AA+DA,OAAO,KAAK,EAKV,UAAU,EAKX,MAAM,YAAY,CAAC;AAepB,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACnE;AAED,iCAAiC;AACjC,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAKzD;AAsZD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQvE;AAgDD,wBAAsB,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CAwK7G"}
|