@vertexvis/viewer 0.13.1 → 0.13.2-canary.10
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/cjs/{browser.esm-31b03292.js → browser.esm-075810bf.js} +1 -1
- package/dist/cjs/{bundle.esm-dc0a8361.js → bundle.esm-618a5fe9.js} +80 -28
- package/dist/cjs/{config-90ee43d5.js → config-fb124bac.js} +2 -2
- package/dist/cjs/{cursors-ad2fd395.js → cursors-d71f6a74.js} +1 -1
- package/dist/cjs/{dom-dd265f48.js → dom-57ef84e9.js} +1 -1
- package/dist/cjs/{entities-aa59890e.js → entities-90f1347a.js} +3 -3
- package/dist/cjs/index.cjs.js +14 -12
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{mapper-f6e6cafe.js → mapper-80ee2957.js} +2 -2
- package/dist/cjs/{markup-fb1553b1.js → markup-7f7de5f2.js} +2 -2
- package/dist/cjs/{measurement-aba1e0e8.js → measurement-f1ae9248.js} +2 -2
- package/dist/cjs/{model-4ec0c36e.js → model-55abd9ab.js} +1 -1
- package/dist/cjs/{overlays-40c6cbc7.js → overlays-68e8eff2.js} +2 -2
- package/dist/cjs/{png-decoder-27d25eed.js → png-decoder-076131d8.js} +1 -1
- package/dist/cjs/{results-bc325974.js → results-e9496869.js} +1 -1
- package/dist/cjs/{scene-d420fd26.js → scene-92728420.js} +188 -90
- package/dist/cjs/{streamAttributes-d6236448.js → streamAttributes-81eb52f2.js} +1508 -43
- package/dist/cjs/{utils-545b1865.js → utils-463cd52e.js} +1 -1
- package/dist/cjs/{utils-f80be307.js → utils-6397efca.js} +1 -1
- package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js +1 -1
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
- package/dist/cjs/vertex-scene-tree.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-dom-element_3.cjs.entry.js +8 -7
- package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +20 -15
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +6 -6
- package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +10 -10
- package/dist/cjs/vertex-viewer-measurement-tool.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-measurements.cjs.entry.js +8 -8
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer.cjs.entry.js +287 -80
- package/dist/cjs/viewer.cjs.js +1 -1
- package/dist/cjs/{viewport-8c39089f.js → viewport-54b1389d.js} +34 -2
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.css +1 -1
- package/dist/collection/components/viewer/viewer.js +68 -4
- package/dist/collection/components/viewer-dom-renderer/renderer2d.js +1 -1
- package/dist/collection/components/viewer-dom-renderer/renderer3d.js +4 -2
- package/dist/collection/components/viewer-dom-renderer/viewer-dom-renderer.js +5 -6
- package/dist/collection/components/viewer-measurement-distance/hitTest.js +9 -4
- package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js +5 -5
- package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js +3 -3
- package/dist/collection/index.js +2 -2
- package/dist/collection/lib/errors.js +8 -1
- package/dist/collection/lib/interactions/index.js +3 -1
- package/dist/collection/lib/interactions/interactionApi.js +4 -25
- package/dist/collection/lib/interactions/interactionApiOrthographic.js +136 -0
- package/dist/collection/lib/interactions/interactionApiPerspective.js +51 -0
- package/dist/collection/lib/interactions/multiTouchInteractionHandler.js +3 -2
- package/dist/collection/lib/mappers/frameStreaming.js +27 -5
- package/dist/collection/lib/rendering/matrices.js +13 -4
- package/dist/collection/lib/rendering/vectors.js +7 -0
- package/dist/collection/lib/scenes/__mocks__/mocks.js +2 -2
- package/dist/collection/lib/scenes/camera.js +163 -83
- package/dist/collection/lib/scenes/mapper.js +3 -2
- package/dist/collection/lib/scenes/scene.js +22 -9
- package/dist/collection/lib/types/clippingPlanes.js +48 -20
- package/dist/collection/lib/types/depthBuffer.js +32 -3
- package/dist/collection/lib/types/frame.js +133 -24
- package/dist/collection/lib/types/frameCamera.js +87 -6
- package/dist/collection/lib/types/viewport.js +34 -2
- package/dist/collection/testing/fixtures.js +28 -15
- package/dist/collection/testing/viewer.js +5 -3
- package/dist/custom-elements/index.js +2135 -283
- package/dist/esm/{browser.esm-59e914f6.js → browser.esm-e72d80ad.js} +1 -1
- package/dist/esm/{bundle.esm-d899b2d5.js → bundle.esm-8ceccb91.js} +80 -29
- package/dist/esm/{config-604c644e.js → config-fb7cd8ff.js} +2 -2
- package/dist/esm/{cursors-a7ec4adb.js → cursors-fc2deed7.js} +1 -1
- package/dist/esm/{dom-780d25be.js → dom-2cd18856.js} +1 -1
- package/dist/esm/{entities-759d97cd.js → entities-78557270.js} +3 -3
- package/dist/esm/index.js +12 -12
- package/dist/esm/index.mjs +12 -12
- package/dist/esm/loader.js +1 -1
- package/dist/esm/loader.mjs +1 -1
- package/dist/esm/{mapper-4b815e31.js → mapper-da36de17.js} +2 -2
- package/dist/esm/{markup-1d177b4a.js → markup-c313d99c.js} +2 -2
- package/dist/esm/{measurement-12cdbf5c.js → measurement-544b69d5.js} +2 -2
- package/dist/esm/{model-e5a4f00f.js → model-2a34b443.js} +1 -1
- package/dist/esm/{overlays-1919b192.js → overlays-354e275c.js} +2 -2
- package/dist/esm/{png-decoder-3f1fa486.js → png-decoder-07de80d1.js} +1 -1
- package/dist/esm/{results-994bdb50.js → results-4d0c3568.js} +1 -1
- package/dist/esm/{scene-2c2460d5.js → scene-2bfcce74.js} +188 -90
- package/dist/esm/{streamAttributes-d623bb60.js → streamAttributes-d0b384b3.js} +1502 -44
- package/dist/esm/{utils-83a19677.js → utils-3ea0acdd.js} +1 -1
- package/dist/esm/{utils-5e57bf24.js → utils-e0941c61.js} +1 -1
- package/dist/esm/vertex-scene-tree-search_3.entry.js +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
- package/dist/esm/vertex-scene-tree.entry.js +4 -4
- package/dist/esm/vertex-viewer-dom-element_3.entry.js +8 -7
- package/dist/esm/vertex-viewer-markup-arrow_3.entry.js +3 -3
- package/dist/esm/vertex-viewer-markup-tool.entry.js +4 -4
- package/dist/esm/vertex-viewer-markup.entry.js +4 -4
- package/dist/esm/vertex-viewer-measurement-details.entry.js +3 -3
- package/dist/esm/vertex-viewer-measurement-distance.entry.js +20 -15
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js +6 -6
- package/dist/esm/vertex-viewer-measurement-precise.entry.js +10 -10
- package/dist/esm/vertex-viewer-measurement-tool.entry.js +5 -5
- package/dist/esm/vertex-viewer-measurements.entry.js +8 -8
- package/dist/esm/vertex-viewer-view-cube.entry.js +3 -3
- package/dist/esm/vertex-viewer.entry.js +287 -80
- package/dist/esm/viewer.js +1 -1
- package/dist/esm/{viewport-01c886ea.js → viewport-5cc7b128.js} +34 -2
- package/dist/types/components/scene-tree-table-cell/scene-tree-table-cell.d.ts +1 -1
- package/dist/types/components/viewer/viewer.d.ts +8 -0
- package/dist/types/components/viewer-dom-renderer/renderer2d.d.ts +2 -2
- package/dist/types/components/viewer-dom-renderer/renderer3d.d.ts +3 -3
- package/dist/types/components/viewer-dom-renderer/viewer-dom-renderer.d.ts +2 -2
- package/dist/types/components/viewer-measurement-distance/hitTest.d.ts +3 -2
- package/dist/types/components/viewer-measurement-distance/utils.d.ts +2 -2
- package/dist/types/components/viewer-measurement-distance/viewer-measurement-distance.d.ts +2 -2
- package/dist/types/components/viewer-measurement-overlays/viewer-measurement-overlays-components.d.ts +2 -2
- package/dist/types/components/viewer-measurement-overlays/viewer-measurement-overlays.d.ts +2 -2
- package/dist/types/components.d.ts +15 -7
- package/dist/types/index.d.ts +1 -1
- package/dist/types/lib/errors.d.ts +3 -0
- package/dist/types/lib/interactions/index.d.ts +2 -0
- package/dist/types/lib/interactions/interactionApi.d.ts +34 -26
- package/dist/types/lib/interactions/interactionApiOrthographic.d.ts +35 -0
- package/dist/types/lib/interactions/interactionApiPerspective.d.ts +21 -0
- package/dist/types/lib/mappers/frameStreaming.d.ts +2 -0
- package/dist/types/lib/rendering/vectors.d.ts +2 -0
- package/dist/types/lib/scenes/__mocks__/mocks.d.ts +2 -2
- package/dist/types/lib/scenes/camera.d.ts +101 -38
- package/dist/types/lib/scenes/scene.d.ts +1 -1
- package/dist/types/lib/types/clippingPlanes.d.ts +3 -1
- package/dist/types/lib/types/depthBuffer.d.ts +28 -6
- package/dist/types/lib/types/frame.d.ts +80 -11
- package/dist/types/lib/types/frameCamera.d.ts +22 -3
- package/dist/types/lib/types/viewport.d.ts +24 -4
- package/dist/types/testing/fixtures.d.ts +8 -5
- package/dist/viewer/index.esm.js +1 -1
- package/dist/viewer/{p-f8d01b8a.entry.js → p-0a189e62.entry.js} +1 -1
- package/dist/viewer/{p-e07377fa.entry.js → p-1ca95f9a.entry.js} +1 -1
- package/dist/viewer/{p-d00e9203.js → p-3561d910.js} +1 -1
- package/dist/viewer/p-388a43f7.js +4 -0
- package/dist/viewer/{p-3810c24d.js → p-3f0f83ad.js} +1 -1
- package/dist/viewer/{p-8decee06.entry.js → p-41028d3b.entry.js} +1 -1
- package/dist/viewer/{p-439220c6.js → p-487e054a.js} +1 -1
- package/dist/viewer/p-49d36e94.entry.js +4 -0
- package/dist/viewer/{p-da2f4a56.js → p-5b342e97.js} +1 -1
- package/dist/viewer/p-661f0612.js +18 -0
- package/dist/viewer/{p-364ce21c.js → p-69058178.js} +1 -1
- package/dist/viewer/{p-353cfc7a.entry.js → p-73a5eacc.entry.js} +1 -1
- package/dist/viewer/p-77be081a.js +4 -0
- package/dist/viewer/{p-a0df0e0c.js → p-809d09d9.js} +1 -1
- package/dist/viewer/{p-d90f2f6d.entry.js → p-858bd2c7.entry.js} +1 -1
- package/dist/viewer/{p-25eaab00.entry.js → p-89b66838.entry.js} +1 -1
- package/dist/viewer/p-a93a63a9.js +4 -0
- package/dist/viewer/{p-df292b56.entry.js → p-b043b076.entry.js} +1 -1
- package/dist/viewer/{p-915d95ad.entry.js → p-b0ac6b3c.entry.js} +1 -1
- package/dist/viewer/{p-fec1a8d0.entry.js → p-b7624ff2.entry.js} +1 -1
- package/dist/viewer/{p-f7cb7e59.js → p-b8774c9c.js} +1 -1
- package/dist/viewer/{p-67446e35.js → p-bcb66f97.js} +1 -1
- package/dist/viewer/p-bcde5521.entry.js +4 -0
- package/dist/viewer/{p-7cad9bf4.js → p-d1584404.js} +1 -1
- package/dist/viewer/p-d32b54cb.js +4 -0
- package/dist/viewer/{p-f755af5a.entry.js → p-d3a20af4.entry.js} +1 -1
- package/dist/viewer/{p-c62cb926.entry.js → p-d9f99f4d.entry.js} +1 -1
- package/dist/viewer/p-e38458da.js +4 -0
- package/dist/viewer/{p-301660cf.js → p-e75bba97.js} +2 -2
- package/dist/viewer/{p-6e80f8b0.entry.js → p-ebd55df7.entry.js} +1 -1
- package/dist/viewer/{p-671c113c.entry.js → p-f0411993.entry.js} +1 -1
- package/dist/viewer/{p-2cefb1b0.js → p-fa9a0bed.js} +1 -1
- package/dist/viewer/p-ffdeb08c.js +4 -0
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +8 -8
- package/dist/viewer/p-081e6873.js +0 -4
- package/dist/viewer/p-085e908a.js +0 -4
- package/dist/viewer/p-0aba71fd.js +0 -18
- package/dist/viewer/p-3f6ac74f.js +0 -4
- package/dist/viewer/p-423410be.js +0 -4
- package/dist/viewer/p-432267bc.entry.js +0 -4
- package/dist/viewer/p-4985fad5.js +0 -4
- package/dist/viewer/p-e2297df2.entry.js +0 -4
- package/dist/viewer/p-fe11d694.js +0 -4
|
@@ -42,7 +42,7 @@ export class DepthBuffer {
|
|
|
42
42
|
/**
|
|
43
43
|
* Computes the depth from a 2D point within the coordinate space of the depth
|
|
44
44
|
* buffer. The returned depth is a value that's between the near and far plane
|
|
45
|
-
* of the camera.
|
|
45
|
+
* of the perspective camera.
|
|
46
46
|
*
|
|
47
47
|
* @param point A 2D point within the viewport.
|
|
48
48
|
* @param fallbackNormalizedDepth A fallback value if the depth is the max
|
|
@@ -54,6 +54,21 @@ export class DepthBuffer {
|
|
|
54
54
|
const depth = this.getNormalizedDepthAtPoint(point, fallbackNormalizedDepth);
|
|
55
55
|
return depth * (far - near) + near;
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Computes the depth from a 2D point within the coordinate space of the depth
|
|
59
|
+
* buffer. The returned depth is a value that's between the near and far plane
|
|
60
|
+
* of the orthographic camera.
|
|
61
|
+
*
|
|
62
|
+
* @param point A 2D point within the viewport.
|
|
63
|
+
* @param fallbackNormalizedDepth A fallback value if the depth is the max
|
|
64
|
+
* depth value, or cannot be determined.
|
|
65
|
+
* @returns A depth between the near and far plane.
|
|
66
|
+
*/
|
|
67
|
+
getOrthographicDepthAtPoint(point, fallbackNormalizedDepth) {
|
|
68
|
+
const { near, far } = this.camera;
|
|
69
|
+
const depth = this.getNormalizedDepthAtPoint(point, fallbackNormalizedDepth);
|
|
70
|
+
return depth * (far - near) + near / 2;
|
|
71
|
+
}
|
|
57
72
|
/**
|
|
58
73
|
* Computes a depth from a 2D point within the coordinate space of the frame.
|
|
59
74
|
* The returned depth is a normalized value (`[0, 1]`) between the near and
|
|
@@ -94,7 +109,7 @@ export class DepthBuffer {
|
|
|
94
109
|
return this.getNormalizedDepthAtPoint(point) < 1;
|
|
95
110
|
}
|
|
96
111
|
/**
|
|
97
|
-
* Computes a 3D point in world space coordinates from the depth value at the
|
|
112
|
+
* Computes a 3D point in perspective world space coordinates from the depth value at the
|
|
98
113
|
* given pixel and ray.
|
|
99
114
|
*
|
|
100
115
|
* @param point A pixel to use for reading a depth value.
|
|
@@ -114,6 +129,20 @@ export class DepthBuffer {
|
|
|
114
129
|
(Vector3.magnitude(vv) * Vector3.magnitude(eyeToWorldPt));
|
|
115
130
|
return Ray.at(ray, distance / angle);
|
|
116
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Computes a 3D point in orthographic world space coordinates from the depth value at the
|
|
134
|
+
* given pixel and ray.
|
|
135
|
+
*
|
|
136
|
+
* @param point A pixel to use for reading a depth value.
|
|
137
|
+
* @param ray A ray that specifies the origin and direction.
|
|
138
|
+
* @param fallbackNormalizedDepth A fallback value if the depth is the max
|
|
139
|
+
* depth value, or cannot be determined.
|
|
140
|
+
* @returns A point in world space coordinates.
|
|
141
|
+
*/
|
|
142
|
+
getOrthographicWorldPoint(point, ray, fallbackNormalizedDepth) {
|
|
143
|
+
const distance = this.getOrthographicDepthAtPoint(point, fallbackNormalizedDepth);
|
|
144
|
+
return Ray.at(ray, distance);
|
|
145
|
+
}
|
|
117
146
|
/**
|
|
118
147
|
* Returns `true` if the given point in world space is occluded by any
|
|
119
148
|
* geometry.
|
|
@@ -139,4 +168,4 @@ export class DepthBuffer {
|
|
|
139
168
|
* by a depth buffer.
|
|
140
169
|
*/
|
|
141
170
|
DepthBuffer.MAX_DEPTH_VALUE = 2 ** 16 - 1;
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwdGhCdWZmZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzL2RlcHRoQnVmZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVTlDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7RUFPdEI7Ozs7OztLQU1HO0VBQ0gsWUFDa0IsTUFBK0IsRUFDL0IsU0FBOEIsRUFDOUIsTUFBbUI7SUFGbkIsV0FBTSxHQUFOLE1BQU0sQ0FBeUI7SUFDL0IsY0FBUyxHQUFULFNBQVMsQ0FBcUI7SUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBYTtFQUNsQyxDQUFDO0VBRUo7Ozs7Ozs7O0tBUUc7RUFDSSxNQUFNLENBQUMsT0FBTyxDQUNuQixHQUE2QixFQUM3QixNQUErQixFQUMvQixTQUE4QjtJQUU5QixJQUFJLEdBQUcsQ0FBQyxJQUFJLFlBQVksV0FBVyxFQUFFO01BQ25DLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDckQ7U0FBTTtNQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztLQUMvRDtFQUNILENBQUM7RUFFRDs7Ozs7Ozs7O0tBU0c7RUFDSSxxQkFBcUIsQ0FDMUIsS0FBa0IsRUFDbEIsdUJBQWdDO0lBRWhDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQzFDLEtBQUssRUFDTCx1QkFBdUIsQ0FDeEIsQ0FBQztJQUVGLE9BQU8sS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFH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
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { Line3, Matrix4, Plane, Vector3, } from '@vertexvis/geometry';
|
|
1
|
+
import { BoundingSphere, Line3, Matrix4, Plane, Vector3, } from '@vertexvis/geometry';
|
|
2
2
|
import { decodePng } from '../../workers/png-decoder-pool';
|
|
3
|
+
import { constrainViewVector } from '../rendering/vectors';
|
|
3
4
|
import * as ClippingPlanes from './clippingPlanes';
|
|
4
5
|
import { DepthBuffer } from './depthBuffer';
|
|
5
6
|
import { FeatureMap } from './featureMap';
|
|
7
|
+
import * as FrameCamera from './frameCamera';
|
|
6
8
|
export class Frame {
|
|
7
9
|
constructor(correlationIds, sequenceNumber, dimensions, image, scene, depthBufferBytes, featureMapBytes) {
|
|
8
10
|
this.correlationIds = correlationIds;
|
|
@@ -55,19 +57,14 @@ export class FrameScene {
|
|
|
55
57
|
this.hasChanged = hasChanged;
|
|
56
58
|
}
|
|
57
59
|
}
|
|
58
|
-
export class
|
|
59
|
-
constructor(position, lookAt, up, near, far, aspectRatio
|
|
60
|
+
export class FrameCameraBase {
|
|
61
|
+
constructor(position, lookAt, up, near, far, aspectRatio) {
|
|
60
62
|
this.position = position;
|
|
61
63
|
this.lookAt = lookAt;
|
|
62
64
|
this.up = up;
|
|
63
65
|
this.near = near;
|
|
64
66
|
this.far = far;
|
|
65
67
|
this.aspectRatio = aspectRatio;
|
|
66
|
-
this.fovY = fovY;
|
|
67
|
-
}
|
|
68
|
-
static fromBoundingBox(camera, boundingBox, aspectRatio) {
|
|
69
|
-
const { near, far } = ClippingPlanes.fromBoundingBoxAndLookAtCamera(boundingBox, camera);
|
|
70
|
-
return new FramePerspectiveCamera(camera.position, camera.lookAt, camera.up, near, far, aspectRatio, 45);
|
|
71
68
|
}
|
|
72
69
|
get direction() {
|
|
73
70
|
return Vector3.normalize(this.viewVector);
|
|
@@ -90,22 +87,29 @@ export class FramePerspectiveCamera {
|
|
|
90
87
|
get projectionViewMatrix() {
|
|
91
88
|
return this.computeCameraMatrices().projectionViewMatrix;
|
|
92
89
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
projectionMatrix,
|
|
104
|
-
projectionMatrixInverse,
|
|
105
|
-
projectionViewMatrix,
|
|
106
|
-
};
|
|
90
|
+
get frustumProjectionViewMatrix() {
|
|
91
|
+
return this.computeCameraMatrices().projectionViewMatrix;
|
|
92
|
+
}
|
|
93
|
+
static fromBoundingBox(camera, boundingBox, aspectRatio) {
|
|
94
|
+
const { near, far } = ClippingPlanes.fromBoundingBoxAndLookAtCamera(boundingBox, camera);
|
|
95
|
+
if (FrameCamera.isOrthographicFrameCamera(camera)) {
|
|
96
|
+
return new FrameOrthographicCamera(constrainViewVector(camera.viewVector, BoundingSphere.create(boundingBox)), camera.lookAt, camera.up, near, far, aspectRatio, camera.fovHeight);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
return new FramePerspectiveCamera(camera.position, camera.lookAt, camera.up, near, far, aspectRatio, 45);
|
|
107
100
|
}
|
|
108
|
-
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Returns whether this `FrameCameraBase` is an orthographic camera.
|
|
104
|
+
*/
|
|
105
|
+
isOrthographic() {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Returns whether this `FrameCameraBase` is a perspective camera.
|
|
110
|
+
*/
|
|
111
|
+
isPerspective() {
|
|
112
|
+
return false;
|
|
109
113
|
}
|
|
110
114
|
/**
|
|
111
115
|
* Checks if the given point, in world space, is behind the near plane
|
|
@@ -136,5 +140,110 @@ export class FramePerspectiveCamera {
|
|
|
136
140
|
const pt = Plane.intersectLine(nearP, vl);
|
|
137
141
|
return pt != null ? Vector3.add(pt, position) : undefined;
|
|
138
142
|
}
|
|
143
|
+
computeCameraMatrices() {
|
|
144
|
+
if (this.cameraMatrices == null) {
|
|
145
|
+
return {
|
|
146
|
+
viewMatrix: Matrix4.makeIdentity(),
|
|
147
|
+
worldMatrix: Matrix4.makeIdentity(),
|
|
148
|
+
projectionMatrix: Matrix4.makeIdentity(),
|
|
149
|
+
projectionMatrixInverse: Matrix4.makeIdentity(),
|
|
150
|
+
projectionViewMatrix: Matrix4.makeIdentity(),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
return this.cameraMatrices;
|
|
154
|
+
}
|
|
155
|
+
updateCameraMatrices(cameraMatrices) {
|
|
156
|
+
this.cameraMatrices = cameraMatrices;
|
|
157
|
+
return this.cameraMatrices;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
export class FramePerspectiveCamera extends FrameCameraBase {
|
|
161
|
+
constructor(position, lookAt, up, near, far, aspectRatio, fovY = 45) {
|
|
162
|
+
super(position, lookAt, up, near, far, aspectRatio);
|
|
163
|
+
this.position = position;
|
|
164
|
+
this.lookAt = lookAt;
|
|
165
|
+
this.up = up;
|
|
166
|
+
this.near = near;
|
|
167
|
+
this.far = far;
|
|
168
|
+
this.aspectRatio = aspectRatio;
|
|
169
|
+
this.fovY = fovY;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Converts this `FramePerspectiveCamera` to a `FrameOrthographicCamera` using
|
|
173
|
+
* the provided `boundingBox` to compute the viewing frustum.
|
|
174
|
+
*
|
|
175
|
+
* @param boundingBox The visible bounding box.
|
|
176
|
+
*/
|
|
177
|
+
toOrthographic(boundingBox) {
|
|
178
|
+
return FrameCameraBase.fromBoundingBox(FrameCamera.toOrthographic(this, boundingBox), boundingBox, this.aspectRatio);
|
|
179
|
+
}
|
|
180
|
+
isPerspective() {
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
computeCameraMatrices() {
|
|
184
|
+
if (this.cameraMatrices == null) {
|
|
185
|
+
const viewMatrix = Matrix4.makeLookAtView(this.position, this.lookAt, this.up);
|
|
186
|
+
const worldMatrix = Matrix4.invert(viewMatrix);
|
|
187
|
+
const projectionMatrix = Matrix4.makePerspective(this.near, this.far, this.fovY, this.aspectRatio);
|
|
188
|
+
const projectionMatrixInverse = Matrix4.invert(projectionMatrix);
|
|
189
|
+
const projectionViewMatrix = Matrix4.multiply(projectionMatrix, viewMatrix);
|
|
190
|
+
return super.updateCameraMatrices({
|
|
191
|
+
viewMatrix,
|
|
192
|
+
worldMatrix,
|
|
193
|
+
projectionMatrix,
|
|
194
|
+
projectionMatrixInverse,
|
|
195
|
+
projectionViewMatrix,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
return this.cameraMatrices;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
export class FrameOrthographicCamera extends FrameCameraBase {
|
|
202
|
+
constructor(viewVector, lookAt, up, near, far, aspectRatio, fovHeight) {
|
|
203
|
+
super(Vector3.add(lookAt, Vector3.negate(viewVector)), lookAt, up, near, far, aspectRatio);
|
|
204
|
+
this.lookAt = lookAt;
|
|
205
|
+
this.up = up;
|
|
206
|
+
this.near = near;
|
|
207
|
+
this.far = far;
|
|
208
|
+
this.aspectRatio = aspectRatio;
|
|
209
|
+
this.fovHeight = fovHeight;
|
|
210
|
+
this.top = fovHeight * 0.5;
|
|
211
|
+
this.bottom = -this.top;
|
|
212
|
+
this.right = this.top * aspectRatio;
|
|
213
|
+
this.left = -this.right;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Converts this `FrameOrthographicCamera` to a `FramePerspectiveCamera` using
|
|
217
|
+
* the provided `boundingBox` to compute the near and far clipping planes.
|
|
218
|
+
*
|
|
219
|
+
* @param boundingBox The visible bounding box.
|
|
220
|
+
*/
|
|
221
|
+
toPerspective(boundingBox) {
|
|
222
|
+
return FrameCameraBase.fromBoundingBox(FrameCamera.toPerspective(this), boundingBox, this.aspectRatio);
|
|
223
|
+
}
|
|
224
|
+
isOrthographic() {
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
get frustumProjectionViewMatrix() {
|
|
228
|
+
const frustumProjectionMatrix = Matrix4.makeFrustum(this.left, this.right, this.top, this.bottom, this.near, this.far);
|
|
229
|
+
return Matrix4.multiply(frustumProjectionMatrix, this.computeCameraMatrices().viewMatrix);
|
|
230
|
+
}
|
|
231
|
+
computeCameraMatrices() {
|
|
232
|
+
if (this.cameraMatrices == null) {
|
|
233
|
+
const viewMatrix = Matrix4.makeLookAtView(this.position, this.lookAt, this.up);
|
|
234
|
+
const worldMatrix = Matrix4.invert(viewMatrix);
|
|
235
|
+
const projectionMatrix = Matrix4.makeOrthographic(this.left, this.right, this.bottom, this.top, this.near, this.far);
|
|
236
|
+
const projectionMatrixInverse = Matrix4.invert(projectionMatrix);
|
|
237
|
+
const projectionViewMatrix = Matrix4.multiply(projectionMatrix, viewMatrix);
|
|
238
|
+
return super.updateCameraMatrices({
|
|
239
|
+
viewMatrix,
|
|
240
|
+
worldMatrix,
|
|
241
|
+
projectionMatrix,
|
|
242
|
+
projectionMatrixInverse,
|
|
243
|
+
projectionViewMatrix,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
return this.cameraMatrices;
|
|
247
|
+
}
|
|
139
248
|
}
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzL2ZyYW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxLQUFLLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFFTCxPQUFPLEdBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxLQUFLLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJMUMsTUFBTSxPQUFPLEtBQUs7RUFJaEIsWUFDa0IsY0FBd0IsRUFDeEIsY0FBc0IsRUFDdEIsVUFBaUMsRUFDakMsS0FBaUIsRUFDakIsS0FBaUIsRUFDaEIsZ0JBQXdDLEVBQ3hDLGVBQXVDO0lBTnhDLG1CQUFjLEdBQWQsY0FBYyxDQUFVO0lBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFRO0lBQ3RCLGVBQVUsR0FBVixVQUFVLENBQXVCO0lBQ2pDLFVBQUssR0FBTCxLQUFLLENBQVk7SUFDakIsVUFBSyxHQUFMLEtBQUssQ0FBWTtJQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXdCO0lBQ3hDLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtFQUN2RCxDQUFDO0VBRUcsS0FBSyxDQUFDLFdBQVc7SUFDdEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxFQUFFO01BQ2xDLElBQUksQ0FBQyxpQkFBaUI7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUk7VUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztVQUMvRCxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FB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
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzL2ZyYW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxjQUFjLEVBRWQsS0FBSyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBRUwsT0FBTyxHQUNSLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sS0FBSyxjQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sS0FBSyxXQUFXLE1BQU0sZUFBZSxDQUFDO0FBRzdDLE1BQU0sT0FBTyxLQUFLO0VBSWhCLFlBQ2tCLGNBQXdCLEVBQ3hCLGNBQXNCLEVBQ3RCLFVBQWlDLEVBQ2pDLEtBQWlCLEVBQ2pCLEtBQWlCLEVBQ2hCLGdCQUF3QyxFQUN4QyxlQUF1QztJQU54QyxtQkFBYyxHQUFkLGNBQWMsQ0FBVTtJQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBUTtJQUN0QixlQUFVLEdBQVYsVUFBVSxDQUF1QjtJQUNqQyxVQUFLLEdBQUwsS0FBSyxDQUFZO0lBQ2pCLFVBQUssR0FBTCxLQUFLLENBQVk7SUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF3QjtJQUN4QyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7RUFDdkQsQ0FBQztFQUVHLEtBQUssQ0FBQyxXQUFXO0lBQ3RCLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksRUFBRTtNQUNsQyxJQUFJLENBQUMsaUJBQWlCO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJO1VBQzNCLENBQUMsQ0FBQyxJQUFJLENB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
|
|
@@ -1,9 +1,90 @@
|
|
|
1
|
-
import { Vector3 } from '@vertexvis/geometry';
|
|
2
|
-
export function
|
|
1
|
+
import { Angle, BoundingBox, Vector3 } from '@vertexvis/geometry';
|
|
2
|
+
export function isPerspectiveFrameCamera(camera) {
|
|
3
|
+
return (camera.position != null &&
|
|
4
|
+
camera.fovHeight == null);
|
|
5
|
+
}
|
|
6
|
+
export function isOrthographicFrameCamera(camera) {
|
|
7
|
+
const asOrtho = camera;
|
|
8
|
+
return asOrtho.viewVector != null && asOrtho.fovHeight != null;
|
|
9
|
+
}
|
|
10
|
+
export function withPositionAndViewVector(camera) {
|
|
11
|
+
if (isOrthographicFrameCamera(camera)) {
|
|
12
|
+
return Object.assign(Object.assign({}, camera), { position: Vector3.add(camera.lookAt, Vector3.negate(camera.viewVector)) });
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
return Object.assign(Object.assign({}, camera), { viewVector: Vector3.subtract(camera.lookAt, camera.position) });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function createPerspective(data = {}) {
|
|
19
|
+
var _a, _b, _c, _d;
|
|
3
20
|
return {
|
|
4
|
-
position: data.position
|
|
5
|
-
lookAt: data.lookAt
|
|
6
|
-
up: data.up
|
|
21
|
+
position: (_a = data.position) !== null && _a !== void 0 ? _a : Vector3.forward(),
|
|
22
|
+
lookAt: (_b = data.lookAt) !== null && _b !== void 0 ? _b : Vector3.origin(),
|
|
23
|
+
up: (_c = data.up) !== null && _c !== void 0 ? _c : Vector3.up(),
|
|
24
|
+
fovY: (_d = data.fovY) !== null && _d !== void 0 ? _d : 45,
|
|
7
25
|
};
|
|
8
26
|
}
|
|
9
|
-
|
|
27
|
+
export function createOrthographic(data = {}) {
|
|
28
|
+
var _a, _b, _c, _d;
|
|
29
|
+
return {
|
|
30
|
+
viewVector: (_a = data.viewVector) !== null && _a !== void 0 ? _a : Vector3.back(),
|
|
31
|
+
lookAt: (_b = data.lookAt) !== null && _b !== void 0 ? _b : Vector3.origin(),
|
|
32
|
+
up: (_c = data.up) !== null && _c !== void 0 ? _c : Vector3.up(),
|
|
33
|
+
fovHeight: (_d = data.fovHeight) !== null && _d !== void 0 ? _d : 1.0,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function toOrthographic(data, boundingBox) {
|
|
37
|
+
var _a;
|
|
38
|
+
const viewVector = Vector3.subtract(data.lookAt, data.position);
|
|
39
|
+
const boundingBoxCenter = BoundingBox.center(boundingBox);
|
|
40
|
+
const centerToBoundingPlane = Vector3.subtract(boundingBox.max, boundingBoxCenter);
|
|
41
|
+
const radius = Vector3.magnitude(centerToBoundingPlane);
|
|
42
|
+
const scale = radius / Vector3.magnitude(viewVector);
|
|
43
|
+
return {
|
|
44
|
+
viewVector: Vector3.scale(scale, viewVector),
|
|
45
|
+
up: data.up,
|
|
46
|
+
lookAt: data.lookAt,
|
|
47
|
+
fovHeight: 2 *
|
|
48
|
+
Vector3.magnitude(viewVector) *
|
|
49
|
+
Math.tan(Angle.toRadians(((_a = data.fovY) !== null && _a !== void 0 ? _a : 45) / 2.0)),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function toPerspective(data, fovY = 45) {
|
|
53
|
+
const expectedMagnitude = data.fovHeight / (2 * Math.tan(Angle.toRadians(fovY / 2.0)));
|
|
54
|
+
const receivedMagnitude = Vector3.magnitude(data.viewVector);
|
|
55
|
+
const magnitudeScale = expectedMagnitude / receivedMagnitude;
|
|
56
|
+
return {
|
|
57
|
+
position: Vector3.add(data.lookAt, Vector3.negate(Vector3.scale(magnitudeScale, data.viewVector))),
|
|
58
|
+
up: data.up,
|
|
59
|
+
lookAt: data.lookAt,
|
|
60
|
+
fovY,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function toProtobuf(camera) {
|
|
64
|
+
if (isOrthographicFrameCamera(camera)) {
|
|
65
|
+
return {
|
|
66
|
+
orthographic: {
|
|
67
|
+
viewVector: Object.assign({}, camera.viewVector),
|
|
68
|
+
lookAt: Object.assign({}, camera.lookAt),
|
|
69
|
+
up: Object.assign({}, camera.up),
|
|
70
|
+
fovHeight: camera.fovHeight,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
else if (isPerspectiveFrameCamera(camera)) {
|
|
75
|
+
return {
|
|
76
|
+
perspective: {
|
|
77
|
+
position: Object.assign({}, camera.position),
|
|
78
|
+
lookAt: Object.assign({}, camera.lookAt),
|
|
79
|
+
up: Object.assign({}, camera.up),
|
|
80
|
+
},
|
|
81
|
+
position: Object.assign({}, camera.position),
|
|
82
|
+
lookAt: Object.assign({}, camera.lookAt),
|
|
83
|
+
up: Object.assign({}, camera.up),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
return Object.assign({}, camera);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWVDYW1lcmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzL2ZyYW1lQ2FtZXJhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBa0JsRSxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLE1BQTRCO0VBRTVCLE9BQU8sQ0FDSixNQUFpQyxDQUFDLFFBQVEsSUFBSSxJQUFJO0lBQ2xELE1BQWtDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FDdEQsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLE1BQTRCO0VBRTVCLE1BQU0sT0FBTyxHQUFHLE1BQWlDLENBQUM7RUFDbEQsT0FBTyxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUNqRSxDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLE1BQW1CO0VBSTNELElBQUkseUJBQXlCLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDckMsdUNBQ0ssTUFBTSxLQUNULFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFDdkU7R0FDSDtPQUFNO0lBQ0wsdUNBQ0ssTUFBTSxLQUNULFVBQVUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUM1RDtHQUNIO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsT0FBd0MsRUFBRTs7RUFFMUMsT0FBTztJQUNMLFFBQVEsRUFBRSxNQUFBLElBQUksQ0FBQyxRQUFRLG1DQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7SUFD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
|
|
@@ -69,7 +69,7 @@ export class Viewport {
|
|
|
69
69
|
return Point.scale(pt, 1 / scaleX, 1 / scaleY);
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
72
|
-
* Transforms a point in viewport coordinates to a point in world space
|
|
72
|
+
* Transforms a point in viewport coordinates to a point in perspective world space
|
|
73
73
|
* coordinates. This method expects a depth buffer in order to compute a value
|
|
74
74
|
* for the Z axis.
|
|
75
75
|
*
|
|
@@ -84,6 +84,21 @@ export class Viewport {
|
|
|
84
84
|
const ray = this.transformPointToRay(pt, depthBuffer, depthBuffer.camera);
|
|
85
85
|
return depthBuffer.getWorldPoint(depthPt, ray, fallbackNormalizedDepth);
|
|
86
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Transforms a point in viewport coordinates to a point in orthographic world space
|
|
89
|
+
* coordinates. This method expects a depth buffer in order to compute a value
|
|
90
|
+
* for the Z axis.
|
|
91
|
+
*
|
|
92
|
+
* @param pt A point in viewport coordinates.
|
|
93
|
+
* @param depthBuffer A depth buffer for computing the Z axis.
|
|
94
|
+
* @param fallbackNormalizedDepth A fallback value if the depth is the max
|
|
95
|
+
* depth value, or cannot be determined.
|
|
96
|
+
*/
|
|
97
|
+
transformPointToOrthographicWorldSpace(pt, depthBuffer, fallbackNormalizedDepth) {
|
|
98
|
+
const depthPt = this.transformPointToFrame(pt, depthBuffer);
|
|
99
|
+
const ray = this.transformPointToOrthographicRay(pt, depthBuffer, depthBuffer.camera);
|
|
100
|
+
return depthBuffer.getOrthographicWorldPoint(depthPt, ray, fallbackNormalizedDepth);
|
|
101
|
+
}
|
|
87
102
|
/**
|
|
88
103
|
* Transforms a point in viewport coordinates to a ray. The returned ray will
|
|
89
104
|
* have an origin that is at the position of the camera with a direction that
|
|
@@ -101,6 +116,23 @@ export class Viewport {
|
|
|
101
116
|
const direction = Vector3.normalize(Vector3.subtract(world, origin));
|
|
102
117
|
return Ray.create({ origin, direction });
|
|
103
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Transforms a point in viewport coordinates to a ray. The returned ray will
|
|
121
|
+
* have an origin that is at the world point of viewport coordinate with a direction that
|
|
122
|
+
* is pointing into world space away from the camera.
|
|
123
|
+
*
|
|
124
|
+
* @param pt A point in viewport coordinates.
|
|
125
|
+
* @param image An image of a frame.
|
|
126
|
+
* @param camera A camera used to determine orientation of the scene.
|
|
127
|
+
*/
|
|
128
|
+
transformPointToOrthographicRay(pt, image, camera) {
|
|
129
|
+
const ndc = this.transformScreenPointToNdc(pt, image);
|
|
130
|
+
const world = Vector3.transformNdcToWorldSpace(Vector3.create(ndc.x, ndc.y, 0.5), camera.worldMatrix, camera.projectionMatrixInverse);
|
|
131
|
+
return Ray.create({
|
|
132
|
+
origin: world,
|
|
133
|
+
direction: Vector3.normalize(camera.viewVector),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
104
136
|
/**
|
|
105
137
|
* Maps a screen point to normalized device coordinates (NDC). A screen point
|
|
106
138
|
* at 0,0 represents the top-left of the viewport.
|
|
@@ -136,4 +168,4 @@ export class Viewport {
|
|
|
136
168
|
return Dimensions.create(this.width, this.height);
|
|
137
169
|
}
|
|
138
170
|
}
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzL3ZpZXdwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBRVYsS0FBSyxFQUNMLEdBQUcsRUFDSCxTQUFTLEVBQ1QsT0FBTyxHQUNSLE1BQU0scUJBQXFCLENBQUM7QUFLN0I7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7RUFNbkI7RUFDRTs7S0FFRztFQUNhLEtBQWE7RUFFN0I7O0tBRUc7RUFDYSxNQUFjO0lBTGQsVUFBSyxHQUFMLEtBQUssQ0FBUTtJQUtiLFdBQU0sR0FBTixNQUFNLENBQVE7SUFFOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztFQUNuRCxDQUFDO0VBRUQ7Ozs7S0FJRztFQUNJLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBaUM7SUFDNUQsT0FBTyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUMzRCxDQUFDO0VBRUQ7Ozs7OztLQU1HO0VBQ0kseUJBQXlCLENBQUMsR0FBb0I7SUFDbkQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUNqQixHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUNyQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ3ZDLENBQUM7RUFDSixDQUFDO0VBRUQ7Ozs7OztLQU1HO0VBQ0ksd0JBQXdCLENBQzdCLE9BQXdCLEVBQ3hCLG9CQUFxQztJQUVyQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8s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
|
|
@@ -1,17 +1,12 @@
|
|
|
1
|
-
import { Dimensions, Point, Rectangle } from '@vertexvis/geometry';
|
|
1
|
+
import { Dimensions, Point, Rectangle, Vector3 } from '@vertexvis/geometry';
|
|
2
2
|
import { Mapper } from '@vertexvis/utils';
|
|
3
3
|
import { encode } from 'fast-png';
|
|
4
4
|
import { PointToPointHitTester } from '../components/viewer-measurement-distance/hitTest';
|
|
5
5
|
import { fromPbFrame } from '../lib/mappers';
|
|
6
|
-
import { DepthBuffer, FeatureMap, Orientation, STENCIL_BUFFER_FEATURE_VALUE, StencilBuffer, Viewport, } from '../lib/types';
|
|
7
|
-
|
|
6
|
+
import { DepthBuffer, FeatureMap, FramePerspectiveCamera, Orientation, STENCIL_BUFFER_FEATURE_VALUE, StencilBuffer, Viewport, } from '../lib/types';
|
|
7
|
+
const baseDrawFramePayload = {
|
|
8
8
|
sequenceNumber: 1,
|
|
9
9
|
sceneAttributes: {
|
|
10
|
-
camera: {
|
|
11
|
-
position: { x: 0, y: 0, z: 100 },
|
|
12
|
-
lookAt: { x: 0, y: 0, z: 0 },
|
|
13
|
-
up: { x: 0, y: 1, z: 0 },
|
|
14
|
-
},
|
|
15
10
|
visibleBoundingBox: {
|
|
16
11
|
xmin: -100,
|
|
17
12
|
ymin: -100,
|
|
@@ -34,8 +29,26 @@ export const drawFramePayload = {
|
|
|
34
29
|
image: makeImagePng(100, 50),
|
|
35
30
|
depthBuffer: { value: makeDepthImagePng(100, 50) },
|
|
36
31
|
};
|
|
37
|
-
export
|
|
38
|
-
|
|
32
|
+
export const drawFramePayloadPerspective = Object.assign(Object.assign({}, baseDrawFramePayload), { sceneAttributes: Object.assign(Object.assign({}, baseDrawFramePayload.sceneAttributes), { camera: {
|
|
33
|
+
perspective: {
|
|
34
|
+
position: { x: 0, y: 0, z: 100 },
|
|
35
|
+
lookAt: { x: 0, y: 0, z: 0 },
|
|
36
|
+
up: { x: 0, y: 1, z: 0 },
|
|
37
|
+
},
|
|
38
|
+
} }) });
|
|
39
|
+
export const drawFramePayloadOrthographic = Object.assign(Object.assign({}, baseDrawFramePayload), { sceneAttributes: Object.assign(Object.assign({}, baseDrawFramePayload.sceneAttributes), { camera: {
|
|
40
|
+
orthographic: {
|
|
41
|
+
viewVector: { x: 0, y: 0, z: -100 },
|
|
42
|
+
lookAt: { x: 0, y: 0, z: 0 },
|
|
43
|
+
up: { x: 0, y: 1, z: 0 },
|
|
44
|
+
fovHeight: 100,
|
|
45
|
+
},
|
|
46
|
+
} }) });
|
|
47
|
+
export function makePerspectiveFrame() {
|
|
48
|
+
return Mapper.ifInvalidThrow(fromPbFrame(Orientation.DEFAULT))(drawFramePayloadPerspective);
|
|
49
|
+
}
|
|
50
|
+
export function makeOrthographicFrame() {
|
|
51
|
+
return Mapper.ifInvalidThrow(fromPbFrame(Orientation.DEFAULT))(drawFramePayloadOrthographic);
|
|
39
52
|
}
|
|
40
53
|
export function makeImagePng(width, height) {
|
|
41
54
|
const data = new Uint8ClampedArray(width * height * 4);
|
|
@@ -58,8 +71,8 @@ export function makeDepthImageBytes(width, height, value = 2 ** 16 - 1) {
|
|
|
58
71
|
const data = new Uint16Array(width * height);
|
|
59
72
|
return data.fill(value);
|
|
60
73
|
}
|
|
61
|
-
export function makeDepthBuffer(width, height, value = 2 ** 16 - 1) {
|
|
62
|
-
return DepthBuffer.fromPng({ data: makeDepthImageBytes(width, height, value) },
|
|
74
|
+
export function makeDepthBuffer(width, height, value = 2 ** 16 - 1, camera) {
|
|
75
|
+
return DepthBuffer.fromPng({ data: makeDepthImageBytes(width, height, value) }, camera !== null && camera !== void 0 ? camera : makePerspectiveFrame().scene.camera, makeImageAttributes(width, height));
|
|
63
76
|
}
|
|
64
77
|
export function makeStencilImageBytes(width, height, fill) {
|
|
65
78
|
const data = new Uint8Array(width * height * 3);
|
|
@@ -103,8 +116,8 @@ export function makeImageAttributes(width, height) {
|
|
|
103
116
|
imageScale: 1,
|
|
104
117
|
};
|
|
105
118
|
}
|
|
106
|
-
export function makeHitTester({ stencilBuffer, depthBuffer, viewport, } = {}) {
|
|
107
|
-
return new PointToPointHitTester(stencilBuffer !== null && stencilBuffer !== void 0 ? stencilBuffer : makeStencilBuffer(200, 100, () => STENCIL_BUFFER_FEATURE_VALUE), depthBuffer !== null && depthBuffer !== void 0 ? depthBuffer : makeDepthBuffer(200, 100), viewport !== null && viewport !== void 0 ? viewport : new Viewport(200, 100));
|
|
119
|
+
export function makeHitTester({ stencilBuffer, depthBuffer, viewport, camera, } = {}) {
|
|
120
|
+
return new PointToPointHitTester(stencilBuffer !== null && stencilBuffer !== void 0 ? stencilBuffer : makeStencilBuffer(200, 100, () => STENCIL_BUFFER_FEATURE_VALUE), depthBuffer !== null && depthBuffer !== void 0 ? depthBuffer : makeDepthBuffer(200, 100), viewport !== null && viewport !== void 0 ? viewport : new Viewport(200, 100), camera !== null && camera !== void 0 ? camera : new FramePerspectiveCamera(Vector3.forward(), Vector3.origin(), Vector3.up(), 0, 100, 1, 45));
|
|
108
121
|
}
|
|
109
122
|
export function makeRaycaster() {
|
|
110
123
|
return { hitItems: jest.fn().mockResolvedValue({ hits: [] }) };
|
|
@@ -117,4 +130,4 @@ export function makeHitProvider({ hitTester, raycaster, }) {
|
|
|
117
130
|
raycaster: async () => raycaster !== null && raycaster !== void 0 ? raycaster : defaultRaycaster,
|
|
118
131
|
};
|
|
119
132
|
}
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9maXh0dXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFNUUsT0FBTyxFQUFTLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFbEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFMUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsVUFBVSxFQUdWLHNCQUFzQixFQUV0QixXQUFXLEVBQ1gsNEJBQTRCLEVBQzVCLGFBQWEsRUFDYixRQUFRLEdBQ1QsTUFBTSxjQUFjLENBQUM7QUFFdEIsTUFBTSxvQkFBb0IsR0FBOEI7RUFDdEQsY0FBYyxFQUFFLENBQUM7RUFDakIsZUFBZSxFQUFFO0lBQ2Ysa0JBQWtCLEVBQUU7TUFDbEIsSUFBSSxFQUFFLENBQUMsR0FBRztNQUNWLElBQUksRUFBRSxDQUFDLEdBQUc7TUFDVixJQUFJLEVBQUUsQ0FBQyxHQUFHO01BQ1YsSUFBSSxFQUFFLEdBQUc7TUFDVCxJQUFJLEVBQUUsR0FBRztNQUNULElBQUksRUFBRSxHQUFHO0tBQ1Y7SUFDRCxlQUFlLEVBQUU7TUFDZixhQUFhLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQzdEO0lBQ0QsVUFBVSxFQUFFLEtBQUs7R0FDbEI7RUFDRCxlQUFlLEVBQUU7SUFDZixlQUFlLEVBQUUsRUFBRSxL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
|
|
@@ -27,12 +27,14 @@ export async function loadViewerStreamKey(urn, { viewer, stream, ws }, { token =
|
|
|
27
27
|
// Emit frame drawn on next event loop
|
|
28
28
|
await connecting;
|
|
29
29
|
await Async.delay(10);
|
|
30
|
-
ws.receiveMessage(encode(StreamFixtures.Requests.drawFrame({
|
|
30
|
+
ws.receiveMessage(encode(StreamFixtures.Requests.drawFrame({
|
|
31
|
+
payload: Fixtures.drawFramePayloadPerspective,
|
|
32
|
+
})));
|
|
31
33
|
await loaded;
|
|
32
34
|
}
|
|
33
35
|
export function receiveFrame(ws, transformPayload) {
|
|
34
36
|
ws.receiveMessage(encode(StreamFixtures.Requests.drawFrame({
|
|
35
|
-
payload: transformPayload === null || transformPayload === void 0 ? void 0 : transformPayload(Fixtures.
|
|
37
|
+
payload: transformPayload === null || transformPayload === void 0 ? void 0 : transformPayload(Fixtures.drawFramePayloadPerspective),
|
|
36
38
|
})));
|
|
37
39
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Rpbmcvdmlld2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxNQUFNLEVBQ04sUUFBUSxJQUFJLGNBQWMsRUFDMUIsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXpDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssUUFBUSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBWWxDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyw4QkFBOEIsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsOEJBQThCLENBQUM7QUFFbkQsTUFBTSxVQUFVLGdCQUFnQjtFQUk5QixNQUFNLEVBQUUsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7RUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsR0FBVyxFQUNYLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQTBCLEVBQzlDLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBaUMsRUFBRTtFQUUzRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxpQkFBaUIsQ0FDakQsY0FBYyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7SUFDbkMsTUFBTSxFQUFFO01BQ04sS0FBSyxFQUFFO1FBQ0wsS0FBSyxFQUFFLEtBQUs7UUFDWixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxLQUFLO09BQ3hDO0tBQ0Y7R0FDRixDQUFDLENBQUMsUUFBUSxDQUNaLENBQUM7RUFDRixJQUFJO0tBQ0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUM7S0FDekIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUVuRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FDN0MsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUMvQixDQUFDO0VBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUVoQyxzQ0FBc0M7RUFDdEMsTUFBTSxVQUFVLENBQUM7RUFDakIsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3RCLEVBQUUsQ0FBQyxjQUFjLENBQ2YsTUFBTSxDQUNKLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQ2hDLE9BQU8sRUFBRSxRQUFRLENBQUMsMkJBQTJCO0dBQzlDLENBQUMsQ0FDSCxDQUNGLENBQUM7RUFDRixNQUFNLE1BQU0sQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixFQUF1QixFQUN2QixnQkFFZ0Q7RUFFaEQsRUFBRSxDQUFDLGNBQWMsQ0FDZixNQUFNLENBQ0osY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDaEMsT0FBTyxFQUFFLGdCQUFnQixhQUFoQixnQkFBZ0IsdUJBQWhCLGdCQUFnQixDQUFHLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQztHQUNsRSxDQUFDLENBQ0gsQ0FDRixDQUFDO0FBQ0osQ0FBQyJ9
|