@clipkit/runtime 1.0.0
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/LICENSE +54 -0
- package/README.md +98 -0
- package/dist/animation/easings.d.ts +9 -0
- package/dist/animation/easings.d.ts.map +1 -0
- package/dist/animation/easings.js +230 -0
- package/dist/animation/easings.js.map +1 -0
- package/dist/animation/expr.d.ts +44 -0
- package/dist/animation/expr.d.ts.map +1 -0
- package/dist/animation/expr.js +236 -0
- package/dist/animation/expr.js.map +1 -0
- package/dist/animation/keyframes.d.ts +23 -0
- package/dist/animation/keyframes.d.ts.map +1 -0
- package/dist/animation/keyframes.js +117 -0
- package/dist/animation/keyframes.js.map +1 -0
- package/dist/animation/motion-path.d.ts +18 -0
- package/dist/animation/motion-path.d.ts.map +1 -0
- package/dist/animation/motion-path.js +269 -0
- package/dist/animation/motion-path.js.map +1 -0
- package/dist/animation/noise1d.d.ts +5 -0
- package/dist/animation/noise1d.d.ts.map +1 -0
- package/dist/animation/noise1d.js +27 -0
- package/dist/animation/noise1d.js.map +1 -0
- package/dist/animation/presets.d.ts +60 -0
- package/dist/animation/presets.d.ts.map +1 -0
- package/dist/animation/presets.js +221 -0
- package/dist/animation/presets.js.map +1 -0
- package/dist/assets/cache.d.ts +18 -0
- package/dist/assets/cache.d.ts.map +1 -0
- package/dist/assets/cache.js +56 -0
- package/dist/assets/cache.js.map +1 -0
- package/dist/assets/fonts.d.ts +20 -0
- package/dist/assets/fonts.d.ts.map +1 -0
- package/dist/assets/fonts.js +127 -0
- package/dist/assets/fonts.js.map +1 -0
- package/dist/assets/loader.d.ts +18 -0
- package/dist/assets/loader.d.ts.map +1 -0
- package/dist/assets/loader.js +87 -0
- package/dist/assets/loader.js.map +1 -0
- package/dist/assets/lut.d.ts +5 -0
- package/dist/assets/lut.d.ts.map +1 -0
- package/dist/assets/lut.js +77 -0
- package/dist/assets/lut.js.map +1 -0
- package/dist/assets/media-time.d.ts +31 -0
- package/dist/assets/media-time.d.ts.map +1 -0
- package/dist/assets/media-time.js +65 -0
- package/dist/assets/media-time.js.map +1 -0
- package/dist/assets/mp4-frame-source.d.ts +44 -0
- package/dist/assets/mp4-frame-source.d.ts.map +1 -0
- package/dist/assets/mp4-frame-source.js +387 -0
- package/dist/assets/mp4-frame-source.js.map +1 -0
- package/dist/audio/encoder.d.ts +31 -0
- package/dist/audio/encoder.d.ts.map +1 -0
- package/dist/audio/encoder.js +96 -0
- package/dist/audio/encoder.js.map +1 -0
- package/dist/audio/fades.d.ts +16 -0
- package/dist/audio/fades.d.ts.map +1 -0
- package/dist/audio/fades.js +43 -0
- package/dist/audio/fades.js.map +1 -0
- package/dist/audio/limiter.d.ts +8 -0
- package/dist/audio/limiter.d.ts.map +1 -0
- package/dist/audio/limiter.js +39 -0
- package/dist/audio/limiter.js.map +1 -0
- package/dist/audio/loader.d.ts +6 -0
- package/dist/audio/loader.d.ts.map +1 -0
- package/dist/audio/loader.js +42 -0
- package/dist/audio/loader.js.map +1 -0
- package/dist/audio/mixer.d.ts +17 -0
- package/dist/audio/mixer.d.ts.map +1 -0
- package/dist/audio/mixer.js +204 -0
- package/dist/audio/mixer.js.map +1 -0
- package/dist/audio/varispeed.d.ts +24 -0
- package/dist/audio/varispeed.d.ts.map +1 -0
- package/dist/audio/varispeed.js +114 -0
- package/dist/audio/varispeed.js.map +1 -0
- package/dist/audio/wav.d.ts +6 -0
- package/dist/audio/wav.d.ts.map +1 -0
- package/dist/audio/wav.js +62 -0
- package/dist/audio/wav.js.map +1 -0
- package/dist/backend/backend.d.ts +579 -0
- package/dist/backend/backend.d.ts.map +1 -0
- package/dist/backend/backend.js +17 -0
- package/dist/backend/backend.js.map +1 -0
- package/dist/backend/webgl-backend.d.ts +97 -0
- package/dist/backend/webgl-backend.d.ts.map +1 -0
- package/dist/backend/webgl-backend.js +2142 -0
- package/dist/backend/webgl-backend.js.map +1 -0
- package/dist/backend/webgpu-backend.d.ts +121 -0
- package/dist/backend/webgpu-backend.d.ts.map +1 -0
- package/dist/backend/webgpu-backend.js +2481 -0
- package/dist/backend/webgpu-backend.js.map +1 -0
- package/dist/compositor/bitfont.d.ts +8 -0
- package/dist/compositor/bitfont.d.ts.map +1 -0
- package/dist/compositor/bitfont.js +52 -0
- package/dist/compositor/bitfont.js.map +1 -0
- package/dist/compositor/camera.d.ts +5 -0
- package/dist/compositor/camera.d.ts.map +1 -0
- package/dist/compositor/camera.js +114 -0
- package/dist/compositor/camera.js.map +1 -0
- package/dist/compositor/color.d.ts +26 -0
- package/dist/compositor/color.d.ts.map +1 -0
- package/dist/compositor/color.js +189 -0
- package/dist/compositor/color.js.map +1 -0
- package/dist/compositor/element-renderers/caption.d.ts +4 -0
- package/dist/compositor/element-renderers/caption.d.ts.map +1 -0
- package/dist/compositor/element-renderers/caption.js +376 -0
- package/dist/compositor/element-renderers/caption.js.map +1 -0
- package/dist/compositor/element-renderers/group.d.ts +12 -0
- package/dist/compositor/element-renderers/group.d.ts.map +1 -0
- package/dist/compositor/element-renderers/group.js +259 -0
- package/dist/compositor/element-renderers/group.js.map +1 -0
- package/dist/compositor/element-renderers/image.d.ts +4 -0
- package/dist/compositor/element-renderers/image.d.ts.map +1 -0
- package/dist/compositor/element-renderers/image.js +97 -0
- package/dist/compositor/element-renderers/image.js.map +1 -0
- package/dist/compositor/element-renderers/lit.d.ts +6 -0
- package/dist/compositor/element-renderers/lit.d.ts.map +1 -0
- package/dist/compositor/element-renderers/lit.js +82 -0
- package/dist/compositor/element-renderers/lit.js.map +1 -0
- package/dist/compositor/element-renderers/particles.d.ts +4 -0
- package/dist/compositor/element-renderers/particles.d.ts.map +1 -0
- package/dist/compositor/element-renderers/particles.js +212 -0
- package/dist/compositor/element-renderers/particles.js.map +1 -0
- package/dist/compositor/element-renderers/shape.d.ts +4 -0
- package/dist/compositor/element-renderers/shape.d.ts.map +1 -0
- package/dist/compositor/element-renderers/shape.js +171 -0
- package/dist/compositor/element-renderers/shape.js.map +1 -0
- package/dist/compositor/element-renderers/svg.d.ts +4 -0
- package/dist/compositor/element-renderers/svg.d.ts.map +1 -0
- package/dist/compositor/element-renderers/svg.js +210 -0
- package/dist/compositor/element-renderers/svg.js.map +1 -0
- package/dist/compositor/element-renderers/text.d.ts +25 -0
- package/dist/compositor/element-renderers/text.d.ts.map +1 -0
- package/dist/compositor/element-renderers/text.js +1358 -0
- package/dist/compositor/element-renderers/text.js.map +1 -0
- package/dist/compositor/element-renderers/video.d.ts +12 -0
- package/dist/compositor/element-renderers/video.d.ts.map +1 -0
- package/dist/compositor/element-renderers/video.js +109 -0
- package/dist/compositor/element-renderers/video.js.map +1 -0
- package/dist/compositor/fit.d.ts +18 -0
- package/dist/compositor/fit.d.ts.map +1 -0
- package/dist/compositor/fit.js +106 -0
- package/dist/compositor/fit.js.map +1 -0
- package/dist/compositor/lighting.d.ts +63 -0
- package/dist/compositor/lighting.d.ts.map +1 -0
- package/dist/compositor/lighting.js +141 -0
- package/dist/compositor/lighting.js.map +1 -0
- package/dist/compositor/mat4.d.ts +88 -0
- package/dist/compositor/mat4.d.ts.map +1 -0
- package/dist/compositor/mat4.js +245 -0
- package/dist/compositor/mat4.js.map +1 -0
- package/dist/compositor/project.d.ts +24 -0
- package/dist/compositor/project.d.ts.map +1 -0
- package/dist/compositor/project.js +105 -0
- package/dist/compositor/project.js.map +1 -0
- package/dist/compositor/render-context.d.ts +194 -0
- package/dist/compositor/render-context.d.ts.map +1 -0
- package/dist/compositor/render-context.js +10 -0
- package/dist/compositor/render-context.js.map +1 -0
- package/dist/compositor/resolve.d.ts +80 -0
- package/dist/compositor/resolve.d.ts.map +1 -0
- package/dist/compositor/resolve.js +276 -0
- package/dist/compositor/resolve.js.map +1 -0
- package/dist/compositor/scene.d.ts +10 -0
- package/dist/compositor/scene.d.ts.map +1 -0
- package/dist/compositor/scene.js +658 -0
- package/dist/compositor/scene.js.map +1 -0
- package/dist/compositor/transform.d.ts +73 -0
- package/dist/compositor/transform.d.ts.map +1 -0
- package/dist/compositor/transform.js +229 -0
- package/dist/compositor/transform.js.map +1 -0
- package/dist/compositor/unit.d.ts +27 -0
- package/dist/compositor/unit.d.ts.map +1 -0
- package/dist/compositor/unit.js +74 -0
- package/dist/compositor/unit.js.map +1 -0
- package/dist/encoder/exporter.d.ts +95 -0
- package/dist/encoder/exporter.d.ts.map +1 -0
- package/dist/encoder/exporter.js +341 -0
- package/dist/encoder/exporter.js.map +1 -0
- package/dist/encoder/index.d.ts +3 -0
- package/dist/encoder/index.d.ts.map +1 -0
- package/dist/encoder/index.js +2 -0
- package/dist/encoder/index.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +13 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +32 -0
- package/dist/logger.js.map +1 -0
- package/dist/runtime.d.ts +216 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1012 -0
- package/dist/runtime.js.map +1 -0
- package/dist/svg/morph.d.ts +6 -0
- package/dist/svg/morph.d.ts.map +1 -0
- package/dist/svg/morph.js +62 -0
- package/dist/svg/morph.js.map +1 -0
- package/dist/svg/svg-renderer.d.ts +18 -0
- package/dist/svg/svg-renderer.d.ts.map +1 -0
- package/dist/svg/svg-renderer.js +142 -0
- package/dist/svg/svg-renderer.js.map +1 -0
- package/dist/text/caption-chunk.d.ts +17 -0
- package/dist/text/caption-chunk.d.ts.map +1 -0
- package/dist/text/caption-chunk.js +76 -0
- package/dist/text/caption-chunk.js.map +1 -0
- package/dist/text/font-atlas.d.ts +63 -0
- package/dist/text/font-atlas.d.ts.map +1 -0
- package/dist/text/font-atlas.js +225 -0
- package/dist/text/font-atlas.js.map +1 -0
- package/dist/text/measure.d.ts +38 -0
- package/dist/text/measure.d.ts.map +1 -0
- package/dist/text/measure.js +164 -0
- package/dist/text/measure.js.map +1 -0
- package/dist/text/text-animation.d.ts +52 -0
- package/dist/text/text-animation.d.ts.map +1 -0
- package/dist/text/text-animation.js +133 -0
- package/dist/text/text-animation.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lighting.js","sourceRoot":"","sources":["../../src/compositor/lighting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { Mat4 } from './render-context.js';
|
|
2
|
+
export declare function mat4Identity(): Mat4;
|
|
3
|
+
/**
|
|
4
|
+
* Multiply m1 * m2 — apply m1's transform AFTER m2's. Used when
|
|
5
|
+
* stacking: the parent group's matrix is multiplied by the child's
|
|
6
|
+
* local matrix to get the cumulative one.
|
|
7
|
+
*/
|
|
8
|
+
export declare function mat4Multiply(m1: Mat4, m2: Mat4): Mat4;
|
|
9
|
+
/**
|
|
10
|
+
* Apply matrix to a point in the z=0 plane: returns [worldX, worldY].
|
|
11
|
+
* General matrices include the perspective divide; affine matrices use
|
|
12
|
+
* the exact 2D expressions.
|
|
13
|
+
*/
|
|
14
|
+
export declare function mat4ApplyToPoint(m: Mat4, x: number, y: number): [number, number];
|
|
15
|
+
/**
|
|
16
|
+
* Extract the in-plane rotation angle (degrees) baked into the matrix —
|
|
17
|
+
* the screen-space angle of the transformed x basis vector.
|
|
18
|
+
*/
|
|
19
|
+
export declare function mat4Rotation(m: Mat4): number;
|
|
20
|
+
/** Extract the scale factor along the X axis (handles negative scale). */
|
|
21
|
+
export declare function mat4ScaleX(m: Mat4): number;
|
|
22
|
+
/** Extract the scale factor along the Y axis. */
|
|
23
|
+
export declare function mat4ScaleY(m: Mat4): number;
|
|
24
|
+
/**
|
|
25
|
+
* Apply the current group stack's transform to a local draw spec.
|
|
26
|
+
* Each element renderer calls this with its locally-computed center
|
|
27
|
+
* coordinates, rotation, and opacity; the helper returns world-space
|
|
28
|
+
* values ready for the backend. When the model matrix is identity (the
|
|
29
|
+
* root case), this is a no-op.
|
|
30
|
+
*
|
|
31
|
+
* Valid ONLY for affine chains — this decomposition cannot represent
|
|
32
|
+
* perspective. 3D subtrees take the full-matrix hand-off instead
|
|
33
|
+
* (MAT4-PLAN items 3/6).
|
|
34
|
+
*/
|
|
35
|
+
export declare function applyModelTransform(modelMatrix: Mat4, opacityFactor: number, localCx: number, localCy: number, localRotation: number, localOpacity01: number, localWidth: number, localHeight: number): {
|
|
36
|
+
cx: number;
|
|
37
|
+
cy: number;
|
|
38
|
+
rotation: number;
|
|
39
|
+
opacity01: number;
|
|
40
|
+
width: number;
|
|
41
|
+
height: number;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Build a Mat4 for a translate-rotate-scale transform around an anchor
|
|
45
|
+
* point inside a (width × height) box. Mirrors CSS transform semantics
|
|
46
|
+
* with `transform-origin: anchor_x anchor_y`; same float expressions as
|
|
47
|
+
* the CKP/1.0 Mat3 builder.
|
|
48
|
+
*
|
|
49
|
+
* 1. Translate to (x, y)
|
|
50
|
+
* 2. Translate by -(width * x_anchor, height * y_anchor) to put the
|
|
51
|
+
* anchor point at the position
|
|
52
|
+
* 3. Around the anchor: rotate, scale
|
|
53
|
+
*
|
|
54
|
+
* `anchorX` and `anchorY` are fractions in [0, 1].
|
|
55
|
+
*/
|
|
56
|
+
/**
|
|
57
|
+
* The CKP/1.0 full-matrix hand-off for leaf quads (§4.4): compose the
|
|
58
|
+
* element's pixel-space local quad matrix (position / size / rotations
|
|
59
|
+
* / skew / z) with the model chain and return the 16 values backends
|
|
60
|
+
* accept as `params.transform`. Renderers call this INSTEAD of
|
|
61
|
+
* applyModelTransform whenever the element carries 3D fields or the
|
|
62
|
+
* chain is no longer affine.
|
|
63
|
+
*/
|
|
64
|
+
export declare function quadWorldTransform(model: Mat4, cx: number, cy: number, width: number, height: number, rotationDeg: number, skewXDeg: number, skewYDeg: number, t3d: {
|
|
65
|
+
xRot: number;
|
|
66
|
+
yRot: number;
|
|
67
|
+
z: number;
|
|
68
|
+
} | null): number[];
|
|
69
|
+
/**
|
|
70
|
+
* Pivot-conjugated plane matrix: T(px, py, z) · Rz · Ry · Rx ·
|
|
71
|
+
* T(−px, −py). Multi-quad renderers (text glyphs, caption blocks,
|
|
72
|
+
* particles) compose this ONCE per element so the whole block tilts as
|
|
73
|
+
* a single plane in D1 order (Rz outermost, matching leaf quads), then
|
|
74
|
+
* run their per-quad 2D math unrotated inside it.
|
|
75
|
+
*/
|
|
76
|
+
export declare function mat4PlaneAt(px: number, py: number, z: number, zRotDeg: number, yRotDeg: number, xRotDeg: number): Mat4;
|
|
77
|
+
/**
|
|
78
|
+
* 3D variant of mat4TRS for groups carrying CKP/1.0 transform fields
|
|
79
|
+
* (§4.4.1): T(x, y, z) · Rz · Ry · Rx · S(sx, sy, 1) · T(−anchor).
|
|
80
|
+
* Same anchor-pivot semantics as mat4TRS; rotation conventions match
|
|
81
|
+
* quadMatrix3D (Rz clockwise in Y-down pixel space; +y_rotation turns
|
|
82
|
+
* the right edge away; +x_rotation tips the top edge away). Returns a
|
|
83
|
+
* general (non-aff) matrix — chains through it take the full-matrix
|
|
84
|
+
* hand-off, never the 2D decomposition.
|
|
85
|
+
*/
|
|
86
|
+
export declare function mat4TRS3D(x: number, y: number, z: number, width: number, height: number, anchorX: number, anchorY: number, zRotDeg: number, yRotDeg: number, xRotDeg: number, scaleX: number, scaleY?: number): Mat4;
|
|
87
|
+
export declare function mat4TRS(x: number, y: number, width: number, height: number, anchorX: number, anchorY: number, rotationDeg: number, scaleX: number, scaleY?: number): Mat4;
|
|
88
|
+
//# sourceMappingURL=mat4.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mat4.d.ts","sourceRoot":"","sources":["../../src/compositor/mat4.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAGhD,wBAAgB,YAAY,IAAI,IAAI,CAKnC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,IAAI,CA0BrD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAShF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAE5C;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAE1C;AAED,iDAAiD;AACjD,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAE1C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,IAAI,EACjB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAUhG;AAED;;;;;;;;;;;;GAYG;AACH;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,EACX,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACpD,MAAM,EAAE,CASV;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,MAAM,EACT,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,IAAI,CA6BN;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAe,GACtB,IAAI,CAmCN;AAED,wBAAgB,OAAO,CACrB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAe,GACtB,IAAI,CAoBN"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
// 4×4 transform helpers for the group transform stack (CKP/1.0 §4.4).
|
|
2
|
+
//
|
|
3
|
+
// Column-major, f64 (plain number[] — NOT Float32Array: the compositor
|
|
4
|
+
// math must stay double-precision so 2D documents keep their exact
|
|
5
|
+
// CKP/1.0 float behavior). Element e[col*4 + row]:
|
|
6
|
+
//
|
|
7
|
+
// [ e0 e4 e8 e12 ] 2D-affine embedding: a = e0, b = e1,
|
|
8
|
+
// [ e1 e5 e9 e13 ] c = e4, d = e5,
|
|
9
|
+
// [ e2 e6 e10 e14 ] tx = e12, ty = e13
|
|
10
|
+
// [ e3 e7 e11 e15 ]
|
|
11
|
+
//
|
|
12
|
+
// The `aff` flag marks matrices whose z/w rows and columns are trivial
|
|
13
|
+
// (a pure 2D affine embedded in 4×4). When BOTH operands are affine,
|
|
14
|
+
// multiply/apply run the exact same float expressions the Mat3 stack
|
|
15
|
+
// used — so documents with no 3D fields and no camera produce
|
|
16
|
+
// bit-identical doubles, and therefore byte-identical frames, to the
|
|
17
|
+
// CKP/1.0 pipeline (the MAT4-PLAN item-2 equivalence gate). The general
|
|
18
|
+
// 16-term path engages only once real 3D enters a chain.
|
|
19
|
+
//
|
|
20
|
+
// Pure pixel math, no DOMMatrix (absent in some worker environments).
|
|
21
|
+
// All operations return new matrices — the stack is push/pop by
|
|
22
|
+
// reassignment, never mutation.
|
|
23
|
+
import { quadMatrix3D } from './transform.js';
|
|
24
|
+
export function mat4Identity() {
|
|
25
|
+
return {
|
|
26
|
+
e: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
|
|
27
|
+
aff: true,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Multiply m1 * m2 — apply m1's transform AFTER m2's. Used when
|
|
32
|
+
* stacking: the parent group's matrix is multiplied by the child's
|
|
33
|
+
* local matrix to get the cumulative one.
|
|
34
|
+
*/
|
|
35
|
+
export function mat4Multiply(m1, m2) {
|
|
36
|
+
if (m1.aff && m2.aff) {
|
|
37
|
+
const a1 = m1.e[0], b1 = m1.e[1], c1 = m1.e[4], d1 = m1.e[5], tx1 = m1.e[12], ty1 = m1.e[13];
|
|
38
|
+
const a2 = m2.e[0], b2 = m2.e[1], c2 = m2.e[4], d2 = m2.e[5], tx2 = m2.e[12], ty2 = m2.e[13];
|
|
39
|
+
return {
|
|
40
|
+
e: [
|
|
41
|
+
a1 * a2 + c1 * b2, b1 * a2 + d1 * b2, 0, 0,
|
|
42
|
+
a1 * c2 + c1 * d2, b1 * c2 + d1 * d2, 0, 0,
|
|
43
|
+
0, 0, 1, 0,
|
|
44
|
+
a1 * tx2 + c1 * ty2 + tx1, b1 * tx2 + d1 * ty2 + ty1, 0, 1,
|
|
45
|
+
],
|
|
46
|
+
aff: true,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const a = m1.e, b = m2.e;
|
|
50
|
+
const e = new Array(16);
|
|
51
|
+
for (let col = 0; col < 4; col++) {
|
|
52
|
+
for (let row = 0; row < 4; row++) {
|
|
53
|
+
e[col * 4 + row] =
|
|
54
|
+
a[row] * b[col * 4] +
|
|
55
|
+
a[4 + row] * b[col * 4 + 1] +
|
|
56
|
+
a[8 + row] * b[col * 4 + 2] +
|
|
57
|
+
a[12 + row] * b[col * 4 + 3];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return { e, aff: false };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Apply matrix to a point in the z=0 plane: returns [worldX, worldY].
|
|
64
|
+
* General matrices include the perspective divide; affine matrices use
|
|
65
|
+
* the exact 2D expressions.
|
|
66
|
+
*/
|
|
67
|
+
export function mat4ApplyToPoint(m, x, y) {
|
|
68
|
+
if (m.aff) {
|
|
69
|
+
return [m.e[0] * x + m.e[4] * y + m.e[12], m.e[1] * x + m.e[5] * y + m.e[13]];
|
|
70
|
+
}
|
|
71
|
+
const e = m.e;
|
|
72
|
+
const px = e[0] * x + e[4] * y + e[12];
|
|
73
|
+
const py = e[1] * x + e[5] * y + e[13];
|
|
74
|
+
const pw = e[3] * x + e[7] * y + e[15];
|
|
75
|
+
return pw !== 0 && pw !== 1 ? [px / pw, py / pw] : [px, py];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Extract the in-plane rotation angle (degrees) baked into the matrix —
|
|
79
|
+
* the screen-space angle of the transformed x basis vector.
|
|
80
|
+
*/
|
|
81
|
+
export function mat4Rotation(m) {
|
|
82
|
+
return Math.atan2(m.e[1], m.e[0]) * (180 / Math.PI);
|
|
83
|
+
}
|
|
84
|
+
/** Extract the scale factor along the X axis (handles negative scale). */
|
|
85
|
+
export function mat4ScaleX(m) {
|
|
86
|
+
return Math.sqrt(m.e[0] * m.e[0] + m.e[1] * m.e[1]);
|
|
87
|
+
}
|
|
88
|
+
/** Extract the scale factor along the Y axis. */
|
|
89
|
+
export function mat4ScaleY(m) {
|
|
90
|
+
return Math.sqrt(m.e[4] * m.e[4] + m.e[5] * m.e[5]);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Apply the current group stack's transform to a local draw spec.
|
|
94
|
+
* Each element renderer calls this with its locally-computed center
|
|
95
|
+
* coordinates, rotation, and opacity; the helper returns world-space
|
|
96
|
+
* values ready for the backend. When the model matrix is identity (the
|
|
97
|
+
* root case), this is a no-op.
|
|
98
|
+
*
|
|
99
|
+
* Valid ONLY for affine chains — this decomposition cannot represent
|
|
100
|
+
* perspective. 3D subtrees take the full-matrix hand-off instead
|
|
101
|
+
* (MAT4-PLAN items 3/6).
|
|
102
|
+
*/
|
|
103
|
+
export function applyModelTransform(modelMatrix, opacityFactor, localCx, localCy, localRotation, localOpacity01, localWidth, localHeight) {
|
|
104
|
+
const [cx, cy] = mat4ApplyToPoint(modelMatrix, localCx, localCy);
|
|
105
|
+
return {
|
|
106
|
+
cx,
|
|
107
|
+
cy,
|
|
108
|
+
rotation: localRotation + mat4Rotation(modelMatrix),
|
|
109
|
+
opacity01: localOpacity01 * opacityFactor,
|
|
110
|
+
width: localWidth * mat4ScaleX(modelMatrix),
|
|
111
|
+
height: localHeight * mat4ScaleY(modelMatrix),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Build a Mat4 for a translate-rotate-scale transform around an anchor
|
|
116
|
+
* point inside a (width × height) box. Mirrors CSS transform semantics
|
|
117
|
+
* with `transform-origin: anchor_x anchor_y`; same float expressions as
|
|
118
|
+
* the CKP/1.0 Mat3 builder.
|
|
119
|
+
*
|
|
120
|
+
* 1. Translate to (x, y)
|
|
121
|
+
* 2. Translate by -(width * x_anchor, height * y_anchor) to put the
|
|
122
|
+
* anchor point at the position
|
|
123
|
+
* 3. Around the anchor: rotate, scale
|
|
124
|
+
*
|
|
125
|
+
* `anchorX` and `anchorY` are fractions in [0, 1].
|
|
126
|
+
*/
|
|
127
|
+
/**
|
|
128
|
+
* The CKP/1.0 full-matrix hand-off for leaf quads (§4.4): compose the
|
|
129
|
+
* element's pixel-space local quad matrix (position / size / rotations
|
|
130
|
+
* / skew / z) with the model chain and return the 16 values backends
|
|
131
|
+
* accept as `params.transform`. Renderers call this INSTEAD of
|
|
132
|
+
* applyModelTransform whenever the element carries 3D fields or the
|
|
133
|
+
* chain is no longer affine.
|
|
134
|
+
*/
|
|
135
|
+
export function quadWorldTransform(model, cx, cy, width, height, rotationDeg, skewXDeg, skewYDeg, t3d) {
|
|
136
|
+
const local = {
|
|
137
|
+
e: quadMatrix3D(cx, cy, width, height, rotationDeg, skewXDeg, skewYDeg, t3d?.xRot ?? 0, t3d?.yRot ?? 0, t3d?.z ?? 0),
|
|
138
|
+
aff: false,
|
|
139
|
+
};
|
|
140
|
+
return mat4Multiply(model, local).e;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Pivot-conjugated plane matrix: T(px, py, z) · Rz · Ry · Rx ·
|
|
144
|
+
* T(−px, −py). Multi-quad renderers (text glyphs, caption blocks,
|
|
145
|
+
* particles) compose this ONCE per element so the whole block tilts as
|
|
146
|
+
* a single plane in D1 order (Rz outermost, matching leaf quads), then
|
|
147
|
+
* run their per-quad 2D math unrotated inside it.
|
|
148
|
+
*/
|
|
149
|
+
export function mat4PlaneAt(px, py, z, zRotDeg, yRotDeg, xRotDeg) {
|
|
150
|
+
const rz = (zRotDeg * Math.PI) / 180;
|
|
151
|
+
const ry = (yRotDeg * Math.PI) / 180;
|
|
152
|
+
const rx = (xRotDeg * Math.PI) / 180;
|
|
153
|
+
const cz = Math.cos(rz), sz = Math.sin(rz);
|
|
154
|
+
const cyr = Math.cos(ry), syr = Math.sin(ry);
|
|
155
|
+
const cxr = Math.cos(rx), sxr = Math.sin(rx);
|
|
156
|
+
const rot = (vx, vy, vz) => {
|
|
157
|
+
const y1 = vy * cxr - vz * sxr;
|
|
158
|
+
const z1 = vy * sxr + vz * cxr;
|
|
159
|
+
const x2 = vx * cyr + z1 * syr;
|
|
160
|
+
const z2 = -vx * syr + z1 * cyr;
|
|
161
|
+
return [x2 * cz - y1 * sz, x2 * sz + y1 * cz, z2];
|
|
162
|
+
};
|
|
163
|
+
const c0 = rot(1, 0, 0);
|
|
164
|
+
const c1 = rot(0, 1, 0);
|
|
165
|
+
const c2 = rot(0, 0, 1);
|
|
166
|
+
return {
|
|
167
|
+
e: [
|
|
168
|
+
c0[0], c0[1], c0[2], 0,
|
|
169
|
+
c1[0], c1[1], c1[2], 0,
|
|
170
|
+
c2[0], c2[1], c2[2], 0,
|
|
171
|
+
px - px * c0[0] - py * c1[0],
|
|
172
|
+
py - px * c0[1] - py * c1[1],
|
|
173
|
+
z - px * c0[2] - py * c1[2],
|
|
174
|
+
1,
|
|
175
|
+
],
|
|
176
|
+
aff: false,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* 3D variant of mat4TRS for groups carrying CKP/1.0 transform fields
|
|
181
|
+
* (§4.4.1): T(x, y, z) · Rz · Ry · Rx · S(sx, sy, 1) · T(−anchor).
|
|
182
|
+
* Same anchor-pivot semantics as mat4TRS; rotation conventions match
|
|
183
|
+
* quadMatrix3D (Rz clockwise in Y-down pixel space; +y_rotation turns
|
|
184
|
+
* the right edge away; +x_rotation tips the top edge away). Returns a
|
|
185
|
+
* general (non-aff) matrix — chains through it take the full-matrix
|
|
186
|
+
* hand-off, never the 2D decomposition.
|
|
187
|
+
*/
|
|
188
|
+
export function mat4TRS3D(x, y, z, width, height, anchorX, anchorY, zRotDeg, yRotDeg, xRotDeg, scaleX, scaleY = scaleX) {
|
|
189
|
+
const wa = width * anchorX;
|
|
190
|
+
const ha = height * anchorY;
|
|
191
|
+
const rz = (zRotDeg * Math.PI) / 180;
|
|
192
|
+
const ry = (yRotDeg * Math.PI) / 180;
|
|
193
|
+
const rx = (xRotDeg * Math.PI) / 180;
|
|
194
|
+
const cz = Math.cos(rz), sz = Math.sin(rz);
|
|
195
|
+
const cyr = Math.cos(ry), syr = Math.sin(ry);
|
|
196
|
+
const cxr = Math.cos(rx), sxr = Math.sin(rx);
|
|
197
|
+
// Rz·Ry·Rx applied to a vector (vx, vy, vz):
|
|
198
|
+
// Rx: (vx, vy·cx − vz·sx, vy·sx + vz·cx)
|
|
199
|
+
// Ry: (x·cy + z·sy, y, −x·sy + z·cy)
|
|
200
|
+
// Rz (CW, Y-down): (x·cz − y·sz, x·sz + y·cz, z)
|
|
201
|
+
const rot = (vx, vy, vz) => {
|
|
202
|
+
const y1 = vy * cxr - vz * sxr;
|
|
203
|
+
const z1 = vy * sxr + vz * cxr;
|
|
204
|
+
const x2 = vx * cyr + z1 * syr;
|
|
205
|
+
const z2 = -vx * syr + z1 * cyr;
|
|
206
|
+
return [x2 * cz - y1 * sz, x2 * sz + y1 * cz, z2];
|
|
207
|
+
};
|
|
208
|
+
const c0 = rot(scaleX, 0, 0);
|
|
209
|
+
const c1 = rot(0, scaleY, 0);
|
|
210
|
+
const c2 = rot(0, 0, 1);
|
|
211
|
+
return {
|
|
212
|
+
e: [
|
|
213
|
+
c0[0], c0[1], c0[2], 0,
|
|
214
|
+
c1[0], c1[1], c1[2], 0,
|
|
215
|
+
c2[0], c2[1], c2[2], 0,
|
|
216
|
+
x - wa * c0[0] - ha * c1[0],
|
|
217
|
+
y - wa * c0[1] - ha * c1[1],
|
|
218
|
+
z - wa * c0[2] - ha * c1[2],
|
|
219
|
+
1,
|
|
220
|
+
],
|
|
221
|
+
aff: false,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
export function mat4TRS(x, y, width, height, anchorX, anchorY, rotationDeg, scaleX, scaleY = scaleX) {
|
|
225
|
+
const ax = width * anchorX;
|
|
226
|
+
const ay = height * anchorY;
|
|
227
|
+
const rad = (rotationDeg * Math.PI) / 180;
|
|
228
|
+
const cos = Math.cos(rad);
|
|
229
|
+
const sin = Math.sin(rad);
|
|
230
|
+
// Translate(x, y) * Rotate(θ) * Scale(sx, sy) * Translate(-ax, -ay)
|
|
231
|
+
const a = cos * scaleX;
|
|
232
|
+
const b = sin * scaleX;
|
|
233
|
+
const c = -sin * scaleY;
|
|
234
|
+
const d = cos * scaleY;
|
|
235
|
+
return {
|
|
236
|
+
e: [
|
|
237
|
+
a, b, 0, 0,
|
|
238
|
+
c, d, 0, 0,
|
|
239
|
+
0, 0, 1, 0,
|
|
240
|
+
x + a * -ax + c * -ay, y + b * -ax + d * -ay, 0, 1,
|
|
241
|
+
],
|
|
242
|
+
aff: true,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=mat4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mat4.js","sourceRoot":"","sources":["../../src/compositor/mat4.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Element, Source } from '@clipkit/protocol';
|
|
2
|
+
export interface Pt {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The element's projected screen quad — four CANVAS-pixel corners in
|
|
8
|
+
* order [TL, TR, BR, BL], accounting for the element's own 3D transform
|
|
9
|
+
* AND the scene camera at `time`. Returns null when the source has no
|
|
10
|
+
* camera (the editor uses the flat box then) or the quad is degenerate /
|
|
11
|
+
* fully behind the camera.
|
|
12
|
+
*/
|
|
13
|
+
export declare function projectElementQuad(source: Source, el: Element, time: number): [Pt, Pt, Pt, Pt] | null;
|
|
14
|
+
/**
|
|
15
|
+
* Inverse of the camera projection at a FIXED depth plane: given a
|
|
16
|
+
* canvas-pixel screen point, return the world (x, y) in canvas pixels
|
|
17
|
+
* whose projection at depth `planeZ` lands on it. Used by the move drag
|
|
18
|
+
* to map pointer motion to source `x`/`y` deltas at the element's own
|
|
19
|
+
* depth. Returns null if the plane is edge-on (degenerate).
|
|
20
|
+
*/
|
|
21
|
+
export declare function unprojectToPlane(source: Source, time: number, screen: Pt, planeZ: number): Pt | null;
|
|
22
|
+
/** The element's resolved depth (`z`) at `time` — the plane for move. */
|
|
23
|
+
export declare function elementDepthZ(source: Source, el: Element, time: number): number;
|
|
24
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/compositor/project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAazD,MAAM,WAAW,EAAE;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAmBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,MAAM,GACX,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAsCzB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,EAAE,EACV,MAAM,EAAE,MAAM,GACb,EAAE,GAAG,IAAI,CAiBX;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/E"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// Pure projection helpers for the EDITOR's camera-view gizmos (CAMERA-
|
|
2
|
+
// PLAN item 6). These reuse the exact render path — `cameraMatrix`, the
|
|
3
|
+
// `resolve*` family, and `quadMatrix3D` — so a selection box projected
|
|
4
|
+
// here hugs the element exactly as the runtime draws it (no drift). All
|
|
5
|
+
// coordinates are CANVAS pixels; the editor maps canvas → screen with
|
|
6
|
+
// its own pan/zoom. No DOM, no GPU.
|
|
7
|
+
import { cameraMatrix } from './camera.js';
|
|
8
|
+
import { applyAnimation, resolve3D, resolveScalePair, resolveSkewPair, } from './resolve.js';
|
|
9
|
+
import { resolveAnchor, resolveLength } from './unit.js';
|
|
10
|
+
import { anchorToCenter, quadMatrix3D } from './transform.js';
|
|
11
|
+
import { mat4Multiply } from './mat4.js';
|
|
12
|
+
import { MAT4_IDENTITY } from './render-context.js';
|
|
13
|
+
function canvasOf(source) {
|
|
14
|
+
return { width: source.width ?? 1920, height: source.height ?? 1080 };
|
|
15
|
+
}
|
|
16
|
+
/** Minimal context for the resolve.ts helpers (they only read time /
|
|
17
|
+
* canvas / sourceDuration / timeOffset). */
|
|
18
|
+
function miniCtx(source, time) {
|
|
19
|
+
return {
|
|
20
|
+
canvas: canvasOf(source),
|
|
21
|
+
time,
|
|
22
|
+
sourceDuration: typeof source.duration === 'number' ? source.duration : 0,
|
|
23
|
+
timeOffset: 0,
|
|
24
|
+
modelMatrix: MAT4_IDENTITY,
|
|
25
|
+
depthSort: false,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The element's projected screen quad — four CANVAS-pixel corners in
|
|
30
|
+
* order [TL, TR, BR, BL], accounting for the element's own 3D transform
|
|
31
|
+
* AND the scene camera at `time`. Returns null when the source has no
|
|
32
|
+
* camera (the editor uses the flat box then) or the quad is degenerate /
|
|
33
|
+
* fully behind the camera.
|
|
34
|
+
*/
|
|
35
|
+
export function projectElementQuad(source, el, time) {
|
|
36
|
+
if (!source.camera)
|
|
37
|
+
return null;
|
|
38
|
+
const ctx = miniCtx(source, time);
|
|
39
|
+
const canvas = ctx.canvas;
|
|
40
|
+
const x = applyAnimation(el, 'x', resolveLength(el.x, canvas.width, canvas) ?? canvas.width / 2, ctx);
|
|
41
|
+
const y = applyAnimation(el, 'y', resolveLength(el.y, canvas.height, canvas) ?? canvas.height / 2, ctx);
|
|
42
|
+
const w = applyAnimation(el, 'width', resolveLength(el.width, canvas.width, canvas, 100) ?? 100, ctx);
|
|
43
|
+
const h = applyAnimation(el, 'height', resolveLength(el.height, canvas.height, canvas, 100) ?? 100, ctx);
|
|
44
|
+
const { sx, sy } = resolveScalePair(el, ctx);
|
|
45
|
+
const rotation = applyAnimation(el, 'rotation', numberOr((el.rotation ?? el.z_rotation), 0), ctx);
|
|
46
|
+
const { skewX, skewY } = resolveSkewPair(el, ctx);
|
|
47
|
+
const t3d = resolve3D(el, ctx);
|
|
48
|
+
const ax = resolveAnchor(el.x_anchor);
|
|
49
|
+
const ay = resolveAnchor(el.y_anchor);
|
|
50
|
+
const { cx, cy } = anchorToCenter(x, y, w, h, ax, ay);
|
|
51
|
+
const local = quadMatrix3D(cx, cy, w * sx, h * sy, rotation, skewX, skewY, t3d?.xRot ?? 0, t3d?.yRot ?? 0, t3d?.z ?? 0);
|
|
52
|
+
const C = cameraMatrix(source.camera, time, canvas).e;
|
|
53
|
+
const M = mat4Multiply({ e: C, aff: false }, { e: local, aff: false }).e;
|
|
54
|
+
// The shared unit quad spans (-1..+1). Project each corner.
|
|
55
|
+
const project = (ux, uy) => {
|
|
56
|
+
const X = M[0] * ux + M[4] * uy + M[12];
|
|
57
|
+
const Y = M[1] * ux + M[5] * uy + M[13];
|
|
58
|
+
const W = M[3] * ux + M[7] * uy + M[15];
|
|
59
|
+
if (!Number.isFinite(W) || W <= 1e-6)
|
|
60
|
+
return null;
|
|
61
|
+
return { x: X / W, y: Y / W };
|
|
62
|
+
};
|
|
63
|
+
const tl = project(-1, -1);
|
|
64
|
+
const tr = project(1, -1);
|
|
65
|
+
const br = project(1, 1);
|
|
66
|
+
const bl = project(-1, 1);
|
|
67
|
+
if (!tl || !tr || !br || !bl)
|
|
68
|
+
return null;
|
|
69
|
+
return [tl, tr, br, bl];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Inverse of the camera projection at a FIXED depth plane: given a
|
|
73
|
+
* canvas-pixel screen point, return the world (x, y) in canvas pixels
|
|
74
|
+
* whose projection at depth `planeZ` lands on it. Used by the move drag
|
|
75
|
+
* to map pointer motion to source `x`/`y` deltas at the element's own
|
|
76
|
+
* depth. Returns null if the plane is edge-on (degenerate).
|
|
77
|
+
*/
|
|
78
|
+
export function unprojectToPlane(source, time, screen, planeZ) {
|
|
79
|
+
if (!source.camera)
|
|
80
|
+
return { x: screen.x, y: screen.y };
|
|
81
|
+
const canvas = canvasOf(source);
|
|
82
|
+
const C = cameraMatrix(source.camera, time, canvas).e;
|
|
83
|
+
// Solve the 2×2 system from X − Sx·W = 0 and Y − Sy·W = 0 with z fixed.
|
|
84
|
+
const a1 = C[0] - screen.x * C[3];
|
|
85
|
+
const b1 = C[4] - screen.x * C[7];
|
|
86
|
+
const c1 = (C[8] * planeZ + C[12]) - screen.x * (C[11] * planeZ + C[15]);
|
|
87
|
+
const a2 = C[1] - screen.y * C[3];
|
|
88
|
+
const b2 = C[5] - screen.y * C[7];
|
|
89
|
+
const c2 = (C[9] * planeZ + C[13]) - screen.y * (C[11] * planeZ + C[15]);
|
|
90
|
+
const det = a1 * b2 - a2 * b1;
|
|
91
|
+
if (Math.abs(det) < 1e-9)
|
|
92
|
+
return null;
|
|
93
|
+
return {
|
|
94
|
+
x: (-c1 * b2 + c2 * b1) / det,
|
|
95
|
+
y: (-a1 * c2 + a2 * c1) / det,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/** The element's resolved depth (`z`) at `time` — the plane for move. */
|
|
99
|
+
export function elementDepthZ(source, el, time) {
|
|
100
|
+
return resolve3D(el, miniCtx(source, time))?.z ?? 0;
|
|
101
|
+
}
|
|
102
|
+
function numberOr(v, fallback) {
|
|
103
|
+
return typeof v === 'number' && Number.isFinite(v) ? v : fallback;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/compositor/project.ts"],"names":[],"mappings":"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"}
|