@flighthq/scene3d 0.3.0 → 0.3.1-next.1041.35b950c
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/billboardCamera.d.ts +3 -2
- package/dist/billboardCamera.d.ts.map +1 -1
- package/dist/billboardCamera.js +29 -3
- package/dist/billboardCamera.js.map +1 -1
- package/dist/contract.d.ts +1 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +1 -0
- package/dist/contract.js.map +1 -1
- package/dist/enableScene3DGuards.d.ts +4 -0
- package/dist/enableScene3DGuards.d.ts.map +1 -0
- package/dist/enableScene3DGuards.js +28 -0
- package/dist/enableScene3DGuards.js.map +1 -0
- package/dist/sceneDocument.js +3 -0
- package/dist/sceneDocument.js.map +1 -1
- package/dist/sceneNode.d.ts.map +1 -1
- package/dist/sceneNode.js +2 -5
- package/dist/sceneNode.js.map +1 -1
- package/package.json +11 -10
- package/src/billboardCamera.test.ts +59 -2
- package/src/enableScene3DGuards.test.ts +72 -0
- package/src/sceneKindUsage.test.ts +1 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Billboard, Camera3D, Node3D } from '@flighthq/types/contract';
|
|
2
|
-
export declare function orientBillboardToCamera(billboard: Billboard, camera: Readonly<Camera3D>):
|
|
3
|
-
export declare function orientScene3DBillboardsToCamera(scene: Readonly<Node3D>, camera: Readonly<Camera3D>):
|
|
2
|
+
export declare function orientBillboardToCamera(billboard: Billboard, camera: Readonly<Camera3D>): boolean;
|
|
3
|
+
export declare function orientScene3DBillboardsToCamera(scene: Readonly<Node3D>, camera: Readonly<Camera3D>): boolean;
|
|
4
|
+
export declare function setBillboardCameraBasisGuard(guard: ((camera: Readonly<Camera3D>) => void) | null): void;
|
|
4
5
|
//# sourceMappingURL=billboardCamera.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billboardCamera.d.ts","sourceRoot":"","sources":["../src/billboardCamera.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAiB,QAAQ,EAAW,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAcpG,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"billboardCamera.d.ts","sourceRoot":"","sources":["../src/billboardCamera.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAiB,QAAQ,EAAW,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAcpG,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAIjG;AAOD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAI5G;AAMD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAEvG"}
|
package/dist/billboardCamera.js
CHANGED
|
@@ -12,8 +12,10 @@ import { getNode3DRuntime } from './sceneNode';
|
|
|
12
12
|
// whole subtree, orientScene3DBillboardsToCamera walks and orients every Billboard in one pass, deriving
|
|
13
13
|
// the camera basis a single time.
|
|
14
14
|
export function orientBillboardToCamera(billboard, camera) {
|
|
15
|
-
setBillboardCameraBasis(camera)
|
|
15
|
+
if (!setBillboardCameraBasis(camera))
|
|
16
|
+
return false;
|
|
16
17
|
applyBillboardFacing(billboard);
|
|
18
|
+
return true;
|
|
17
19
|
}
|
|
18
20
|
// Orients every Billboard in the subtree rooted at `scene` to face `camera` in one pass. Non-billboard
|
|
19
21
|
// nodes are skipped (but still traversed, so billboards nested under group/mesh nodes are found). The
|
|
@@ -21,8 +23,17 @@ export function orientBillboardToCamera(billboard, camera) {
|
|
|
21
23
|
// descendants (top-down), so a billboard nested under another billboard sees its parent's updated
|
|
22
24
|
// transform.
|
|
23
25
|
export function orientScene3DBillboardsToCamera(scene, camera) {
|
|
24
|
-
setBillboardCameraBasis(camera)
|
|
26
|
+
if (!setBillboardCameraBasis(camera))
|
|
27
|
+
return false;
|
|
25
28
|
orientBillboardSubtree(scene);
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
// The seam the guard layer installs into; `null` keeps this module free of message text and of any
|
|
32
|
+
// dependency on @flighthq/log. The boolean return is the caller's signal and matches the sibling
|
|
33
|
+
// `updateCamera3DInverseViewProjection`; this is the caller-facing REPORT, which that sibling has no
|
|
34
|
+
// equivalent of, so the two are complementary rather than duplicates.
|
|
35
|
+
export function setBillboardCameraBasisGuard(guard) {
|
|
36
|
+
billboardCameraBasisGuard = guard;
|
|
26
37
|
}
|
|
27
38
|
// Rewrites `billboard.localMatrix` from the module-scratch camera basis (set by setBillboardCameraBasis)
|
|
28
39
|
// so the billboard's world transform faces the camera. Reads the billboard's current world matrix for
|
|
@@ -66,7 +77,20 @@ function orientBillboardSubtree(node) {
|
|
|
66
77
|
// basis. `_back` is the camera's +Z world axis (toward the viewer), which is the facing normal a
|
|
67
78
|
// screen-aligned billboard adopts.
|
|
68
79
|
function setBillboardCameraBasis(camera) {
|
|
69
|
-
|
|
80
|
+
// Matches `updateCamera3DInverseViewProjection`, which already treats a non-invertible view as a real
|
|
81
|
+
// state: report it and leave the prior basis untouched rather than deriving one from a garbage matrix.
|
|
82
|
+
// Reading `m` after a failed inverse would seed every axis and the eye position from NaN, and the
|
|
83
|
+
// billboards would be silently unplaceable rather than simply not re-oriented this frame.
|
|
84
|
+
//
|
|
85
|
+
// Whether a view can BE singular depends on which setter filled it, and the two differ:
|
|
86
|
+
// `setCamera3DViewMatrix4FromLookAt` is safe by construction (`setMatrix4LookAt` reseeds both
|
|
87
|
+
// degenerate bases — coincident eye/target, and `up` parallel to the view direction), while
|
|
88
|
+
// `setCamera3DViewMatrix4FromMatrix4` copies an arbitrary caller matrix with no validation at all and
|
|
89
|
+
// documents deriving it from a scene node's world transform, which a zero-scale node makes singular.
|
|
90
|
+
if (!inverseMatrix4(_cameraWorld, camera.view)) {
|
|
91
|
+
billboardCameraBasisGuard?.(camera);
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
70
94
|
const m = _cameraWorld.m;
|
|
71
95
|
_cameraEyeX = m[12];
|
|
72
96
|
_cameraEyeY = m[13];
|
|
@@ -92,6 +116,7 @@ function setBillboardCameraBasis(camera) {
|
|
|
92
116
|
_cameraBackX /= bl;
|
|
93
117
|
_cameraBackY /= bl;
|
|
94
118
|
_cameraBackZ /= bl;
|
|
119
|
+
return true;
|
|
95
120
|
}
|
|
96
121
|
// Writes a camera-facing world matrix into `out` from the module-scratch camera basis, the billboard's
|
|
97
122
|
// world position (`_position`) and scale (`_scale`), and its facing `mode`. Local +X maps to the
|
|
@@ -235,4 +260,5 @@ let _cameraUpZ = 0;
|
|
|
235
260
|
let _cameraBackX = 0;
|
|
236
261
|
let _cameraBackY = 0;
|
|
237
262
|
let _cameraBackZ = 1;
|
|
263
|
+
let billboardCameraBasisGuard = null;
|
|
238
264
|
//# sourceMappingURL=billboardCamera.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billboardCamera.js","sourceRoot":"","sources":["../src/billboardCamera.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,eAAe,GAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGlG,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,mGAAmG;AACnG,2FAA2F;AAC3F,sGAAsG;AACtG,sGAAsG;AACtG,mGAAmG;AACnG,EAAE;AACF,oGAAoG;AACpG,yGAAyG;AACzG,kCAAkC;AAClC,MAAM,UAAU,uBAAuB,CAAC,SAAoB,EAAE,MAA0B;IACtF,uBAAuB,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"billboardCamera.js","sourceRoot":"","sources":["../src/billboardCamera.ts"],"names":[],"mappings":"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"}
|
package/dist/contract.d.ts
CHANGED
package/dist/contract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,uBAAuB,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,QAAQ,CAAC;AACvB,cAAc,uBAAuB,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
|
package/dist/contract.js
CHANGED
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,uBAAuB,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,QAAQ,CAAC;AACvB,cAAc,uBAAuB,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableScene3DGuards.d.ts","sourceRoot":"","sources":["../src/enableScene3DGuards.ts"],"names":[],"mappings":"AAMA,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C;AAKD,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { logOnce } from '@flighthq/log/contract';
|
|
2
|
+
import { LogLevel } from '@flighthq/types/contract';
|
|
3
|
+
import { setBillboardCameraBasisGuard } from './billboardCamera';
|
|
4
|
+
export function areScene3DGuardsEnabled() {
|
|
5
|
+
return scene3DGuardsEnabled;
|
|
6
|
+
}
|
|
7
|
+
export function disableScene3DGuards() {
|
|
8
|
+
setBillboardCameraBasisGuard(null);
|
|
9
|
+
scene3DGuardsEnabled = false;
|
|
10
|
+
}
|
|
11
|
+
// Installs opt-in diagnostics for scene operations that decline rather than compute a result. The core
|
|
12
|
+
// modules stay message-free, so an application that omits this one sheds both the text and
|
|
13
|
+
// @flighthq/log.
|
|
14
|
+
export function enableScene3DGuards() {
|
|
15
|
+
setBillboardCameraBasisGuard(warnOnDegenerateBillboardCameraBasis);
|
|
16
|
+
scene3DGuardsEnabled = true;
|
|
17
|
+
}
|
|
18
|
+
// Declining leaves the previous basis in place, so the billboards simply stop tracking the camera —
|
|
19
|
+
// they do not disappear and nothing throws. That is the whole reason this needs a report: the symptom
|
|
20
|
+
// is orientation quietly going stale, which reads as an animation bug rather than a camera one.
|
|
21
|
+
function warnOnDegenerateBillboardCameraBasis(camera) {
|
|
22
|
+
logOnce('scene3d:degenerate-billboard-camera-basis', LogLevel.Warn, () => ({
|
|
23
|
+
message: 'orientBillboardToCamera: the camera view matrix has no inverse, so the camera basis could not be derived and the billboards were left as they were. A view set from setCamera3DViewMatrix4FromMatrix4 is the usual cause — that setter copies an arbitrary matrix without validating it, while setCamera3DViewMatrix4FromLookAt cannot produce a singular view.',
|
|
24
|
+
view: Array.from(camera.view.m),
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
let scene3DGuardsEnabled = false;
|
|
28
|
+
//# sourceMappingURL=enableScene3DGuards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableScene3DGuards.js","sourceRoot":"","sources":["../src/enableScene3DGuards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAEjE,MAAM,UAAU,uBAAuB;IACrC,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACnC,oBAAoB,GAAG,KAAK,CAAC;AAC/B,CAAC;AAED,uGAAuG;AACvG,2FAA2F;AAC3F,iBAAiB;AACjB,MAAM,UAAU,mBAAmB;IACjC,4BAA4B,CAAC,oCAAoC,CAAC,CAAC;IACnE,oBAAoB,GAAG,IAAI,CAAC;AAC9B,CAAC;AAED,oGAAoG;AACpG,sGAAsG;AACtG,gGAAgG;AAChG,SAAS,oCAAoC,CAAC,MAA0B;IACtE,OAAO,CAAC,2CAA2C,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACzE,OAAO,EACL,iWAAiW;QACnW,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;KAChC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,IAAI,oBAAoB,GAAG,KAAK,CAAC"}
|
package/dist/sceneDocument.js
CHANGED
|
@@ -94,6 +94,9 @@ function applyDocumentSkins(document, nodes) {
|
|
|
94
94
|
jointMatrices: new Float32Array(joints.length * 16),
|
|
95
95
|
joints,
|
|
96
96
|
names: names.some((name) => name.length > 0) ? names : null,
|
|
97
|
+
// Filled per-frame alongside the palette by computeSkeleton3DJointMatrices: one 3x3 per joint as
|
|
98
|
+
// three padded vec4 columns, 12 floats, so it uploads to the GPU data texture without repacking.
|
|
99
|
+
normalMatrices: new Float32Array(joints.length * 12),
|
|
97
100
|
});
|
|
98
101
|
return { skeleton, skeletonRoot: null };
|
|
99
102
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sceneDocument.js","sourceRoot":"","sources":["../src/sceneDocument.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sceneDocument.js","sourceRoot":"","sources":["../src/sceneDocument.ts"],"names":[],"mappings":"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"}
|
package/dist/sceneNode.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sceneNode.d.ts","sourceRoot":"","sources":["../src/sceneNode.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sceneNode.d.ts","sourceRoot":"","sources":["../src/sceneNode.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAgB,MAAM,0BAA0B,CAAC;AAGvG,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,wBAAgB,YAAY,CAC1B,IAAI,GAAE,IAAiB,EACvB,GAAG,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAC9E,MAAM,CAKR;AAED,wBAAgB,mBAAmB,IAAI,aAAa,CAMnD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAExE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAEnE"}
|
package/dist/sceneNode.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createNode, createNodeRuntime, enableNodeSignals, getNodeRuntime, getNodeSignals, initAppearanceTrait, initTransform3DRuntimeTrait, initTransform3DTrait, } from '@flighthq/node/contract';
|
|
1
|
+
import { createNode, createNodeRuntime, enableNodeSignals, getNodeRuntime, getNodeSignals, initAppearanceRuntimeTrait, initAppearanceTrait, initTransform3DRuntimeTrait, initTransform3DTrait, } from '@flighthq/node/contract';
|
|
2
2
|
import { Node3DKind, Node3DTraitsKey } from '@flighthq/types/contract';
|
|
3
3
|
export { Node3DKind } from '@flighthq/types/contract';
|
|
4
4
|
export function createNode3D(kind = Node3DKind, obj) {
|
|
@@ -10,10 +10,7 @@ export function createNode3D(kind = Node3DKind, obj) {
|
|
|
10
10
|
export function createNode3DRuntime() {
|
|
11
11
|
const out = createNodeRuntime();
|
|
12
12
|
out.traits = Node3DTraitsKey;
|
|
13
|
-
out
|
|
14
|
-
out.worldAlphaUsingAppearanceId = -1;
|
|
15
|
-
out.worldAlphaUsingParentAppearanceId = -1;
|
|
16
|
-
out.worldAppearanceId = 0;
|
|
13
|
+
initAppearanceRuntimeTrait(out);
|
|
17
14
|
initTransform3DRuntimeTrait(out);
|
|
18
15
|
return out;
|
|
19
16
|
}
|
package/dist/sceneNode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sceneNode.js","sourceRoot":"","sources":["../src/sceneNode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,UAAU,YAAY,CAC1B,OAAa,UAAU,EACvB,GAA+E;IAE/E,MAAM,IAAI,GAAG,UAAU,CAAe,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACjF,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/B,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,IAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,iBAAiB,EAAiC,CAAC;IAC/D,GAAG,CAAC,MAAM,GAAG,eAAe,CAAC;IAC7B,
|
|
1
|
+
{"version":3,"file":"sceneNode.js","sourceRoot":"","sources":["../src/sceneNode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,0BAA0B,EAC1B,mBAAmB,EACnB,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,UAAU,YAAY,CAC1B,OAAa,UAAU,EACvB,GAA+E;IAE/E,MAAM,IAAI,GAAG,UAAU,CAAe,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACjF,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/B,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,IAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,iBAAiB,EAAiC,CAAC;IAC/D,GAAG,CAAC,MAAM,GAAG,eAAe,CAAC;IAC7B,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAChC,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,OAAO,cAAc,CAAC,MAAM,CAAkB,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/scene3d",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1-next.1041.35b950c",
|
|
4
4
|
"author": "Joshua Granick and other contributors",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -38,15 +38,16 @@
|
|
|
38
38
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@flighthq/adjustments": "0.3.
|
|
42
|
-
"@flighthq/animation": "0.3.
|
|
43
|
-
"@flighthq/entity": "0.3.
|
|
44
|
-
"@flighthq/geometry": "0.3.
|
|
45
|
-
"@flighthq/lighting": "0.3.
|
|
46
|
-
"@flighthq/
|
|
47
|
-
"@flighthq/
|
|
48
|
-
"@flighthq/
|
|
49
|
-
"@flighthq/
|
|
41
|
+
"@flighthq/adjustments": "0.3.1-next.1041.35b950c",
|
|
42
|
+
"@flighthq/animation": "0.3.1-next.1041.35b950c",
|
|
43
|
+
"@flighthq/entity": "0.3.1-next.1041.35b950c",
|
|
44
|
+
"@flighthq/geometry": "0.3.1-next.1041.35b950c",
|
|
45
|
+
"@flighthq/lighting": "0.3.1-next.1041.35b950c",
|
|
46
|
+
"@flighthq/log": "0.3.1-next.1041.35b950c",
|
|
47
|
+
"@flighthq/materials": "0.3.1-next.1041.35b950c",
|
|
48
|
+
"@flighthq/mesh": "0.3.1-next.1041.35b950c",
|
|
49
|
+
"@flighthq/node": "0.3.1-next.1041.35b950c",
|
|
50
|
+
"@flighthq/types": "0.3.1-next.1041.35b950c"
|
|
50
51
|
},
|
|
51
52
|
"devDependencies": {
|
|
52
53
|
"@flighthq/camera": "*",
|
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createCamera3D,
|
|
3
|
+
setCamera3DViewMatrix4FromMatrix4,
|
|
3
4
|
createPerspectiveProjection,
|
|
4
5
|
setCamera3DViewMatrix4FromLookAt,
|
|
5
6
|
} from '@flighthq/camera/contract';
|
|
6
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
copyQuaternion,
|
|
9
|
+
createMatrix4,
|
|
10
|
+
createQuaternion,
|
|
11
|
+
setQuaternionFromAxisAngle,
|
|
12
|
+
setVector3,
|
|
13
|
+
} from '@flighthq/geometry/contract';
|
|
7
14
|
import { createPlaneMeshGeometry } from '@flighthq/mesh/contract';
|
|
8
15
|
import { addNodeChild, getNodeWorldMatrix4, invalidateNodeLocalTransform } from '@flighthq/node/contract';
|
|
9
16
|
import type { Camera3D } from '@flighthq/types/contract';
|
|
10
17
|
import { describe, expect, it } from 'vitest';
|
|
11
18
|
|
|
12
19
|
import { createBillboard } from './billboard';
|
|
13
|
-
import {
|
|
20
|
+
import {
|
|
21
|
+
orientBillboardToCamera,
|
|
22
|
+
orientScene3DBillboardsToCamera,
|
|
23
|
+
setBillboardCameraBasisGuard,
|
|
24
|
+
} from './billboardCamera';
|
|
14
25
|
import { createMesh } from './mesh';
|
|
15
26
|
import { createNode3D } from './sceneNode';
|
|
16
27
|
|
|
@@ -26,6 +37,32 @@ function cameraLookingFrom(ex: number, ey: number, ez: number): Camera3D {
|
|
|
26
37
|
}
|
|
27
38
|
|
|
28
39
|
describe('orientBillboardToCamera', () => {
|
|
40
|
+
// The setter split matters here and is worth keeping visible: a lookAt camera CANNOT reach this branch
|
|
41
|
+
// (setMatrix4LookAt reseeds both degenerate bases), so the only way in is an arbitrary view matrix
|
|
42
|
+
// copied through setCamera3DViewMatrix4FromMatrix4, which validates nothing.
|
|
43
|
+
it('declines and leaves the billboard untouched when the view matrix has no inverse', () => {
|
|
44
|
+
const billboard = createBillboard(createPlaneMeshGeometry(), [null], 'full');
|
|
45
|
+
setVector3(billboard.position, 1, 2, 3);
|
|
46
|
+
invalidateNodeLocalTransform(billboard);
|
|
47
|
+
const before = Array.from(getNodeWorldMatrix4(billboard).m);
|
|
48
|
+
|
|
49
|
+
const camera = createCamera3D({
|
|
50
|
+
far: 100,
|
|
51
|
+
near: 0.1,
|
|
52
|
+
projection: createPerspectiveProjection({ aspect: 1, fovY: 1 }),
|
|
53
|
+
});
|
|
54
|
+
setCamera3DViewMatrix4FromMatrix4(camera, createMatrix4(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
|
|
55
|
+
|
|
56
|
+
expect(orientBillboardToCamera(billboard, camera)).toBe(false);
|
|
57
|
+
expect(Array.from(getNodeWorldMatrix4(billboard).m)).toEqual(before);
|
|
58
|
+
for (const value of getNodeWorldMatrix4(billboard).m) expect(Number.isFinite(value)).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('reports true for an invertible view', () => {
|
|
62
|
+
const billboard = createBillboard(createPlaneMeshGeometry(), [null], 'full');
|
|
63
|
+
expect(orientBillboardToCamera(billboard, cameraLookingFrom(0, 0, 10))).toBe(true);
|
|
64
|
+
});
|
|
65
|
+
|
|
29
66
|
it('full mode at the origin faces a +Z camera with an identity basis', () => {
|
|
30
67
|
const billboard = createBillboard(createPlaneMeshGeometry(), [null], 'full');
|
|
31
68
|
orientBillboardToCamera(billboard, cameraLookingFrom(0, 0, 10));
|
|
@@ -154,3 +191,23 @@ describe('orientScene3DBillboardsToCamera', () => {
|
|
|
154
191
|
expect(m[8]).toBeCloseTo(0, 5);
|
|
155
192
|
});
|
|
156
193
|
});
|
|
194
|
+
|
|
195
|
+
describe('setBillboardCameraBasisGuard', () => {
|
|
196
|
+
it('is notified on the decline and never on an invertible view', () => {
|
|
197
|
+
const seen: number[] = [];
|
|
198
|
+
setBillboardCameraBasisGuard((camera) => seen.push(camera.view.m[0]));
|
|
199
|
+
try {
|
|
200
|
+
const camera = createCamera3D({
|
|
201
|
+
far: 100,
|
|
202
|
+
near: 0.1,
|
|
203
|
+
projection: createPerspectiveProjection({ aspect: 1, fovY: 1 }),
|
|
204
|
+
});
|
|
205
|
+
setCamera3DViewMatrix4FromMatrix4(camera, createMatrix4(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
|
|
206
|
+
orientBillboardToCamera(createBillboard(createPlaneMeshGeometry(), [null], 'full'), camera);
|
|
207
|
+
orientBillboardToCamera(createBillboard(createPlaneMeshGeometry(), [null], 'full'), cameraLookingFrom(0, 0, 10));
|
|
208
|
+
expect(seen).toEqual([0]);
|
|
209
|
+
} finally {
|
|
210
|
+
setBillboardCameraBasisGuard(null);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
});
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createCamera3D,
|
|
3
|
+
createPerspectiveProjection,
|
|
4
|
+
setCamera3DViewMatrix4FromMatrix4,
|
|
5
|
+
} from '@flighthq/camera/contract';
|
|
6
|
+
import { createMatrix4 } from '@flighthq/geometry/contract';
|
|
7
|
+
import { setLogSink } from '@flighthq/log/contract';
|
|
8
|
+
import { createPlaneMeshGeometry } from '@flighthq/mesh/contract';
|
|
9
|
+
import type { Camera3D, LogEntry } from '@flighthq/types/contract';
|
|
10
|
+
import { afterEach, describe, expect, test } from 'vitest';
|
|
11
|
+
|
|
12
|
+
import { createBillboard } from './billboard';
|
|
13
|
+
import { orientBillboardToCamera } from './billboardCamera';
|
|
14
|
+
import { areScene3DGuardsEnabled, disableScene3DGuards, enableScene3DGuards } from './enableScene3DGuards';
|
|
15
|
+
|
|
16
|
+
describe('areScene3DGuardsEnabled', () => {
|
|
17
|
+
test('reports whether the guards are installed', () => {
|
|
18
|
+
expect(areScene3DGuardsEnabled()).toBe(false);
|
|
19
|
+
enableScene3DGuards();
|
|
20
|
+
expect(areScene3DGuardsEnabled()).toBe(true);
|
|
21
|
+
disableScene3DGuards();
|
|
22
|
+
expect(areScene3DGuardsEnabled()).toBe(false);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
describe('disableScene3DGuards', () => {
|
|
27
|
+
test('leaves the core silent again once removed', () => {
|
|
28
|
+
enableScene3DGuards();
|
|
29
|
+
disableScene3DGuards();
|
|
30
|
+
expect(captureLog(() => orientBillboardToCamera(billboard(), singularCamera()))).toHaveLength(0);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
describe('enableScene3DGuards', () => {
|
|
35
|
+
// `logOnce` keys this condition once and has no reset, so exactly ONE test may trigger it — a second
|
|
36
|
+
// would be deduplicated away and assert nothing while still looking green.
|
|
37
|
+
test('warns, naming the setter that can produce it, when the camera basis cannot be derived', () => {
|
|
38
|
+
enableScene3DGuards();
|
|
39
|
+
const entries = captureLog(() => orientBillboardToCamera(billboard(), singularCamera()));
|
|
40
|
+
expect(entries).toHaveLength(1);
|
|
41
|
+
expect(String((entries[0].data as { message: string }).message)).toContain('setCamera3DViewMatrix4FromMatrix4');
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
afterEach(() => {
|
|
46
|
+
disableScene3DGuards();
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
function billboard(): ReturnType<typeof createBillboard> {
|
|
50
|
+
return createBillboard(createPlaneMeshGeometry(), [null], 'full');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function captureLog(run: () => void): LogEntry[] {
|
|
54
|
+
const entries: LogEntry[] = [];
|
|
55
|
+
setLogSink((entry) => entries.push(entry));
|
|
56
|
+
try {
|
|
57
|
+
run();
|
|
58
|
+
} finally {
|
|
59
|
+
setLogSink(null);
|
|
60
|
+
}
|
|
61
|
+
return entries;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function singularCamera(): Camera3D {
|
|
65
|
+
const camera = createCamera3D({
|
|
66
|
+
far: 100,
|
|
67
|
+
near: 0.1,
|
|
68
|
+
projection: createPerspectiveProjection({ aspect: 1, fovY: 1 }),
|
|
69
|
+
});
|
|
70
|
+
setCamera3DViewMatrix4FromMatrix4(camera, createMatrix4(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
|
|
71
|
+
return camera;
|
|
72
|
+
}
|
|
@@ -14,6 +14,7 @@ import { createNode3D } from './sceneNode';
|
|
|
14
14
|
|
|
15
15
|
function embeddedRef(mimeType: string | null = 'image/png'): ImageResourceReference {
|
|
16
16
|
return {
|
|
17
|
+
alphaType: 'straight',
|
|
17
18
|
bytes: new Uint8Array([1, 2, 3]),
|
|
18
19
|
failure: null,
|
|
19
20
|
kind: ImageResourceReferenceKind.Embedded,
|