@treasuryspatial/map-kit 0.1.11 → 0.1.13
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/mapThreeLayer.d.ts.map +1 -1
- package/dist/mapThreeLayer.js +74 -48
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapThreeLayer.d.ts","sourceRoot":"","sources":["../src/mapThreeLayer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,SAAS,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACjE,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;IAC3F,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"mapThreeLayer.d.ts","sourceRoot":"","sources":["../src/mapThreeLayer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,SAAS,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACjE,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;IAC3F,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA8VhF"}
|
package/dist/mapThreeLayer.js
CHANGED
|
@@ -22,6 +22,69 @@ export function createMapThreeLayer(options) {
|
|
|
22
22
|
let errorCount = 0;
|
|
23
23
|
let hasRenderable = false;
|
|
24
24
|
let originResolved = false;
|
|
25
|
+
let didPrerender = false;
|
|
26
|
+
let lastMatrix = null;
|
|
27
|
+
const renderOffscreen = () => {
|
|
28
|
+
if (renderDisabled)
|
|
29
|
+
return;
|
|
30
|
+
if (!renderer || !scene || !camera || !rootGroup || !renderTarget)
|
|
31
|
+
return;
|
|
32
|
+
if (!hasRenderable)
|
|
33
|
+
return;
|
|
34
|
+
if (lastMatrix) {
|
|
35
|
+
applyMatrix(lastMatrix);
|
|
36
|
+
}
|
|
37
|
+
if (!mercatorOrigin && mapRef && !originResolved) {
|
|
38
|
+
try {
|
|
39
|
+
const center = mapRef.getCenter();
|
|
40
|
+
mercatorOrigin = mapboxgl.MercatorCoordinate.fromLngLat(center);
|
|
41
|
+
meterScale = mercatorOrigin.meterInMercatorCoordinateUnits();
|
|
42
|
+
originResolved = true;
|
|
43
|
+
if (debug) {
|
|
44
|
+
log('origin fallback', {
|
|
45
|
+
origin: { lng: center.lng, lat: center.lat },
|
|
46
|
+
mercator: { x: mercatorOrigin.x, y: mercatorOrigin.y, z: mercatorOrigin.z },
|
|
47
|
+
meterScale,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
logError('origin fallback failed', err);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (mercatorOrigin && lastMatrix && camera) {
|
|
56
|
+
const m = new THREE.Matrix4().fromArray(lastMatrix);
|
|
57
|
+
const translate = new THREE.Matrix4().makeTranslation(mercatorOrigin.x, mercatorOrigin.y, (mercatorOrigin.z ?? 0) + zOffset * meterScale);
|
|
58
|
+
const scale = new THREE.Matrix4().makeScale(meterScale, -meterScale, meterScale);
|
|
59
|
+
const l = new THREE.Matrix4().multiplyMatrices(translate, scale);
|
|
60
|
+
camera.projectionMatrix = m.multiply(l);
|
|
61
|
+
if ('projectionMatrixInverse' in camera) {
|
|
62
|
+
camera.projectionMatrixInverse.copy(camera.projectionMatrix).invert();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const canvas = mapRef?.getCanvas();
|
|
66
|
+
if (canvas && (canvas.width !== targetWidth || canvas.height !== targetHeight)) {
|
|
67
|
+
targetWidth = canvas.width;
|
|
68
|
+
targetHeight = canvas.height;
|
|
69
|
+
renderTarget.setSize(targetWidth, targetHeight);
|
|
70
|
+
log('renderTarget resized', { width: targetWidth, height: targetHeight });
|
|
71
|
+
}
|
|
72
|
+
renderer.setRenderTarget(renderTarget);
|
|
73
|
+
renderer.resetState();
|
|
74
|
+
const gl = renderer.getContext();
|
|
75
|
+
gl.disable(gl.SCISSOR_TEST);
|
|
76
|
+
gl.disable(gl.STENCIL_TEST);
|
|
77
|
+
gl.colorMask(true, true, true, true);
|
|
78
|
+
gl.depthMask(true);
|
|
79
|
+
renderer.setViewport(0, 0, targetWidth, targetHeight);
|
|
80
|
+
renderer.setClearColor(0x000000, 0);
|
|
81
|
+
renderer.setClearAlpha(0);
|
|
82
|
+
renderer.clear(true, true, true);
|
|
83
|
+
checkFramebuffer(gl, 'prerender');
|
|
84
|
+
renderer.render(scene, camera);
|
|
85
|
+
logGlError(gl, 'prerender');
|
|
86
|
+
renderer.setRenderTarget(null);
|
|
87
|
+
};
|
|
25
88
|
const log = (...args) => {
|
|
26
89
|
if (!debug)
|
|
27
90
|
return;
|
|
@@ -159,53 +222,9 @@ export function createMapThreeLayer(options) {
|
|
|
159
222
|
if (!hasRenderable)
|
|
160
223
|
return;
|
|
161
224
|
try {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
const center = mapRef.getCenter();
|
|
166
|
-
mercatorOrigin = mapboxgl.MercatorCoordinate.fromLngLat(center);
|
|
167
|
-
meterScale = mercatorOrigin.meterInMercatorCoordinateUnits();
|
|
168
|
-
originResolved = true;
|
|
169
|
-
if (debug) {
|
|
170
|
-
log('origin fallback', {
|
|
171
|
-
origin: { lng: center.lng, lat: center.lat },
|
|
172
|
-
mercator: { x: mercatorOrigin.x, y: mercatorOrigin.y, z: mercatorOrigin.z },
|
|
173
|
-
meterScale,
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
catch (err) {
|
|
178
|
-
logError('origin fallback failed', err);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
if (mercatorOrigin) {
|
|
182
|
-
const translate = new THREE.Matrix4().makeTranslation(mercatorOrigin.x, mercatorOrigin.y, (mercatorOrigin.z ?? 0) + zOffset * meterScale);
|
|
183
|
-
const scale = new THREE.Matrix4().makeScale(meterScale, -meterScale, meterScale);
|
|
184
|
-
rootGroup.matrix = new THREE.Matrix4().multiplyMatrices(translate, scale);
|
|
185
|
-
rootGroup.matrixWorldNeedsUpdate = true;
|
|
186
|
-
}
|
|
187
|
-
const canvas = mapRef?.getCanvas();
|
|
188
|
-
if (canvas && (canvas.width !== targetWidth || canvas.height !== targetHeight)) {
|
|
189
|
-
targetWidth = canvas.width;
|
|
190
|
-
targetHeight = canvas.height;
|
|
191
|
-
renderTarget.setSize(targetWidth, targetHeight);
|
|
192
|
-
log('renderTarget resized', { width: targetWidth, height: targetHeight });
|
|
193
|
-
}
|
|
194
|
-
renderer.setRenderTarget(renderTarget);
|
|
195
|
-
renderer.resetState();
|
|
196
|
-
const gl = renderer.getContext();
|
|
197
|
-
gl.disable(gl.SCISSOR_TEST);
|
|
198
|
-
gl.disable(gl.STENCIL_TEST);
|
|
199
|
-
gl.colorMask(true, true, true, true);
|
|
200
|
-
gl.depthMask(true);
|
|
201
|
-
renderer.setViewport(0, 0, targetWidth, targetHeight);
|
|
202
|
-
renderer.setClearColor(0x000000, 0);
|
|
203
|
-
renderer.setClearAlpha(0);
|
|
204
|
-
renderer.clear(true, true, true);
|
|
205
|
-
checkFramebuffer(gl, 'prerender');
|
|
206
|
-
renderer.render(scene, camera);
|
|
207
|
-
logGlError(gl, 'prerender');
|
|
208
|
-
renderer.setRenderTarget(null);
|
|
225
|
+
lastMatrix = matrix;
|
|
226
|
+
renderOffscreen();
|
|
227
|
+
didPrerender = true;
|
|
209
228
|
}
|
|
210
229
|
catch (err) {
|
|
211
230
|
errorCount += 1;
|
|
@@ -216,7 +235,7 @@ export function createMapThreeLayer(options) {
|
|
|
216
235
|
}
|
|
217
236
|
}
|
|
218
237
|
},
|
|
219
|
-
render: (gl) => {
|
|
238
|
+
render: (gl, matrix) => {
|
|
220
239
|
if (renderDisabled)
|
|
221
240
|
return;
|
|
222
241
|
if (!renderer || !screenScene || !screenCamera)
|
|
@@ -224,6 +243,13 @@ export function createMapThreeLayer(options) {
|
|
|
224
243
|
if (!hasRenderable)
|
|
225
244
|
return;
|
|
226
245
|
try {
|
|
246
|
+
if (matrix) {
|
|
247
|
+
lastMatrix = matrix;
|
|
248
|
+
}
|
|
249
|
+
if (!didPrerender) {
|
|
250
|
+
renderOffscreen();
|
|
251
|
+
}
|
|
252
|
+
didPrerender = false;
|
|
227
253
|
renderer.resetState();
|
|
228
254
|
gl.disable(gl.DEPTH_TEST);
|
|
229
255
|
gl.depthMask(false);
|