@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.
Files changed (177) hide show
  1. package/dist/cjs/{browser.esm-31b03292.js → browser.esm-075810bf.js} +1 -1
  2. package/dist/cjs/{bundle.esm-dc0a8361.js → bundle.esm-618a5fe9.js} +80 -28
  3. package/dist/cjs/{config-90ee43d5.js → config-fb124bac.js} +2 -2
  4. package/dist/cjs/{cursors-ad2fd395.js → cursors-d71f6a74.js} +1 -1
  5. package/dist/cjs/{dom-dd265f48.js → dom-57ef84e9.js} +1 -1
  6. package/dist/cjs/{entities-aa59890e.js → entities-90f1347a.js} +3 -3
  7. package/dist/cjs/index.cjs.js +14 -12
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/cjs/{mapper-f6e6cafe.js → mapper-80ee2957.js} +2 -2
  10. package/dist/cjs/{markup-fb1553b1.js → markup-7f7de5f2.js} +2 -2
  11. package/dist/cjs/{measurement-aba1e0e8.js → measurement-f1ae9248.js} +2 -2
  12. package/dist/cjs/{model-4ec0c36e.js → model-55abd9ab.js} +1 -1
  13. package/dist/cjs/{overlays-40c6cbc7.js → overlays-68e8eff2.js} +2 -2
  14. package/dist/cjs/{png-decoder-27d25eed.js → png-decoder-076131d8.js} +1 -1
  15. package/dist/cjs/{results-bc325974.js → results-e9496869.js} +1 -1
  16. package/dist/cjs/{scene-d420fd26.js → scene-92728420.js} +188 -90
  17. package/dist/cjs/{streamAttributes-d6236448.js → streamAttributes-81eb52f2.js} +1508 -43
  18. package/dist/cjs/{utils-545b1865.js → utils-463cd52e.js} +1 -1
  19. package/dist/cjs/{utils-f80be307.js → utils-6397efca.js} +1 -1
  20. package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js +1 -1
  21. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
  22. package/dist/cjs/vertex-scene-tree.cjs.entry.js +4 -4
  23. package/dist/cjs/vertex-viewer-dom-element_3.cjs.entry.js +8 -7
  24. package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js +3 -3
  25. package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js +4 -4
  26. package/dist/cjs/vertex-viewer-markup.cjs.entry.js +4 -4
  27. package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +3 -3
  28. package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +20 -15
  29. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +6 -6
  30. package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +10 -10
  31. package/dist/cjs/vertex-viewer-measurement-tool.cjs.entry.js +5 -5
  32. package/dist/cjs/vertex-viewer-measurements.cjs.entry.js +8 -8
  33. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +3 -3
  34. package/dist/cjs/vertex-viewer.cjs.entry.js +287 -80
  35. package/dist/cjs/viewer.cjs.js +1 -1
  36. package/dist/cjs/{viewport-8c39089f.js → viewport-54b1389d.js} +34 -2
  37. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.css +1 -1
  38. package/dist/collection/components/viewer/viewer.js +68 -4
  39. package/dist/collection/components/viewer-dom-renderer/renderer2d.js +1 -1
  40. package/dist/collection/components/viewer-dom-renderer/renderer3d.js +4 -2
  41. package/dist/collection/components/viewer-dom-renderer/viewer-dom-renderer.js +5 -6
  42. package/dist/collection/components/viewer-measurement-distance/hitTest.js +9 -4
  43. package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js +5 -5
  44. package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js +3 -3
  45. package/dist/collection/index.js +2 -2
  46. package/dist/collection/lib/errors.js +8 -1
  47. package/dist/collection/lib/interactions/index.js +3 -1
  48. package/dist/collection/lib/interactions/interactionApi.js +4 -25
  49. package/dist/collection/lib/interactions/interactionApiOrthographic.js +136 -0
  50. package/dist/collection/lib/interactions/interactionApiPerspective.js +51 -0
  51. package/dist/collection/lib/interactions/multiTouchInteractionHandler.js +3 -2
  52. package/dist/collection/lib/mappers/frameStreaming.js +27 -5
  53. package/dist/collection/lib/rendering/matrices.js +13 -4
  54. package/dist/collection/lib/rendering/vectors.js +7 -0
  55. package/dist/collection/lib/scenes/__mocks__/mocks.js +2 -2
  56. package/dist/collection/lib/scenes/camera.js +163 -83
  57. package/dist/collection/lib/scenes/mapper.js +3 -2
  58. package/dist/collection/lib/scenes/scene.js +22 -9
  59. package/dist/collection/lib/types/clippingPlanes.js +48 -20
  60. package/dist/collection/lib/types/depthBuffer.js +32 -3
  61. package/dist/collection/lib/types/frame.js +133 -24
  62. package/dist/collection/lib/types/frameCamera.js +87 -6
  63. package/dist/collection/lib/types/viewport.js +34 -2
  64. package/dist/collection/testing/fixtures.js +28 -15
  65. package/dist/collection/testing/viewer.js +5 -3
  66. package/dist/custom-elements/index.js +2135 -283
  67. package/dist/esm/{browser.esm-59e914f6.js → browser.esm-e72d80ad.js} +1 -1
  68. package/dist/esm/{bundle.esm-d899b2d5.js → bundle.esm-8ceccb91.js} +80 -29
  69. package/dist/esm/{config-604c644e.js → config-fb7cd8ff.js} +2 -2
  70. package/dist/esm/{cursors-a7ec4adb.js → cursors-fc2deed7.js} +1 -1
  71. package/dist/esm/{dom-780d25be.js → dom-2cd18856.js} +1 -1
  72. package/dist/esm/{entities-759d97cd.js → entities-78557270.js} +3 -3
  73. package/dist/esm/index.js +12 -12
  74. package/dist/esm/index.mjs +12 -12
  75. package/dist/esm/loader.js +1 -1
  76. package/dist/esm/loader.mjs +1 -1
  77. package/dist/esm/{mapper-4b815e31.js → mapper-da36de17.js} +2 -2
  78. package/dist/esm/{markup-1d177b4a.js → markup-c313d99c.js} +2 -2
  79. package/dist/esm/{measurement-12cdbf5c.js → measurement-544b69d5.js} +2 -2
  80. package/dist/esm/{model-e5a4f00f.js → model-2a34b443.js} +1 -1
  81. package/dist/esm/{overlays-1919b192.js → overlays-354e275c.js} +2 -2
  82. package/dist/esm/{png-decoder-3f1fa486.js → png-decoder-07de80d1.js} +1 -1
  83. package/dist/esm/{results-994bdb50.js → results-4d0c3568.js} +1 -1
  84. package/dist/esm/{scene-2c2460d5.js → scene-2bfcce74.js} +188 -90
  85. package/dist/esm/{streamAttributes-d623bb60.js → streamAttributes-d0b384b3.js} +1502 -44
  86. package/dist/esm/{utils-83a19677.js → utils-3ea0acdd.js} +1 -1
  87. package/dist/esm/{utils-5e57bf24.js → utils-e0941c61.js} +1 -1
  88. package/dist/esm/vertex-scene-tree-search_3.entry.js +1 -1
  89. package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
  90. package/dist/esm/vertex-scene-tree.entry.js +4 -4
  91. package/dist/esm/vertex-viewer-dom-element_3.entry.js +8 -7
  92. package/dist/esm/vertex-viewer-markup-arrow_3.entry.js +3 -3
  93. package/dist/esm/vertex-viewer-markup-tool.entry.js +4 -4
  94. package/dist/esm/vertex-viewer-markup.entry.js +4 -4
  95. package/dist/esm/vertex-viewer-measurement-details.entry.js +3 -3
  96. package/dist/esm/vertex-viewer-measurement-distance.entry.js +20 -15
  97. package/dist/esm/vertex-viewer-measurement-line_2.entry.js +6 -6
  98. package/dist/esm/vertex-viewer-measurement-precise.entry.js +10 -10
  99. package/dist/esm/vertex-viewer-measurement-tool.entry.js +5 -5
  100. package/dist/esm/vertex-viewer-measurements.entry.js +8 -8
  101. package/dist/esm/vertex-viewer-view-cube.entry.js +3 -3
  102. package/dist/esm/vertex-viewer.entry.js +287 -80
  103. package/dist/esm/viewer.js +1 -1
  104. package/dist/esm/{viewport-01c886ea.js → viewport-5cc7b128.js} +34 -2
  105. package/dist/types/components/scene-tree-table-cell/scene-tree-table-cell.d.ts +1 -1
  106. package/dist/types/components/viewer/viewer.d.ts +8 -0
  107. package/dist/types/components/viewer-dom-renderer/renderer2d.d.ts +2 -2
  108. package/dist/types/components/viewer-dom-renderer/renderer3d.d.ts +3 -3
  109. package/dist/types/components/viewer-dom-renderer/viewer-dom-renderer.d.ts +2 -2
  110. package/dist/types/components/viewer-measurement-distance/hitTest.d.ts +3 -2
  111. package/dist/types/components/viewer-measurement-distance/utils.d.ts +2 -2
  112. package/dist/types/components/viewer-measurement-distance/viewer-measurement-distance.d.ts +2 -2
  113. package/dist/types/components/viewer-measurement-overlays/viewer-measurement-overlays-components.d.ts +2 -2
  114. package/dist/types/components/viewer-measurement-overlays/viewer-measurement-overlays.d.ts +2 -2
  115. package/dist/types/components.d.ts +15 -7
  116. package/dist/types/index.d.ts +1 -1
  117. package/dist/types/lib/errors.d.ts +3 -0
  118. package/dist/types/lib/interactions/index.d.ts +2 -0
  119. package/dist/types/lib/interactions/interactionApi.d.ts +34 -26
  120. package/dist/types/lib/interactions/interactionApiOrthographic.d.ts +35 -0
  121. package/dist/types/lib/interactions/interactionApiPerspective.d.ts +21 -0
  122. package/dist/types/lib/mappers/frameStreaming.d.ts +2 -0
  123. package/dist/types/lib/rendering/vectors.d.ts +2 -0
  124. package/dist/types/lib/scenes/__mocks__/mocks.d.ts +2 -2
  125. package/dist/types/lib/scenes/camera.d.ts +101 -38
  126. package/dist/types/lib/scenes/scene.d.ts +1 -1
  127. package/dist/types/lib/types/clippingPlanes.d.ts +3 -1
  128. package/dist/types/lib/types/depthBuffer.d.ts +28 -6
  129. package/dist/types/lib/types/frame.d.ts +80 -11
  130. package/dist/types/lib/types/frameCamera.d.ts +22 -3
  131. package/dist/types/lib/types/viewport.d.ts +24 -4
  132. package/dist/types/testing/fixtures.d.ts +8 -5
  133. package/dist/viewer/index.esm.js +1 -1
  134. package/dist/viewer/{p-f8d01b8a.entry.js → p-0a189e62.entry.js} +1 -1
  135. package/dist/viewer/{p-e07377fa.entry.js → p-1ca95f9a.entry.js} +1 -1
  136. package/dist/viewer/{p-d00e9203.js → p-3561d910.js} +1 -1
  137. package/dist/viewer/p-388a43f7.js +4 -0
  138. package/dist/viewer/{p-3810c24d.js → p-3f0f83ad.js} +1 -1
  139. package/dist/viewer/{p-8decee06.entry.js → p-41028d3b.entry.js} +1 -1
  140. package/dist/viewer/{p-439220c6.js → p-487e054a.js} +1 -1
  141. package/dist/viewer/p-49d36e94.entry.js +4 -0
  142. package/dist/viewer/{p-da2f4a56.js → p-5b342e97.js} +1 -1
  143. package/dist/viewer/p-661f0612.js +18 -0
  144. package/dist/viewer/{p-364ce21c.js → p-69058178.js} +1 -1
  145. package/dist/viewer/{p-353cfc7a.entry.js → p-73a5eacc.entry.js} +1 -1
  146. package/dist/viewer/p-77be081a.js +4 -0
  147. package/dist/viewer/{p-a0df0e0c.js → p-809d09d9.js} +1 -1
  148. package/dist/viewer/{p-d90f2f6d.entry.js → p-858bd2c7.entry.js} +1 -1
  149. package/dist/viewer/{p-25eaab00.entry.js → p-89b66838.entry.js} +1 -1
  150. package/dist/viewer/p-a93a63a9.js +4 -0
  151. package/dist/viewer/{p-df292b56.entry.js → p-b043b076.entry.js} +1 -1
  152. package/dist/viewer/{p-915d95ad.entry.js → p-b0ac6b3c.entry.js} +1 -1
  153. package/dist/viewer/{p-fec1a8d0.entry.js → p-b7624ff2.entry.js} +1 -1
  154. package/dist/viewer/{p-f7cb7e59.js → p-b8774c9c.js} +1 -1
  155. package/dist/viewer/{p-67446e35.js → p-bcb66f97.js} +1 -1
  156. package/dist/viewer/p-bcde5521.entry.js +4 -0
  157. package/dist/viewer/{p-7cad9bf4.js → p-d1584404.js} +1 -1
  158. package/dist/viewer/p-d32b54cb.js +4 -0
  159. package/dist/viewer/{p-f755af5a.entry.js → p-d3a20af4.entry.js} +1 -1
  160. package/dist/viewer/{p-c62cb926.entry.js → p-d9f99f4d.entry.js} +1 -1
  161. package/dist/viewer/p-e38458da.js +4 -0
  162. package/dist/viewer/{p-301660cf.js → p-e75bba97.js} +2 -2
  163. package/dist/viewer/{p-6e80f8b0.entry.js → p-ebd55df7.entry.js} +1 -1
  164. package/dist/viewer/{p-671c113c.entry.js → p-f0411993.entry.js} +1 -1
  165. package/dist/viewer/{p-2cefb1b0.js → p-fa9a0bed.js} +1 -1
  166. package/dist/viewer/p-ffdeb08c.js +4 -0
  167. package/dist/viewer/viewer.esm.js +1 -1
  168. package/package.json +8 -8
  169. package/dist/viewer/p-081e6873.js +0 -4
  170. package/dist/viewer/p-085e908a.js +0 -4
  171. package/dist/viewer/p-0aba71fd.js +0 -18
  172. package/dist/viewer/p-3f6ac74f.js +0 -4
  173. package/dist/viewer/p-423410be.js +0 -4
  174. package/dist/viewer/p-432267bc.entry.js +0 -4
  175. package/dist/viewer/p-4985fad5.js +0 -4
  176. package/dist/viewer/p-e2297df2.entry.js +0 -4
  177. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwdGhCdWZmZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzL2RlcHRoQnVmZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVTlDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7RUFPdEI7Ozs7OztLQU1HO0VBQ0gsWUFDa0IsTUFBOEIsRUFDOUIsU0FBOEIsRUFDOUIsTUFBbUI7SUFGbkIsV0FBTSxHQUFOLE1BQU0sQ0FBd0I7SUFDOUIsY0FBUyxHQUFULFNBQVMsQ0FBcUI7SUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBYTtFQUNsQyxDQUFDO0VBRUo7Ozs7Ozs7O0tBUUc7RUFDSSxNQUFNLENBQUMsT0FBTyxDQUNuQixHQUE2QixFQUM3QixNQUE4QixFQUM5QixTQUE4QjtJQUU5QixJQUFJLEdBQUcsQ0FBQyxJQUFJLFlBQVksV0FBVyxFQUFFO01BQ25DLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDckQ7U0FBTTtNQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztLQUMvRDtFQUNILENBQUM7RUFFRDs7Ozs7Ozs7O0tBU0c7RUFDSSxxQkFBcUIsQ0FDMUIsS0FBa0IsRUFDbEIsdUJBQWdDO0lBRWhDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQzFDLEtBQUssRUFDTCx1QkFBdUIsQ0FDeEIsQ0FBQztJQUNGLE9BQU8sS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFH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
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 FramePerspectiveCamera {
59
- constructor(position, lookAt, up, near, far, aspectRatio, fovY) {
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
- computeCameraMatrices() {
94
- if (this.cameraMatrices == null) {
95
- const viewMatrix = Matrix4.makeLookAtView(this.position, this.lookAt, this.up);
96
- const worldMatrix = Matrix4.invert(viewMatrix);
97
- const projectionMatrix = Matrix4.makePerspective(this.near, this.far, this.fovY, this.aspectRatio);
98
- const projectionMatrixInverse = Matrix4.invert(projectionMatrix);
99
- const projectionViewMatrix = Matrix4.multiply(projectionMatrix, viewMatrix);
100
- this.cameraMatrices = {
101
- viewMatrix,
102
- worldMatrix,
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
- return this.cameraMatrices;
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 create(data = {}) {
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 || Vector3.origin(),
5
- lookAt: data.lookAt || Vector3.origin(),
6
- up: data.up || Vector3.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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWVDYW1lcmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzL2ZyYW1lQ2FtZXJhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVE5QyxNQUFNLFVBQVUsTUFBTSxDQUFDLE9BQTZCLEVBQUU7RUFDcEQsT0FBTztJQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7SUFDM0MsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtJQUN2QyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0dBQzVCLENBQUM7QUFDSixDQUFDIn0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzL3ZpZXdwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBRVYsS0FBSyxFQUNMLEdBQUcsRUFDSCxTQUFTLEVBQ1QsT0FBTyxHQUNSLE1BQU0scUJBQXFCLENBQUM7QUFNN0I7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7RUFNbkI7RUFDRTs7S0FFRztFQUNhLEtBQWE7RUFFN0I7O0tBRUc7RUFDYSxNQUFjO0lBTGQsVUFBSyxHQUFMLEtBQUssQ0FBUTtJQUtiLFdBQU0sR0FBTixNQUFNLENBQVE7SUFFOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztFQUNuRCxDQUFDO0VBRUQ7Ozs7S0FJRztFQUNJLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBaUM7SUFDNUQsT0FBTyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUMzRCxDQUFDO0VBRUQ7Ozs7OztLQU1HO0VBQ0kseUJBQXlCLENBQUMsR0FBb0I7SUFDbkQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUNqQixHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUNyQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ3ZDLENBQUM7RUFDSixDQUFDO0VBRUQ7Ozs7OztLQU1HO0VBQ0ksd0JBQXdCLENBQzdCLE9BQXdCLEVBQ3hCLG9CQUFxQztJQUVyQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8s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
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzL3ZpZXdwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBRVYsS0FBSyxFQUNMLEdBQUcsRUFDSCxTQUFTLEVBQ1QsT0FBTyxHQUNSLE1BQU0scUJBQXFCLENBQUM7QUFLN0I7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7RUFNbkI7RUFDRTs7S0FFRztFQUNhLEtBQWE7RUFFN0I7O0tBRUc7RUFDYSxNQUFjO0lBTGQsVUFBSyxHQUFMLEtBQUssQ0FBUTtJQUtiLFdBQU0sR0FBTixNQUFNLENBQVE7SUFFOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztFQUNuRCxDQUFDO0VBRUQ7Ozs7S0FJRztFQUNJLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBaUM7SUFDNUQsT0FBTyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUMzRCxDQUFDO0VBRUQ7Ozs7OztLQU1HO0VBQ0kseUJBQXlCLENBQUMsR0FBb0I7SUFDbkQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUNqQixHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUNyQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ3ZDLENBQUM7RUFDSixDQUFDO0VBRUQ7Ozs7OztLQU1HO0VBQ0ksd0JBQXdCLENBQzdCLE9BQXdCLEVBQ3hCLG9CQUFxQztJQUVyQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ25FLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzdDLENBQUM7RUFFTSx3QkFBd0IsQ0FDN0IsRUFBZSxFQUNmLEtBQXFCO0lBRXJCLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztFQUNqRCxDQUFDO0VBRUQ7Ozs7Ozs7S0FPRztFQUNJLHFCQUFxQixDQUMxQixFQUFlLEVBQ2YsS0FBcUI7SUFFckIsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0VBQ2pELENBQUM7RUFFRDs7Ozs7Ozs7OztLQVVHO0VBQ0ksMEJBQTBCLENBQy9CLEVBQWUsRUFDZixXQUF3QixFQUN4Qix1QkFBZ0M7SUFFaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUUsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztFQUMxRSxDQUFDO0VBRUQ7Ozs7Ozs7OztLQVNHO0VBQ0ksc0NBQXNDLENBQzNDLEVBQWUsRUFDZixXQUF3QixFQUN4Qix1QkFBZ0M7SUFFaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQzlDLEVBQUUsRUFDRixXQUFXLEVBQ1gsV0FBVyxDQUFDLE1BQU0sQ0FDbkIsQ0FBQztJQUNGLE9BQU8sV0FBVyxDQUFDLHlCQUF5QixDQUMxQyxPQUFPLEVBQ1AsR0FBRyxFQUNILHVCQUF1QixDQUN4QixDQUFDO0VBQ0osQ0FBQztFQUVEOzs7Ozs7Ozs7S0FTRztFQUNJLG1CQUFtQixDQUN4QixFQUFlLEVBQ2YsS0FBcUIsRUFDckIsTUFBK0I7SUFFL0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FDNUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQ2pDLE1BQU0sQ0FBQyxXQUFXLEVBQ2xCLE1BQU0sQ0FBQyx1QkFBdUIsQ0FDL0IsQ0FBQztJQUNGLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztFQUMzQyxDQUFDO0VBRUQ7Ozs7Ozs7O0tBUUc7RUFDSSwrQkFBK0IsQ0FDcEMsRUFBZSxFQUNmLEtBQXFCLEVBQ3JCLE1BQStCO0lBRS9CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUM1QyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFDakMsTUFBTSxDQUFDLFdBQVcsRUFDbEIsTUFBTSxDQUFDLHVCQUF1QixDQUMvQixDQUFDO0lBQ0YsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDO01BQ2hCLE1BQU0sRUFBRSxLQUFLO01BQ2IsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztLQUNoRCxDQUFDLENBQUM7RUFDTCxDQUFDO0VBRUQ7Ozs7O0tBS0c7RUFDSSx5QkFBeUIsQ0FDOUIsUUFBcUIsRUFDckIsS0FBcUI7SUFFckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1RCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQ2pCLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUMzRCxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUM5RCxDQUFDO0VBQ0osQ0FBQztFQUVEOzs7Ozs7O0tBT0c7RUFDSSxpQkFBaUIsQ0FBQyxLQUFxQjtJQUM1QyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7RUFDcEUsQ0FBQztFQUVPLG1CQUFtQixDQUFDLEtBQXFCO0lBQy9DLE1BQU0sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUV4RCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNELE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXRELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFFN0MsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztFQUN0QyxDQUFDO0VBRUQsSUFBVyxVQUFVO0lBQ25CLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUNwRCxDQUFDO0NBQ0YifQ==
@@ -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
- export const drawFramePayload = {
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 function makeFrame() {
38
- return Mapper.ifInvalidThrow(fromPbFrame(Orientation.DEFAULT))(drawFramePayload);
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) }, makeFrame().scene.camera, makeImageAttributes(width, height));
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9maXh0dXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRSxPQUFPLEVBQVMsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUUxRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUNMLFdBQVcsRUFDWCxVQUFVLEVBR1YsV0FBVyxFQUNYLDRCQUE0QixFQUM1QixhQUFhLEVBQ2IsUUFBUSxHQUNULE1BQU0sY0FBYyxDQUFDO0FBRXRCLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQjtFQUNoRCxjQUFjLEVBQUUsQ0FBQztFQUNqQixlQUFlLEVBQUU7SUFDZixNQUFNLEVBQUU7TUFDTixRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtNQUNoQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtNQUM1QixFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtLQUN6QjtJQUNELGtCQUFrQixFQUFFO01BQ2xCLElBQUksRUFBRSxDQUFDLEdBQUc7TUFDVixJQUFJLEVBQUUsQ0FBQyxHQUFHO01BQ1YsSUFBSSxFQUFFLENBQUMsR0FBRztNQUNWLElBQUksRUFBRSxHQUFHO01BQ1QsSUFB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
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({ payload: Fixtures.drawFramePayload })));
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.drawFramePayload),
37
+ payload: transformPayload === null || transformPayload === void 0 ? void 0 : transformPayload(Fixtures.drawFramePayloadPerspective),
36
38
  })));
