@flighthq/camera 0.5.1-next.1052.ea38f97 → 0.5.1-next.1058.751c53a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,5 +13,5 @@ Import the supported application-facing API from `@flighthq/camera`. The `@fligh
13
13
  This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
14
14
 
15
15
  - [Flight project](https://github.com/flighthq/flight)
16
- - [Source for @flighthq/camera@0.5.1-next.1052.ea38f97](https://github.com/flighthq/flight/tree/ea38f9774bbb5b1696c25c9ba02dfae381db021d/packages/camera)
17
- - [License](https://github.com/flighthq/flight/blob/ea38f9774bbb5b1696c25c9ba02dfae381db021d/LICENSE.md)
16
+ - [Source for @flighthq/camera@0.5.1-next.1058.751c53a](https://github.com/flighthq/flight/tree/751c53a7765e345d4c3e29d3a6089601b35c2bad/packages/camera)
17
+ - [License](https://github.com/flighthq/flight/blob/751c53a7765e345d4c3e29d3a6089601b35c2bad/LICENSE.md)
@@ -1 +1 @@
1
- {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIxH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ,CAIxE;AASD,wBAAgB,uCAAuC,CACrD,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAGT;AAQD,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAInH;AAQD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,IAAI,CAO3G;AAQD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAOxE;AAID,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAG9E;AAMD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAE/F;AAOD,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,QAAQ,EAChB,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC1B,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC7B,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,GACxB,IAAI,CAEN;AAeD,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAGrG;AAMD,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAIvG"}
1
+ {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAKxH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ,CAIxE;AASD,wBAAgB,uCAAuC,CACrD,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAGT;AAQD,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAKnH;AAQD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,IAAI,CAQ3G;AAQD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQxE;AAID,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAG9E;AAMD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAE/F;AAOD,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,QAAQ,EAChB,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC1B,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC7B,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,GACxB,IAAI,CAEN;AAeD,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAGrG;AAMD,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAIvG"}
package/dist/camera.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { allocateEntity, finishEntity } from '@flighthq/entity/contract';
2
2
  import { createMatrix4, createVector2, inverseMatrix4, multiplyMatrix4, setMatrix4LookAt, } from '@flighthq/geometry/contract';
3
3
  import { setProjectionMatrix4 } from './projection';
4
+ import { applyObliqueNearClipPlane } from './reflection';
4
5
  export function createCamera3D(opts) {
5
6
  const out = allocateEntity();
6
7
  initializeCamera3D(out, opts);
@@ -26,6 +27,8 @@ export function getCamera3DInverseViewProjectionMatrix4(out, camera, aspect) {
26
27
  export function getCamera3DViewProjectionMatrix4(out, camera, aspect) {
27
28
  setProjectionMatrix4(__scratchProjection, camera.projection, aspect, camera.near, camera.far);
28
29
  applyCamera3DProjectionJitter(__scratchProjection, camera.jitter.x, camera.jitter.y);
30
+ if (camera.nearClipPlane)
31
+ applyObliqueNearClipPlane(__scratchProjection, camera.nearClipPlane);
29
32
  multiplyMatrix4(out, __scratchProjection, camera.view);
30
33
  }
31
34
  // Allocates a 3D camera. The camera stores its projection descriptor, a world->view Matrix4
@@ -39,6 +42,7 @@ export function initializeCamera3D(out, opts) {
39
42
  out.inverseViewProjection = createMatrix4();
40
43
  out.jitter = createVector2(0, 0);
41
44
  out.near = opts.near;
45
+ out.nearClipPlane = opts.nearClipPlane ?? null;
42
46
  out.projection = opts.projection;
43
47
  out.view = createMatrix4();
44
48
  }
@@ -54,6 +58,8 @@ export function setCamera3DAspect(camera, aspect) {
54
58
  projection.aspect = aspect;
55
59
  return;
56
60
  }
61
+ if (projection.kind === 'raw')
62
+ return;
57
63
  projection.halfWidth = projection.halfHeight * aspect;
58
64
  }
59
65
  // Sets the camera's per-frame sub-pixel jitter offset (in NDC), in place. Every view-projection
@@ -1 +1 @@
1
- {"version":3,"file":"camera.js","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"camera.js","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"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"}
@@ -18,5 +18,5 @@ export * from './viewMatrix';
18
18
  export * from './visibleBounds';
19
19
  export * from './zoom';
20
20
  export { initializeCamera3D } from './camera';
21
- export { initializeOrthographicProjection, initializePerspectiveProjection } from './projection';
21
+ export { initializeOrthographicProjection, initializePerspectiveProjection, initializeRawProjection, } from './projection';
22
22
  //# sourceMappingURL=contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,gCAAgC,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,uBAAuB,GACxB,MAAM,cAAc,CAAC"}
package/dist/contract.js CHANGED
@@ -18,5 +18,5 @@ export * from './viewMatrix';
18
18
  export * from './visibleBounds';
19
19
  export * from './zoom';
20
20
  export { initializeCamera3D } from './camera';
21
- export { initializeOrthographicProjection, initializePerspectiveProjection } from './projection';
21
+ export { initializeOrthographicProjection, initializePerspectiveProjection, initializeRawProjection, } from './projection';
22
22
  //# sourceMappingURL=contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,gCAAgC,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,uBAAuB,GACxB,MAAM,cAAc,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { applyObliqueNearClipPlane, areCameraGuardsEnabled, configureDirectionalShadowCamera3D, configureDirectionalShadowCamera3DTightFit, createCamera2D, createCamera3D, createOrthographicProjection, createPerspectiveProjection, disableCameraGuards, enableCameraGuards, getCamera2DParallaxPoint, getCamera2DViewMatrix, getCamera2DVisibleBounds, getCamera3DForward, getCamera3DFrustum, getCamera3DFrustumCorners, getCamera3DInverseViewProjectionMatrix4, getCamera3DLinearDepth, getCamera3DPosition, getCamera3DRayThroughBoundingSphere, getCamera3DRight, getCamera3DScreenToWorldRay, getCamera3DUp, getCamera3DViewProjectionMatrix4, getCamera3DViewSpaceZ, getCamera3DWorldToScreen, getCubeCaptureFaceCamera3D, getOrthographicProjectionTexelSize, intersectCamera3DRayWithPlane, isBoxInCamera3DFrustum, isOrthographicProjection, isPerspectiveProjection, isPointInCamera3DFrustum, isSphereInCamera3DFrustum, projectCamera2DPoint, reflectCamera3DByPlane, setCamera3DAspect, setCamera3DJitter, setCamera3DViewMatrix4FromLookAt, setCamera3DViewMatrix4FromMatrix4, setProjectionMatrix4, unprojectCamera2DPoint, updateCamera3DInverseViewProjection, zoomCamera2DAtScreenPoint, } from './contract';
1
+ export { applyObliqueNearClipPlane, areCameraGuardsEnabled, configureDirectionalShadowCamera3D, configureDirectionalShadowCamera3DTightFit, createCamera2D, createCamera3D, createOrthographicProjection, createPerspectiveProjection, createRawProjection, disableCameraGuards, enableCameraGuards, getCamera2DParallaxPoint, getCamera2DViewMatrix, getCamera2DVisibleBounds, getCamera3DForward, getCamera3DFrustum, getCamera3DFrustumCorners, getCamera3DInverseViewProjectionMatrix4, getCamera3DLinearDepth, getCamera3DPosition, getCamera3DRayThroughBoundingSphere, getCamera3DRight, getCamera3DScreenToWorldRay, getCamera3DUp, getCamera3DViewProjectionMatrix4, getCamera3DViewSpaceZ, getCamera3DWorldToScreen, getCubeCaptureFaceCamera3D, getOrthographicProjectionTexelSize, intersectCamera3DRayWithPlane, isBoxInCamera3DFrustum, isOrthographicProjection, isPerspectiveProjection, isRawProjection, isPointInCamera3DFrustum, isSphereInCamera3DFrustum, projectCamera2DPoint, reflectCamera3DByPlane, setCamera3DAspect, setCamera3DJitter, setCamera3DViewMatrix4FromLookAt, setCamera3DViewMatrix4FromMatrix4, setProjectionMatrix4, unprojectCamera2DPoint, updateCamera3DInverseViewProjection, zoomCamera2DAtScreenPoint, } from './contract';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,kCAAkC,EAClC,0CAA0C,EAC1C,cAAc,EACd,cAAc,EACd,4BAA4B,EAC5B,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,uCAAuC,EACvC,sBAAsB,EACtB,mBAAmB,EACnB,mCAAmC,EACnC,gBAAgB,EAChB,2BAA2B,EAC3B,aAAa,EACb,gCAAgC,EAChC,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,kCAAkC,EAClC,6BAA6B,EAC7B,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,gCAAgC,EAChC,iCAAiC,EACjC,oBAAoB,EACpB,sBAAsB,EACtB,mCAAmC,EACnC,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,kCAAkC,EAClC,0CAA0C,EAC1C,cAAc,EACd,cAAc,EACd,4BAA4B,EAC5B,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,uCAAuC,EACvC,sBAAsB,EACtB,mBAAmB,EACnB,mCAAmC,EACnC,gBAAgB,EAChB,2BAA2B,EAC3B,aAAa,EACb,gCAAgC,EAChC,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,kCAAkC,EAClC,6BAA6B,EAC7B,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,gCAAgC,EAChC,iCAAiC,EACjC,oBAAoB,EACpB,sBAAsB,EACtB,mCAAmC,EACnC,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { applyObliqueNearClipPlane, areCameraGuardsEnabled, configureDirectionalShadowCamera3D, configureDirectionalShadowCamera3DTightFit, createCamera2D, createCamera3D, createOrthographicProjection, createPerspectiveProjection, disableCameraGuards, enableCameraGuards, getCamera2DParallaxPoint, getCamera2DViewMatrix, getCamera2DVisibleBounds, getCamera3DForward, getCamera3DFrustum, getCamera3DFrustumCorners, getCamera3DInverseViewProjectionMatrix4, getCamera3DLinearDepth, getCamera3DPosition, getCamera3DRayThroughBoundingSphere, getCamera3DRight, getCamera3DScreenToWorldRay, getCamera3DUp, getCamera3DViewProjectionMatrix4, getCamera3DViewSpaceZ, getCamera3DWorldToScreen, getCubeCaptureFaceCamera3D, getOrthographicProjectionTexelSize, intersectCamera3DRayWithPlane, isBoxInCamera3DFrustum, isOrthographicProjection, isPerspectiveProjection, isPointInCamera3DFrustum, isSphereInCamera3DFrustum, projectCamera2DPoint, reflectCamera3DByPlane, setCamera3DAspect, setCamera3DJitter, setCamera3DViewMatrix4FromLookAt, setCamera3DViewMatrix4FromMatrix4, setProjectionMatrix4, unprojectCamera2DPoint, updateCamera3DInverseViewProjection, zoomCamera2DAtScreenPoint, } from './contract';
1
+ export { applyObliqueNearClipPlane, areCameraGuardsEnabled, configureDirectionalShadowCamera3D, configureDirectionalShadowCamera3DTightFit, createCamera2D, createCamera3D, createOrthographicProjection, createPerspectiveProjection, createRawProjection, disableCameraGuards, enableCameraGuards, getCamera2DParallaxPoint, getCamera2DViewMatrix, getCamera2DVisibleBounds, getCamera3DForward, getCamera3DFrustum, getCamera3DFrustumCorners, getCamera3DInverseViewProjectionMatrix4, getCamera3DLinearDepth, getCamera3DPosition, getCamera3DRayThroughBoundingSphere, getCamera3DRight, getCamera3DScreenToWorldRay, getCamera3DUp, getCamera3DViewProjectionMatrix4, getCamera3DViewSpaceZ, getCamera3DWorldToScreen, getCubeCaptureFaceCamera3D, getOrthographicProjectionTexelSize, intersectCamera3DRayWithPlane, isBoxInCamera3DFrustum, isOrthographicProjection, isPerspectiveProjection, isRawProjection, isPointInCamera3DFrustum, isSphereInCamera3DFrustum, projectCamera2DPoint, reflectCamera3DByPlane, setCamera3DAspect, setCamera3DJitter, setCamera3DViewMatrix4FromLookAt, setCamera3DViewMatrix4FromMatrix4, setProjectionMatrix4, unprojectCamera2DPoint, updateCamera3DInverseViewProjection, zoomCamera2DAtScreenPoint, } from './contract';
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,kCAAkC,EAClC,0CAA0C,EAC1C,cAAc,EACd,cAAc,EACd,4BAA4B,EAC5B,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,uCAAuC,EACvC,sBAAsB,EACtB,mBAAmB,EACnB,mCAAmC,EACnC,gBAAgB,EAChB,2BAA2B,EAC3B,aAAa,EACb,gCAAgC,EAChC,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,kCAAkC,EAClC,6BAA6B,EAC7B,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,gCAAgC,EAChC,iCAAiC,EACjC,oBAAoB,EACpB,sBAAsB,EACtB,mCAAmC,EACnC,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,kCAAkC,EAClC,0CAA0C,EAC1C,cAAc,EACd,cAAc,EACd,4BAA4B,EAC5B,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,uCAAuC,EACvC,sBAAsB,EACtB,mBAAmB,EACnB,mCAAmC,EACnC,gBAAgB,EAChB,2BAA2B,EAC3B,aAAa,EACb,gCAAgC,EAChC,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,kCAAkC,EAClC,6BAA6B,EAC7B,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,gCAAgC,EAChC,iCAAiC,EACjC,oBAAoB,EACpB,sBAAsB,EACtB,mCAAmC,EACnC,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
@@ -1,11 +1,14 @@
1
1
  import type { EntityConstruction, Matrix4Like } from '@flighthq/types/contract';
2
- import type { OrthographicProjection, OrthographicProjectionOptions, PerspectiveProjection, PerspectiveProjectionOptions, Projection } from '@flighthq/types/contract';
2
+ import type { OrthographicProjection, OrthographicProjectionOptions, PerspectiveProjection, PerspectiveProjectionOptions, Projection, RawProjection, RawProjectionOptions } from '@flighthq/types/contract';
3
3
  export declare function createOrthographicProjection(opts: Readonly<OrthographicProjectionOptions>): OrthographicProjection;
4
4
  export declare function createPerspectiveProjection(opts: Readonly<PerspectiveProjectionOptions>): PerspectiveProjection;
5
+ export declare function createRawProjection(opts: Readonly<RawProjectionOptions>): RawProjection;
5
6
  export declare function getOrthographicProjectionTexelSize(projection: Readonly<OrthographicProjection>, pixelWidth: number, pixelHeight: number): number;
6
7
  export declare function initializeOrthographicProjection(out: EntityConstruction<OrthographicProjection>, opts: Readonly<OrthographicProjectionOptions>): void;
7
8
  export declare function initializePerspectiveProjection(out: EntityConstruction<PerspectiveProjection>, opts: Readonly<PerspectiveProjectionOptions>): void;
9
+ export declare function initializeRawProjection(out: EntityConstruction<RawProjection>, opts: Readonly<RawProjectionOptions>): void;
8
10
  export declare function isOrthographicProjection(projection: Readonly<Projection>): projection is OrthographicProjection;
9
11
  export declare function isPerspectiveProjection(projection: Readonly<Projection>): projection is PerspectiveProjection;
12
+ export declare function isRawProjection(projection: Readonly<Projection>): projection is RawProjection;
10
13
  export declare function setProjectionMatrix4(out: Matrix4Like, projection: Readonly<Projection>, aspect: number, near: number, far: number): void;
11
14
  //# sourceMappingURL=projection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,KAAK,EACV,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,4BAA4B,EAC5B,UAAU,EACX,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,QAAQ,CAAC,6BAA6B,CAAC,GAAG,sBAAsB,CAIlH;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,CAAC,4BAA4B,CAAC,GAAG,qBAAqB,CAI/G;AAKD,wBAAgB,kCAAkC,CAChD,UAAU,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAC5C,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER;AAKD,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,kBAAkB,CAAC,sBAAsB,CAAC,EAC/C,IAAI,EAAE,QAAQ,CAAC,6BAA6B,CAAC,GAC5C,IAAI,CAIN;AAID,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,EAC9C,IAAI,EAAE,QAAQ,CAAC,4BAA4B,CAAC,GAC3C,IAAI,CAIN;AAGD,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,IAAI,sBAAsB,CAE/G;AAGD,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,IAAI,qBAAqB,CAE7G;AAUD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,EAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,IAAI,CASN"}
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,KAAK,EACV,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,4BAA4B,EAC5B,UAAU,EACV,aAAa,EACb,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,QAAQ,CAAC,6BAA6B,CAAC,GAAG,sBAAsB,CAIlH;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,CAAC,4BAA4B,CAAC,GAAG,qBAAqB,CAI/G;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GAAG,aAAa,CAIvF;AAKD,wBAAgB,kCAAkC,CAChD,UAAU,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAC5C,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER;AAKD,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,kBAAkB,CAAC,sBAAsB,CAAC,EAC/C,IAAI,EAAE,QAAQ,CAAC,6BAA6B,CAAC,GAC5C,IAAI,CAIN;AAID,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,EAC9C,IAAI,EAAE,QAAQ,CAAC,4BAA4B,CAAC,GAC3C,IAAI,CAIN;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,kBAAkB,CAAC,aAAa,CAAC,EACtC,IAAI,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GACnC,IAAI,CAIN;AAGD,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,IAAI,sBAAsB,CAE/G;AAGD,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,IAAI,qBAAqB,CAE7G;AAGD,wBAAgB,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,IAAI,aAAa,CAE7F;AAUD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,EAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,IAAI,CAaN"}
@@ -1,5 +1,5 @@
1
1
  import { allocateEntity, finishEntity } from '@flighthq/entity/contract';
2
- import { setOrthographicMatrix4, setPerspectiveMatrix4 } from '@flighthq/geometry/contract';
2
+ import { createMatrix4, setOrthographicMatrix4, setPerspectiveMatrix4 } from '@flighthq/geometry/contract';
3
3
  export function createOrthographicProjection(opts) {
4
4
  const out = allocateEntity();
5
5
  initializeOrthographicProjection(out, opts);
@@ -10,6 +10,11 @@ export function createPerspectiveProjection(opts) {
10
10
  initializePerspectiveProjection(out, opts);
11
11
  return finishEntity(out);
12
12
  }
13
+ export function createRawProjection(opts) {
14
+ const out = allocateEntity();
15
+ initializeRawProjection(out, opts);
16
+ return finishEntity(out);
17
+ }
13
18
  // Returns the larger world-space footprint of one texel across an orthographic projection. Using the
14
19
  // larger axis gives receiver offsets one conservative, aspect-independent unit even when the shadow
15
20
  // map or light projection is not square. `pixelWidth`/`pixelHeight` must be positive.
@@ -31,6 +36,11 @@ export function initializePerspectiveProjection(out, opts) {
31
36
  out.fovY = opts.fovY;
32
37
  out.kind = 'perspective';
33
38
  }
39
+ export function initializeRawProjection(out, opts) {
40
+ out.kind = 'raw';
41
+ out.matrix = createMatrix4();
42
+ out.matrix.m.set(opts.matrix.m);
43
+ }
34
44
  // True when the projection is an orthographic descriptor. Narrows the discriminated union.
35
45
  export function isOrthographicProjection(projection) {
36
46
  return projection.kind === 'orthographic';
@@ -39,6 +49,10 @@ export function isOrthographicProjection(projection) {
39
49
  export function isPerspectiveProjection(projection) {
40
50
  return projection.kind === 'perspective';
41
51
  }
52
+ // True when the projection is a raw (pre-built) matrix. Narrows the discriminated union.
53
+ export function isRawProjection(projection) {
54
+ return projection.kind === 'raw';
55
+ }
42
56
  // Writes the projection matrix for `projection` into `out`, delegating to geometry's perspective
43
57
  // or orthographic builders. `aspect` (viewport width / height) overrides a perspective
44
58
  // projection's stored aspect so a single descriptor can drive a resizing viewport; it is ignored
@@ -52,6 +66,10 @@ export function setProjectionMatrix4(out, projection, aspect, near, far) {
52
66
  setPerspectiveMatrix4(out, Math.tan(projection.fovY * 0.5), aspect, near, far);
53
67
  return;
54
68
  }
69
+ if (projection.kind === 'raw') {
70
+ out.m.set(projection.matrix.m);
71
+ return;
72
+ }
55
73
  const halfWidth = projection.halfWidth;
56
74
  const halfHeight = projection.halfHeight;
57
75
  setOrthographicMatrix4(out, -halfWidth, halfWidth, -halfHeight, halfHeight, near, far);
@@ -1 +1 @@
1
- {"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAU5F,MAAM,UAAU,4BAA4B,CAAC,IAA6C;IACxF,MAAM,GAAG,GAAG,cAAc,EAA0B,CAAC;IACrD,gCAAgC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5C,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAA4C;IACtF,MAAM,GAAG,GAAG,cAAc,EAAyB,CAAC;IACpD,+BAA+B,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3C,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,qGAAqG;AACrG,oGAAoG;AACpG,sFAAsF;AACtF,MAAM,UAAU,kCAAkC,CAChD,UAA4C,EAC5C,UAAkB,EAClB,WAAmB;IAEnB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;AACtG,CAAC;AAED,0FAA0F;AAC1F,wFAAwF;AACxF,wEAAwE;AACxE,MAAM,UAAU,gCAAgC,CAC9C,GAA+C,EAC/C,IAA6C;IAE7C,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACjC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAC/B,GAAG,CAAC,IAAI,GAAG,cAAc,CAAC;AAC5B,CAAC;AAED,2FAA2F;AAC3F,gGAAgG;AAChG,MAAM,UAAU,+BAA+B,CAC7C,GAA8C,EAC9C,IAA4C;IAE5C,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IAC9B,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACrB,GAAG,CAAC,IAAI,GAAG,aAAa,CAAC;AAC3B,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,wBAAwB,CAAC,UAAgC;IACvE,OAAO,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC;AAC5C,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,uBAAuB,CAAC,UAAgC;IACtE,OAAO,UAAU,CAAC,IAAI,KAAK,aAAa,CAAC;AAC3C,CAAC;AAED,iGAAiG;AACjG,uFAAuF;AACvF,iGAAiG;AACjG,iGAAiG;AACjG,6CAA6C;AAC7C,EAAE;AACF,4FAA4F;AAC5F,yCAAyC;AACzC,MAAM,UAAU,oBAAoB,CAClC,GAAgB,EAChB,UAAgC,EAChC,MAAc,EACd,IAAY,EACZ,GAAW;IAEX,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACtC,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/E,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IACvC,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IACzC,sBAAsB,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AACzF,CAAC"}
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reflection.d.ts","sourceRoot":"","sources":["../src/reflection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAYjF,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAkB5G;AAQD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAqClH"}
1
+ {"version":3,"file":"reflection.d.ts","sourceRoot":"","sources":["../src/reflection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAYjF,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAkB5G;AAQD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAuClH"}
@@ -41,12 +41,14 @@ export function reflectCamera3DByPlane(out, camera, plane) {
41
41
  const jx = camera.jitter.x;
42
42
  const jy = camera.jitter.y;
43
43
  const projection = camera.projection;
44
+ const nearClipPlane = camera.nearClipPlane;
44
45
  setMatrix4(__scratchReflection, 1 - 2 * pa * pa, -2 * pa * pb, -2 * pa * pc, 0, -2 * pa * pb, 1 - 2 * pb * pb, -2 * pb * pc, 0, -2 * pa * pc, -2 * pb * pc, 1 - 2 * pc * pc, 0, -2 * pa * pd, -2 * pb * pd, -2 * pc * pd, 1);
45
46
  multiplyMatrix4(out.view, camera.view, __scratchReflection);
46
47
  out.near = near;
47
48
  out.far = far;
48
49
  out.jitter.x = jx;
49
50
  out.jitter.y = jy;
51
+ out.nearClipPlane = nearClipPlane;
50
52
  out.projection = projection;
51
53
  }
52
54
  function _sgn(x) {
@@ -1 +1 @@
1
- {"version":3,"file":"reflection.js","sourceRoot":"","sources":["../src/reflection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGzF,6FAA6F;AAC7F,2FAA2F;AAC3F,6FAA6F;AAC7F,8FAA8F;AAC9F,mDAAmD;AACnD,EAAE;AACF,qFAAqF;AACrF,6FAA6F;AAC7F,yFAAyF;AACzF,iBAAiB;AACjB,MAAM,UAAU,yBAAyB,CAAC,UAAuB,EAAE,cAAmC;IACpG,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;IAE5B,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACd,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAE/B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAEtD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,0FAA0F;AAC1F,yFAAyF;AACzF,qEAAqE;AACrE,EAAE;AACF,0FAA0F;AAC1F,6BAA6B;AAC7B,MAAM,UAAU,sBAAsB,CAAC,GAAa,EAAE,MAA0B,EAAE,KAA0B;IAC1G,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IACnB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IACnB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IACnB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IACnB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACvB,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAErC,UAAU,CACR,mBAAmB,EACnB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EACf,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EACZ,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EACZ,CAAC,EACD,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EACZ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EACf,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EACZ,CAAC,EACD,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EACZ,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EACZ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EACf,CAAC,EACD,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EACZ,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EACZ,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EACZ,CAAC,CACF,CAAC;IACF,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAE5D,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;IAChB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;IACd,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;IAClB,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;IAClB,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;AAC9B,CAAC;AAED,SAAS,IAAI,CAAC,CAAS;IACrB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,mBAAmB,GAAG,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"reflection.js","sourceRoot":"","sources":["../src/reflection.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/camera",
3
- "version": "0.5.1-next.1052.ea38f97",
3
+ "version": "0.5.1-next.1058.751c53a",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,10 +38,10 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/entity": "0.5.1-next.1052.ea38f97",
42
- "@flighthq/geometry": "0.5.1-next.1052.ea38f97",
43
- "@flighthq/log": "0.5.1-next.1052.ea38f97",
44
- "@flighthq/types": "0.5.1-next.1052.ea38f97"
41
+ "@flighthq/entity": "0.5.1-next.1058.751c53a",
42
+ "@flighthq/geometry": "0.5.1-next.1058.751c53a",
43
+ "@flighthq/log": "0.5.1-next.1058.751c53a",
44
+ "@flighthq/types": "0.5.1-next.1058.751c53a"
45
45
  },
46
46
  "devDependencies": {
47
47
  "typescript": "^5.3.0"
@@ -1,9 +1,11 @@
1
1
  import {
2
2
  createMatrix4,
3
+ createPlane,
3
4
  createVector3,
4
5
  inverseMatrix4,
5
6
  multiplyMatrix4,
6
7
  setMatrix4LookAt,
8
+ setPerspectiveMatrix4,
7
9
  } from '@flighthq/geometry/contract';
8
10
 
9
11
  import {
@@ -18,7 +20,13 @@ import {
18
20
  setCamera3DViewMatrix4FromMatrix4,
19
21
  updateCamera3DInverseViewProjection,
20
22
  } from './camera';
21
- import { createOrthographicProjection, createPerspectiveProjection, setProjectionMatrix4 } from './projection';
23
+ import {
24
+ createOrthographicProjection,
25
+ createPerspectiveProjection,
26
+ createRawProjection,
27
+ setProjectionMatrix4,
28
+ } from './projection';
29
+ import { applyObliqueNearClipPlane } from './reflection';
22
30
 
23
31
  describe('createCamera3D', () => {
24
32
  it('stores projection, near, far and identity view/inverse with zero jitter', () => {
@@ -30,10 +38,22 @@ describe('createCamera3D', () => {
30
38
  expect(camera.far).toBe(100);
31
39
  expect(camera.jitter.x).toBe(0);
32
40
  expect(camera.jitter.y).toBe(0);
41
+ expect(camera.nearClipPlane).toBeNull();
33
42
  expect(camera.view.m[0]).toBe(1);
34
43
  expect(camera.view.m[5]).toBe(1);
35
44
  expect(camera.inverseViewProjection.m[10]).toBe(1);
36
45
  });
46
+
47
+ it('accepts an optional nearClipPlane', () => {
48
+ const plane = createPlane(0, 1, 0, -2);
49
+ const camera = createCamera3D({
50
+ far: 100,
51
+ near: 0.1,
52
+ nearClipPlane: plane,
53
+ projection: createPerspectiveProjection({ aspect: 1, fovY: 1 }),
54
+ });
55
+ expect(camera.nearClipPlane).toBe(plane);
56
+ });
37
57
  });
38
58
 
39
59
  describe('getCamera3DInverseViewProjectionMatrix4', () => {
@@ -108,6 +128,36 @@ describe('getCamera3DViewProjectionMatrix4', () => {
108
128
  expect(jittered.m[9]).toBeCloseTo(base.m[9] + 0.5);
109
129
  });
110
130
 
131
+ it('applies the oblique near clip plane when nearClipPlane is set', () => {
132
+ const camera = createCamera3D({
133
+ far: 100,
134
+ near: 0.1,
135
+ projection: createPerspectiveProjection({ aspect: 1.5, fovY: Math.PI / 3 }),
136
+ });
137
+
138
+ const withoutClip = createMatrix4();
139
+ getCamera3DViewProjectionMatrix4(withoutClip, camera, 1.5);
140
+
141
+ camera.nearClipPlane = createPlane(0, 1, 0, -1);
142
+ const withClip = createMatrix4();
143
+ getCamera3DViewProjectionMatrix4(withClip, camera, 1.5);
144
+
145
+ // The oblique clip modifies the third row of the projection (m[2], m[6], m[10], m[14]).
146
+ // Verify it differs from the symmetric projection.
147
+ const differs = Array.from({ length: 16 }, (_, i) => withClip.m[i] !== withoutClip.m[i]);
148
+ expect(differs.some(Boolean)).toBe(true);
149
+
150
+ // Verify the result matches manual oblique clip application.
151
+ const projMatrix = createMatrix4();
152
+ setProjectionMatrix4(projMatrix, camera.projection, 1.5, camera.near, camera.far);
153
+ applyObliqueNearClipPlane(projMatrix, camera.nearClipPlane);
154
+ const expected = createMatrix4();
155
+ multiplyMatrix4(expected, projMatrix, camera.view);
156
+ for (let i = 0; i < 16; i++) {
157
+ expect(withClip.m[i]).toBeCloseTo(expected.m[i]);
158
+ }
159
+ });
160
+
111
161
  it('is safe when out aliases the camera view', () => {
112
162
  const projection = createPerspectiveProjection({ aspect: 1, fovY: 1 });
113
163
  const camera = createCamera3D({ far: 100, near: 0.1, projection });
@@ -148,6 +198,17 @@ describe('setCamera3DAspect', () => {
148
198
  expect(projection.halfHeight).toBe(5);
149
199
  expect(projection.halfWidth).toBe(10);
150
200
  });
201
+
202
+ it('is a no-op for a raw projection', () => {
203
+ const source = createMatrix4();
204
+ setPerspectiveMatrix4(source, 1, 1.5, 0.1, 100);
205
+ const projection = createRawProjection({ matrix: source });
206
+ const camera = createCamera3D({ far: 100, near: 0.1, projection });
207
+ setCamera3DAspect(camera, 999);
208
+ for (let i = 0; i < 16; i++) {
209
+ expect(projection.matrix.m[i]).toBeCloseTo(source.m[i]);
210
+ }
211
+ });
151
212
  });
152
213
 
153
214
  describe('setCamera3DJitter', () => {
@@ -1,15 +1,23 @@
1
- import { createMatrix4, createPerspectiveMatrix4, setOrthographicMatrix4 } from '@flighthq/geometry/contract';
1
+ import {
2
+ createMatrix4,
3
+ createPerspectiveMatrix4,
4
+ setPerspectiveMatrix4,
5
+ setOrthographicMatrix4,
6
+ } from '@flighthq/geometry/contract';
2
7
  import { EntityRuntimeKey } from '@flighthq/types/contract';
3
8
  import type { OrthographicProjection, PerspectiveProjection } from '@flighthq/types/contract';
4
9
 
5
10
  import {
6
11
  createOrthographicProjection,
7
12
  createPerspectiveProjection,
13
+ createRawProjection,
8
14
  getOrthographicProjectionTexelSize,
9
15
  initializeOrthographicProjection,
10
16
  initializePerspectiveProjection,
17
+ initializeRawProjection,
11
18
  isOrthographicProjection,
12
19
  isPerspectiveProjection,
20
+ isRawProjection,
13
21
  setProjectionMatrix4,
14
22
  } from './projection';
15
23
 
@@ -38,6 +46,20 @@ describe('createPerspectiveProjection', () => {
38
46
  });
39
47
  });
40
48
 
49
+ describe('createRawProjection', () => {
50
+ it('builds a raw projection from a matrix, copying the data', () => {
51
+ const source = createPerspectiveMatrix4(Math.tan(Math.PI / 6), 1.5, 0.1, 100);
52
+ const projection = createRawProjection({ matrix: source });
53
+ expect(EntityRuntimeKey in projection).toBe(true);
54
+ expect(projection.kind).toBe('raw');
55
+ for (let i = 0; i < 16; i++) {
56
+ expect(projection.matrix.m[i]).toBeCloseTo(source.m[i]);
57
+ }
58
+ source.m[0] = 999;
59
+ expect(projection.matrix.m[0]).not.toBe(999);
60
+ });
61
+ });
62
+
41
63
  describe('getOrthographicProjectionTexelSize', () => {
42
64
  it('uses the larger world-space texel footprint for a non-square projection and map', () => {
43
65
  const projection = createOrthographicProjection({ halfHeight: 20, halfWidth: 10 });
@@ -59,6 +81,12 @@ describe('initializePerspectiveProjection', () => {
59
81
  });
60
82
  });
61
83
 
84
+ describe('initializeRawProjection', () => {
85
+ it('is the construction initializer of createRawProjection', () => {
86
+ expect(typeof initializeRawProjection).toBe('function');
87
+ });
88
+ });
89
+
62
90
  describe('isOrthographicProjection', () => {
63
91
  it('is true for orthographic and false for perspective', () => {
64
92
  const ortho = createOrthographicProjection({ halfHeight: 1, halfWidth: 1 });
@@ -76,6 +104,17 @@ describe('isPerspectiveProjection', () => {
76
104
  });
77
105
  });
78
106
 
107
+ describe('isRawProjection', () => {
108
+ it('is true for raw and false for perspective and orthographic', () => {
109
+ const raw = createRawProjection({ matrix: createMatrix4() });
110
+ const persp = createPerspectiveProjection({ aspect: 1, fovY: 1 });
111
+ const ortho = createOrthographicProjection({ halfHeight: 1, halfWidth: 1 });
112
+ expect(isRawProjection(raw)).toBe(true);
113
+ expect(isRawProjection(persp)).toBe(false);
114
+ expect(isRawProjection(ortho)).toBe(false);
115
+ });
116
+ });
117
+
79
118
  describe('setProjectionMatrix4', () => {
80
119
  it('matches geometry perspective builder using tan(fovY/2)', () => {
81
120
  const fovY = Math.PI / 2;
@@ -106,6 +145,19 @@ describe('setProjectionMatrix4', () => {
106
145
  }
107
146
  });
108
147
 
148
+ it('copies the raw projection matrix verbatim, ignoring aspect/near/far', () => {
149
+ const source = createMatrix4();
150
+ setPerspectiveMatrix4(source, Math.tan(Math.PI / 4), 1.5, 0.1, 100);
151
+ const projection = createRawProjection({ matrix: source });
152
+
153
+ const out = createMatrix4();
154
+ setProjectionMatrix4(out, projection, 999, 0, 1);
155
+
156
+ for (let i = 0; i < 16; i++) {
157
+ expect(out.m[i]).toBeCloseTo(source.m[i]);
158
+ }
159
+ });
160
+
109
161
  it('matches geometry orthographic builder using symmetric half-extents', () => {
110
162
  const projection: OrthographicProjection = createOrthographicProjection({ halfHeight: 3, halfWidth: 5 });
111
163
  const near = 1;