@flighthq/camera 0.2.1-next.451.d9a4a4e → 0.2.1-next.530.a223ca9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/basis.d.ts.map +1 -1
- package/dist/basis.js +1 -5
- package/dist/basis.js.map +1 -1
- package/dist/depth.d.ts.map +1 -1
- package/dist/depth.js +4 -2
- package/dist/depth.js.map +1 -1
- package/package.json +4 -4
- package/src/depth.test.ts +13 -1
package/dist/basis.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basis.d.ts","sourceRoot":"","sources":["../src/basis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAO7D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAOrF;AAWD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"basis.d.ts","sourceRoot":"","sources":["../src/basis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAO7D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAOrF;AAWD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAuBtF;AAMD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAKnF;AAMD,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAKhF"}
|
package/dist/basis.js
CHANGED
|
@@ -22,11 +22,7 @@ export function getCamera3DForward(out, camera) {
|
|
|
22
22
|
// Safe when `out` aliases any field of the camera.
|
|
23
23
|
export function getCamera3DPosition(out, camera) {
|
|
24
24
|
const m = camera.view.m;
|
|
25
|
-
// Column-major storage: element(row, col) = m[row + 4*col].
|
|
26
|
-
// The 3×3 rotation block R^T (transposed) has rows:
|
|
27
|
-
// row 0: m[0], m[1], m[2] (column 0 of R = right x-components)
|
|
28
|
-
// row 1: m[4], m[5], m[6] (column 1 of R = up y-components ... wait, this is col 1 of R)
|
|
29
|
-
// Actually R^T column 0 = R row 0 = [m[0], m[4], m[8]], but the inverse translation is:
|
|
25
|
+
// Column-major storage: element(row, col) = m[row + 4*col]. For the orthonormal rotation block:
|
|
30
26
|
// eye = -(R^T · t)
|
|
31
27
|
// (R^T · t).x = m[0]*m[12] + m[1]*m[13] + m[2]*m[14]
|
|
32
28
|
// (R^T · t).y = m[4]*m[12] + m[5]*m[13] + m[6]*m[14]
|
package/dist/basis.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basis.js","sourceRoot":"","sources":["../src/basis.ts"],"names":[],"mappings":"AAEA,6FAA6F;AAC7F,4FAA4F;AAC5F,kFAAkF;AAClF,EAAE;AACF,mDAAmD;AACnD,MAAM,UAAU,kBAAkB,CAAC,GAAgB,EAAE,MAA0B;IAC7E,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACxB,4EAA4E;IAC5E,+CAA+C;IAC/C,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACd,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACd,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC;AAED,yFAAyF;AACzF,sFAAsF;AACtF,uEAAuE;AACvE,+EAA+E;AAC/E,EAAE;AACF,uFAAuF;AACvF,oFAAoF;AACpF,EAAE;AACF,mDAAmD;AACnD,MAAM,UAAU,mBAAmB,CAAC,GAAgB,EAAE,MAA0B;IAC9E,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACxB,
|
|
1
|
+
{"version":3,"file":"basis.js","sourceRoot":"","sources":["../src/basis.ts"],"names":[],"mappings":"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"}
|
package/dist/depth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depth.d.ts","sourceRoot":"","sources":["../src/depth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"depth.d.ts","sourceRoot":"","sources":["../src/depth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAahD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBvF;AAOD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtF"}
|
package/dist/depth.js
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
// point in front of the camera (standard right-handed convention where the camera looks toward -Z).
|
|
4
4
|
//
|
|
5
5
|
// For perspective projection the NDC depth is non-linear; this undoes that non-linearity using the
|
|
6
|
-
// camera's near/far clip planes.
|
|
7
|
-
// same formula still applies but the result is a simple remap.
|
|
6
|
+
// camera's near/far clip planes. Orthographic projection uses its own affine remap.
|
|
8
7
|
//
|
|
9
8
|
// `ndcZ` should be in [-1, 1] (OpenGL depth convention). Values outside that range are clamped
|
|
10
9
|
// mathematically — no explicit clamp is applied; callers should supply valid NDC depths.
|
|
@@ -17,6 +16,9 @@ export function getCamera3DLinearDepth(camera, ndcZ) {
|
|
|
17
16
|
if (range === 0) {
|
|
18
17
|
return 0;
|
|
19
18
|
}
|
|
19
|
+
if (camera.projection.kind === 'orthographic') {
|
|
20
|
+
return -(near + ((ndcZ + 1) * range) / 2);
|
|
21
|
+
}
|
|
20
22
|
// Map ndcZ from [-1, 1] back to the view-space Z for a perspective projection.
|
|
21
23
|
// Derived from the perspective depth mapping:
|
|
22
24
|
// ndcZ = (far + near) / (near - far) + (2 * far * near) / ((near - far) * viewZ)
|
package/dist/depth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depth.js","sourceRoot":"","sources":["../src/depth.ts"],"names":[],"mappings":"AAEA,gGAAgG;AAChG,kGAAkG;AAClG,oGAAoG;AACpG,EAAE;AACF,mGAAmG;AACnG,
|
|
1
|
+
{"version":3,"file":"depth.js","sourceRoot":"","sources":["../src/depth.ts"],"names":[],"mappings":"AAEA,gGAAgG;AAChG,kGAAkG;AAClG,oGAAoG;AACpG,EAAE;AACF,mGAAmG;AACnG,oFAAoF;AACpF,EAAE;AACF,+FAA+F;AAC/F,yFAAyF;AACzF,EAAE;AACF,8DAA8D;AAC9D,MAAM,UAAU,sBAAsB,CAAC,MAA0B,EAAE,IAAY;IAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACvB,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;IACzB,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAC9C,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,+EAA+E;IAC/E,8CAA8C;IAC9C,mFAAmF;IACnF,qBAAqB;IACrB,sEAAsE;IACtE,MAAM,WAAW,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAChD,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC;AACxC,CAAC;AAED,8FAA8F;AAC9F,qGAAqG;AACrG,6FAA6F;AAC7F,EAAE;AACF,8DAA8D;AAC9D,MAAM,UAAU,qBAAqB,CAAC,MAA0B,EAAE,IAAY;IAC5E,OAAO,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/camera",
|
|
3
|
-
"version": "0.2.1-next.
|
|
3
|
+
"version": "0.2.1-next.530.a223ca9",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/flighthq/flight.git",
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@flighthq/entity": "0.2.1-next.
|
|
36
|
-
"@flighthq/geometry": "0.2.1-next.
|
|
37
|
-
"@flighthq/types": "0.2.1-next.
|
|
35
|
+
"@flighthq/entity": "0.2.1-next.530.a223ca9",
|
|
36
|
+
"@flighthq/geometry": "0.2.1-next.530.a223ca9",
|
|
37
|
+
"@flighthq/types": "0.2.1-next.530.a223ca9"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"typescript": "^5.3.0"
|
package/src/depth.test.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createCamera3D } from './camera';
|
|
2
2
|
import { getCamera3DLinearDepth, getCamera3DViewSpaceZ } from './depth';
|
|
3
|
-
import { createPerspectiveProjection } from './projection';
|
|
3
|
+
import { createOrthographicProjection, createPerspectiveProjection } from './projection';
|
|
4
4
|
|
|
5
5
|
function makeCamera(near = 0.1, far = 100) {
|
|
6
6
|
return createCamera3D({
|
|
@@ -37,6 +37,18 @@ describe('getCamera3DLinearDepth', () => {
|
|
|
37
37
|
expect(depth).toBeLessThan(-1);
|
|
38
38
|
expect(depth).toBeGreaterThan(-100);
|
|
39
39
|
});
|
|
40
|
+
|
|
41
|
+
it('linearly maps orthographic NDC depth to the clip range', () => {
|
|
42
|
+
const camera = createCamera3D({
|
|
43
|
+
far: 101,
|
|
44
|
+
near: 1,
|
|
45
|
+
projection: createOrthographicProjection({ halfHeight: 1, halfWidth: 1 }),
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
expect(getCamera3DLinearDepth(camera, -1)).toBeCloseTo(-1);
|
|
49
|
+
expect(getCamera3DLinearDepth(camera, 0)).toBeCloseTo(-51);
|
|
50
|
+
expect(getCamera3DLinearDepth(camera, 1)).toBeCloseTo(-101);
|
|
51
|
+
});
|
|
40
52
|
});
|
|
41
53
|
|
|
42
54
|
describe('getCamera3DViewSpaceZ', () => {
|