37
39
  }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Rpbmcvdmlld2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxNQUFNLEVBQ04sUUFBUSxJQUFJLGNBQWMsRUFDMUIsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXpDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssUUFBUSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBWWxDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyw4QkFBOEIsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsOEJBQThCLENBQUM7QUFFbkQsTUFBTSxVQUFVLGdCQUFnQjtFQUk5QixNQUFNLEVBQUUsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7RUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsR0FBVyxFQUNYLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQTBCLEVBQzlDLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBaUMsRUFBRTtFQUUzRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxpQkFBaUIsQ0FDakQsY0FBYyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7SUFDbkMsTUFBTSxFQUFFO01BQ04sS0FBSyxFQUFFO1FBQ0wsS0FBSyxFQUFFLEtBQUs7UUFDWixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxLQUFLO09BQ3hDO0tBQ0Y7R0FDRixDQUFDLENBQUMsUUFBUSxDQUNaLENBQUM7RUFDRixJQUFJO0tBQ0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUM7S0FDekIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUVuRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FDN0MsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUMvQixDQUFDO0VBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUVoQyxzQ0FBc0M7RUFDdEMsTUFBTSxVQUFVLENBQUM7RUFDakIsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3RCLEVBQUUsQ0FBQyxjQUFjLENBQ2YsTUFBTSxDQUNKLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQzFFLENBQ0YsQ0FBQztFQUNGLE1BQU0sTUFBTSxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQzFCLEVBQXVCLEVBQ3ZCLGdCQUVnRDtFQUVoRCxFQUFFLENBQUMsY0FBYyxDQUNmLE1BQU0sQ0FDSixjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUNoQyxPQUFPLEVBQUUsZ0JBQWdCLGFBQWhCLGdCQUFnQix1QkFBaEIsZ0JBQWdCLENBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO0dBQ3ZELENBQUMsQ0FDSCxDQUNGLENBQUM7QUFDSixDQUFDIn0=
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Rpbmcvdmlld2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxNQUFNLEVBQ04sUUFBUSxJQUFJLGNBQWMsRUFDMUIsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXpDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssUUFBUSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBWWxDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyw4QkFBOEIsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsOEJBQThCLENBQUM7QUFFbkQsTUFBTSxVQUFVLGdCQUFnQjtFQUk5QixNQUFNLEVBQUUsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7RUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsR0FBVyxFQUNYLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQTBCLEVBQzlDLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBaUMsRUFBRTtFQUUzRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxpQkFBaUIsQ0FDakQsY0FBYyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7SUFDbkMsTUFBTSxFQUFFO01BQ04sS0FBSyxFQUFFO1FBQ0wsS0FBSyxFQUFFLEtBQUs7UUFDWixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxLQUFLO09BQ3hDO0tBQ0Y7R0FDRixDQUFDLENBQUMsUUFBUSxDQUNaLENBQUM7RUFDRixJQUFJO0tBQ0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUM7S0FDekIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUVuRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FDN0MsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUMvQixDQUFDO0VBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUVoQyxzQ0FBc0M7RUFDdEMsTUFBTSxVQUFVLENBQUM7RUFDakIsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3RCLEVBQUUsQ0FBQyxjQUFjLENBQ2YsTUFBTSxDQUNKLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQ2hDLE9BQU8sRUFBRSxRQUFRLENBQUMsMkJBQTJCO0dBQzlDLENBQUMsQ0FDSCxDQUNGLENBQUM7RUFDRixNQUFNLE1BQU0sQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixFQUF1QixFQUN2QixnQkFFZ0Q7RUFFaEQsRUFBRSxDQUFDLGNBQWMsQ0FDZixNQUFNLENBQ0osY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDaEMsT0FBTyxFQUFFLGdCQUFnQixhQUFoQixnQkFBZ0IsdUJBQWhCLGdCQUFnQixDQUFHLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQztHQUNsRSxDQUFDLENBQ0gsQ0FDRixDQUFDO0FBQ0osQ0FBQyJ9