@aura3d/scene 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/README.md +17 -0
  2. package/dist/Bounds.d.ts +18 -0
  3. package/dist/Bounds.d.ts.map +1 -0
  4. package/dist/Bounds.js +55 -0
  5. package/dist/Bounds.js.map +1 -0
  6. package/dist/Camera.d.ts +22 -0
  7. package/dist/Camera.d.ts.map +1 -0
  8. package/dist/Camera.js +44 -0
  9. package/dist/Camera.js.map +1 -0
  10. package/dist/DirectionalLight.d.ts +7 -0
  11. package/dist/DirectionalLight.d.ts.map +1 -0
  12. package/dist/DirectionalLight.js +12 -0
  13. package/dist/DirectionalLight.js.map +1 -0
  14. package/dist/Hierarchy.d.ts +6 -0
  15. package/dist/Hierarchy.d.ts.map +1 -0
  16. package/dist/Hierarchy.js +19 -0
  17. package/dist/Hierarchy.js.map +1 -0
  18. package/dist/Layers.d.ts +8 -0
  19. package/dist/Layers.d.ts.map +1 -0
  20. package/dist/Layers.js +21 -0
  21. package/dist/Layers.js.map +1 -0
  22. package/dist/Light.d.ts +14 -0
  23. package/dist/Light.d.ts.map +1 -0
  24. package/dist/Light.js +23 -0
  25. package/dist/Light.js.map +1 -0
  26. package/dist/Lights.d.ts +6 -0
  27. package/dist/Lights.d.ts.map +1 -0
  28. package/dist/Lights.js +5 -0
  29. package/dist/Lights.js.map +1 -0
  30. package/dist/MathTypes.d.ts +52 -0
  31. package/dist/MathTypes.d.ts.map +1 -0
  32. package/dist/MathTypes.js +119 -0
  33. package/dist/MathTypes.js.map +1 -0
  34. package/dist/Object3D.d.ts +48 -0
  35. package/dist/Object3D.d.ts.map +1 -0
  36. package/dist/Object3D.js +122 -0
  37. package/dist/Object3D.js.map +1 -0
  38. package/dist/OrthographicCamera.d.ts +29 -0
  39. package/dist/OrthographicCamera.d.ts.map +1 -0
  40. package/dist/OrthographicCamera.js +59 -0
  41. package/dist/OrthographicCamera.js.map +1 -0
  42. package/dist/PerspectiveCamera.d.ts +20 -0
  43. package/dist/PerspectiveCamera.d.ts.map +1 -0
  44. package/dist/PerspectiveCamera.js +42 -0
  45. package/dist/PerspectiveCamera.js.map +1 -0
  46. package/dist/PointLight.d.ts +10 -0
  47. package/dist/PointLight.d.ts.map +1 -0
  48. package/dist/PointLight.js +22 -0
  49. package/dist/PointLight.js.map +1 -0
  50. package/dist/Renderable.d.ts +30 -0
  51. package/dist/Renderable.d.ts.map +1 -0
  52. package/dist/Renderable.js +54 -0
  53. package/dist/Renderable.js.map +1 -0
  54. package/dist/Scene.d.ts +45 -0
  55. package/dist/Scene.d.ts.map +1 -0
  56. package/dist/Scene.js +117 -0
  57. package/dist/Scene.js.map +1 -0
  58. package/dist/SceneMetadata.d.ts +79 -0
  59. package/dist/SceneMetadata.d.ts.map +1 -0
  60. package/dist/SceneMetadata.js +130 -0
  61. package/dist/SceneMetadata.js.map +1 -0
  62. package/dist/SceneNode.d.ts +42 -0
  63. package/dist/SceneNode.d.ts.map +1 -0
  64. package/dist/SceneNode.js +126 -0
  65. package/dist/SceneNode.js.map +1 -0
  66. package/dist/SceneQuery.d.ts +16 -0
  67. package/dist/SceneQuery.d.ts.map +1 -0
  68. package/dist/SceneQuery.js +37 -0
  69. package/dist/SceneQuery.js.map +1 -0
  70. package/dist/SceneSerializer.d.ts +59 -0
  71. package/dist/SceneSerializer.d.ts.map +1 -0
  72. package/dist/SceneSerializer.js +127 -0
  73. package/dist/SceneSerializer.js.map +1 -0
  74. package/dist/SpotLight.d.ts +14 -0
  75. package/dist/SpotLight.d.ts.map +1 -0
  76. package/dist/SpotLight.js +35 -0
  77. package/dist/SpotLight.js.map +1 -0
  78. package/dist/TransformNode.d.ts +26 -0
  79. package/dist/TransformNode.d.ts.map +1 -0
  80. package/dist/TransformNode.js +98 -0
  81. package/dist/TransformNode.js.map +1 -0
  82. package/dist/index.d.ts +21 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +21 -0
  85. package/dist/index.js.map +1 -0
  86. package/package.json +18 -0
  87. package/src/Bounds.ts +68 -0
  88. package/src/Camera.ts +56 -0
  89. package/src/DirectionalLight.ts +13 -0
  90. package/src/Hierarchy.ts +20 -0
  91. package/src/Layers.ts +24 -0
  92. package/src/Light.ts +27 -0
  93. package/src/Lights.ts +5 -0
  94. package/src/MathTypes.ts +157 -0
  95. package/src/Object3D.ts +149 -0
  96. package/src/OrthographicCamera.ts +73 -0
  97. package/src/PerspectiveCamera.ts +54 -0
  98. package/src/PointLight.ts +25 -0
  99. package/src/Renderable.ts +71 -0
  100. package/src/Scene.ts +134 -0
  101. package/src/SceneMetadata.ts +225 -0
  102. package/src/SceneNode.ts +139 -0
  103. package/src/SceneQuery.ts +39 -0
  104. package/src/SceneSerializer.ts +177 -0
  105. package/src/SpotLight.ts +39 -0
  106. package/src/TransformNode.ts +116 -0
  107. package/src/index.ts +20 -0
  108. package/tests/scene.test.ts +117 -0
  109. package/tsconfig.json +9 -0
package/README.md ADDED
@@ -0,0 +1,17 @@
1
+ # @aura3d/scene
2
+
3
+ `@aura3d/scene` owns transform hierarchy, scene nodes, bounds, traversal, queries, cameras, lights, renderable descriptors, scene registry, and serialization.
4
+
5
+ ## Public API
6
+
7
+ - `TransformNode`, `SceneNode`, `Hierarchy`: parent/child ownership, local/world transforms, dirty propagation, traversal, and mutation safety.
8
+ - `Bounds`: bounds construction and transformed bounds helpers.
9
+ - `SceneQuery`: name, ID, type, and subtree query helpers.
10
+ - `Camera`, `PerspectiveCamera`, `OrthographicCamera`: stable camera IDs, projection parameters, viewport data, frustum contracts, and validation.
11
+ - `Light`, `DirectionalLight`, `PointLight`, `SpotLight`: stable light IDs and lighting parameters.
12
+ - `Renderable`: geometry/material renderable descriptors.
13
+ - `Scene`, `SceneSerializer`: scene root, node registry, renderables, cameras, lights, subtree registration, and deterministic serialization/deserialization.
14
+
15
+ ## Verification
16
+
17
+ Hierarchy mutation, cycle rejection, traversal removal, dirty propagation, serialization roundtrips, node registry, renderables, cameras, lights, bounds, frustum validation, browser scene pixels, and scene/ECS integration are covered by `tests/unit/scene/hierarchy-serialization.test.ts`, `tests/unit/scene/camera-frustum.test.ts`, `tests/browser/scene-browser.spec.ts`, and `tests/integration/scene-ecs-contracts.test.ts`. Export and import consistency is covered by `pnpm verify:exports` and `pnpm verify:imports`.
@@ -0,0 +1,18 @@
1
+ import { Box3 } from "@aura3d/math";
2
+ import { type Mat4, type Vec3 } from "./MathTypes.js";
3
+ export declare class Bounds3 {
4
+ min: Vec3;
5
+ max: Vec3;
6
+ constructor(min?: Vec3, max?: Vec3);
7
+ static fromCenterSize(center: Vec3, size: Vec3): Bounds3;
8
+ static fromMathBox(box: Box3): Bounds3;
9
+ isEmpty(): boolean;
10
+ union(other: Bounds3): Bounds3;
11
+ intersects(other: Bounds3): boolean;
12
+ containsPoint(point: Vec3): boolean;
13
+ transform(matrix: Mat4): Bounds3;
14
+ includePoint(point: Vec3): Bounds3;
15
+ clone(): Bounds3;
16
+ toMathBox(): Box3;
17
+ }
18
+ //# sourceMappingURL=Bounds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bounds.d.ts","sourceRoot":"","sources":["../../../../packages/scene/src/Bounds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAW,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAkB,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtE,qBAAa,OAAO;IAClB,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,IAAI,CAAC;gBAEE,GAAG,GAAE,IAAqC,EAAE,GAAG,GAAE,IAAwC;IAKrG,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAOxD,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO;IAItC,OAAO,IAAI,OAAO;IAIlB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAI9B,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAInC,aAAa,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAInC,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO;IAehC,YAAY,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAMlC,KAAK,IAAI,OAAO;IAIhB,SAAS,IAAI,IAAI;CAGlB"}
package/dist/Bounds.js ADDED
@@ -0,0 +1,55 @@
1
+ import { Box3, Vector3 } from "@aura3d/math";
2
+ import { transformPoint } from "./MathTypes.js";
3
+ export class Bounds3 {
4
+ min;
5
+ max;
6
+ constructor(min = [Infinity, Infinity, Infinity], max = [-Infinity, -Infinity, -Infinity]) {
7
+ this.min = [...min];
8
+ this.max = [...max];
9
+ }
10
+ static fromCenterSize(center, size) {
11
+ return new Bounds3([center[0] - size[0] / 2, center[1] - size[1] / 2, center[2] - size[2] / 2], [center[0] + size[0] / 2, center[1] + size[1] / 2, center[2] + size[2] / 2]);
12
+ }
13
+ static fromMathBox(box) {
14
+ return new Bounds3(box.min.toArray(), box.max.toArray());
15
+ }
16
+ isEmpty() {
17
+ return this.toMathBox().isEmpty();
18
+ }
19
+ union(other) {
20
+ return Bounds3.fromMathBox(this.toMathBox().union(other.toMathBox()));
21
+ }
22
+ intersects(other) {
23
+ return this.toMathBox().intersectsBox(other.toMathBox());
24
+ }
25
+ containsPoint(point) {
26
+ return this.toMathBox().containsPoint(new Vector3(point[0], point[1], point[2]));
27
+ }
28
+ transform(matrix) {
29
+ if (this.isEmpty())
30
+ return new Bounds3();
31
+ const corners = [
32
+ [this.min[0], this.min[1], this.min[2]],
33
+ [this.max[0], this.min[1], this.min[2]],
34
+ [this.min[0], this.max[1], this.min[2]],
35
+ [this.min[0], this.min[1], this.max[2]],
36
+ [this.max[0], this.max[1], this.min[2]],
37
+ [this.max[0], this.min[1], this.max[2]],
38
+ [this.min[0], this.max[1], this.max[2]],
39
+ [this.max[0], this.max[1], this.max[2]]
40
+ ];
41
+ return corners.reduce((bounds, corner) => bounds.includePoint(transformPoint(matrix, corner)), new Bounds3());
42
+ }
43
+ includePoint(point) {
44
+ this.min = [Math.min(this.min[0], point[0]), Math.min(this.min[1], point[1]), Math.min(this.min[2], point[2])];
45
+ this.max = [Math.max(this.max[0], point[0]), Math.max(this.max[1], point[1]), Math.max(this.max[2], point[2])];
46
+ return this;
47
+ }
48
+ clone() {
49
+ return new Bounds3(this.min, this.max);
50
+ }
51
+ toMathBox() {
52
+ return new Box3(new Vector3(this.min[0], this.min[1], this.min[2]), new Vector3(this.max[0], this.max[1], this.max[2]));
53
+ }
54
+ }
55
+ //# sourceMappingURL=Bounds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bounds.js","sourceRoot":"","sources":["../../../../packages/scene/src/Bounds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { Frustum } from "@aura3d/math";
2
+ import { type Mat4, type PlaneTuple } from "./MathTypes.js";
3
+ import { SceneNode } from "./SceneNode.js";
4
+ export interface CameraViewport {
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ }
10
+ export declare abstract class Camera extends SceneNode {
11
+ viewport: CameraViewport;
12
+ readonly frustumPlanes: PlaneTuple[];
13
+ frustum: Frustum;
14
+ projectionMatrix: Mat4;
15
+ viewMatrix: Mat4;
16
+ viewProjectionMatrix: Mat4;
17
+ protected constructor(name: string, id?: string);
18
+ abstract computeProjectionMatrix(): Mat4;
19
+ updateCameraMatrices(): void;
20
+ setViewport(viewport: CameraViewport): void;
21
+ }
22
+ //# sourceMappingURL=Camera.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../../../packages/scene/src/Camera.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAgE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC1H,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,8BAAsB,MAAO,SAAQ,SAAS;IAC5C,QAAQ,EAAE,cAAc,CAAuC;IAC/D,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,CAAM;IAC1C,OAAO,EAAE,OAAO,CAAkD;IAClE,gBAAgB,EAAE,IAAI,CAAC;IACvB,UAAU,EAAE,IAAI,CAAC;IACjB,oBAAoB,EAAE,IAAI,CAAC;IAE3B,SAAS,aAAa,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM;IAO/C,QAAQ,CAAC,uBAAuB,IAAI,IAAI;IAExC,oBAAoB,IAAI,IAAI;IAU5B,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAI5C"}
package/dist/Camera.js ADDED
@@ -0,0 +1,44 @@
1
+ import { ValidationError } from "@aura3d/core";
2
+ import { Frustum } from "@aura3d/math";
3
+ import { extractFrustumPlanes, identityMat4, multiplyMat4, toMathMat4 } from "./MathTypes.js";
4
+ import { SceneNode } from "./SceneNode.js";
5
+ export class Camera extends SceneNode {
6
+ viewport = { x: 0, y: 0, width: 1, height: 1 };
7
+ frustumPlanes = [];
8
+ frustum = Frustum.fromMatrix(toMathMat4(identityMat4()));
9
+ projectionMatrix;
10
+ viewMatrix;
11
+ viewProjectionMatrix;
12
+ constructor(name, id) {
13
+ super({ id, name });
14
+ this.projectionMatrix = identityMat4();
15
+ this.viewMatrix = this.transform.inverseWorldMatrix;
16
+ this.viewProjectionMatrix = multiplyMat4(this.projectionMatrix, this.viewMatrix);
17
+ }
18
+ updateCameraMatrices() {
19
+ updateAncestors(this);
20
+ this.updateWorldTransform();
21
+ this.projectionMatrix = this.computeProjectionMatrix();
22
+ this.viewMatrix = this.transform.inverseWorldMatrix;
23
+ this.viewProjectionMatrix = multiplyMat4(this.projectionMatrix, this.viewMatrix);
24
+ this.frustum = Frustum.fromMatrix(toMathMat4(this.viewProjectionMatrix));
25
+ this.frustumPlanes.splice(0, this.frustumPlanes.length, ...extractFrustumPlanes(this.viewProjectionMatrix));
26
+ }
27
+ setViewport(viewport) {
28
+ if (viewport.width <= 0 || viewport.height <= 0)
29
+ throw new ValidationError("CAMERA_VIEWPORT", "Camera viewport dimensions must be positive.");
30
+ this.viewport = { ...viewport };
31
+ }
32
+ }
33
+ function updateAncestors(node) {
34
+ const ancestors = [];
35
+ let parent = node.parent;
36
+ while (parent) {
37
+ ancestors.unshift(parent);
38
+ parent = parent.parent;
39
+ }
40
+ for (const ancestor of ancestors) {
41
+ ancestor.transform.updateWorld(ancestor.parent?.transform.worldMatrix);
42
+ }
43
+ }
44
+ //# sourceMappingURL=Camera.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Camera.js","sourceRoot":"","sources":["../../../../packages/scene/src/Camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAA8B,MAAM,gBAAgB,CAAC;AAC1H,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAS3C,MAAM,OAAgB,MAAO,SAAQ,SAAS;IAC5C,QAAQ,GAAmB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACtD,aAAa,GAAiB,EAAE,CAAC;IAC1C,OAAO,GAAY,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAClE,gBAAgB,CAAO;IACvB,UAAU,CAAO;IACjB,oBAAoB,CAAO;IAE3B,YAAsB,IAAY,EAAE,EAAW;QAC7C,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACpB,IAAI,CAAC,gBAAgB,GAAG,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC;QACpD,IAAI,CAAC,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACnF,CAAC;IAID,oBAAoB;QAClB,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACvD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC;QACpD,IAAI,CAAC,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACjF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC9G,CAAC;IAED,WAAW,CAAC,QAAwB;QAClC,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,iBAAiB,EAAE,8CAA8C,CAAC,CAAC;QAC9I,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;IAClC,CAAC;CACF;AAED,SAAS,eAAe,CAAC,IAAe;IACtC,MAAM,SAAS,GAAgB,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,OAAO,MAAM,EAAE,CAAC;QACd,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type Vec3 } from "./MathTypes.js";
2
+ import { Light } from "./Light.js";
3
+ export declare class DirectionalLight extends Light {
4
+ constructor(name?: string, id?: string);
5
+ getDirection(): Vec3;
6
+ }
7
+ //# sourceMappingURL=DirectionalLight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DirectionalLight.d.ts","sourceRoot":"","sources":["../../../../packages/scene/src/DirectionalLight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,IAAI,SAAqB,EAAE,EAAE,CAAC,EAAE,MAAM;IAIlD,YAAY,IAAI,IAAI;CAIrB"}
@@ -0,0 +1,12 @@
1
+ import { normalizeVec3 } from "./MathTypes.js";
2
+ import { Light } from "./Light.js";
3
+ export class DirectionalLight extends Light {
4
+ constructor(name = "DirectionalLight", id) {
5
+ super("directional", name, id);
6
+ }
7
+ getDirection() {
8
+ const m = this.transform.worldMatrix;
9
+ return normalizeVec3([-m[8], -m[9], -m[10]]);
10
+ }
11
+ }
12
+ //# sourceMappingURL=DirectionalLight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DirectionalLight.js","sourceRoot":"","sources":["../../../../packages/scene/src/DirectionalLight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAa,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,IAAI,GAAG,kBAAkB,EAAE,EAAW;QAChD,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,YAAY;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QACrC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import { type AddChildOptions, type SceneNode } from "./SceneNode.js";
2
+ export declare function isAncestor(ancestor: SceneNode, node: SceneNode): boolean;
3
+ export declare function reparent(node: SceneNode, newParent: SceneNode, options?: AddChildOptions): void;
4
+ export declare function batchReparent(nodes: readonly SceneNode[], newParent: SceneNode, options?: AddChildOptions): void;
5
+ export declare function removeAllChildren(node: SceneNode): SceneNode[];
6
+ //# sourceMappingURL=Hierarchy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Hierarchy.d.ts","sourceRoot":"","sources":["../../../../packages/scene/src/Hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEvF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAExE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI,CAGnG;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI,CAEpH;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,CAI9D"}
@@ -0,0 +1,19 @@
1
+ import { assertCanParent } from "./SceneNode.js";
2
+ export function isAncestor(ancestor, node) {
3
+ return ancestor.isAncestorOf(node);
4
+ }
5
+ export function reparent(node, newParent, options = {}) {
6
+ assertCanParent(newParent, node);
7
+ newParent.addChild(node, options);
8
+ }
9
+ export function batchReparent(nodes, newParent, options = {}) {
10
+ for (const node of nodes)
11
+ reparent(node, newParent, options);
12
+ }
13
+ export function removeAllChildren(node) {
14
+ const removed = [...node.children];
15
+ for (const child of removed)
16
+ node.removeChild(child);
17
+ return removed;
18
+ }
19
+ //# sourceMappingURL=Hierarchy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Hierarchy.js","sourceRoot":"","sources":["../../../../packages/scene/src/Hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAwC,MAAM,gBAAgB,CAAC;AAEvF,MAAM,UAAU,UAAU,CAAC,QAAmB,EAAE,IAAe;IAC7D,OAAO,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAe,EAAE,SAAoB,EAAE,UAA2B,EAAE;IAC3F,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACjC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAA2B,EAAE,SAAoB,EAAE,UAA2B,EAAE;IAC5G,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAe;IAC/C,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,OAAO;QAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare class Layers {
2
+ mask: number;
3
+ set(channel: number): void;
4
+ enable(channel: number): void;
5
+ disable(channel: number): void;
6
+ test(other: Layers): boolean;
7
+ }
8
+ //# sourceMappingURL=Layers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Layers.d.ts","sourceRoot":"","sources":["../../../../packages/scene/src/Layers.ts"],"names":[],"mappings":"AAAA,qBAAa,MAAM;IACjB,IAAI,SAAK;IAET,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI1B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI7B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAG7B"}
package/dist/Layers.js ADDED
@@ -0,0 +1,21 @@
1
+ export class Layers {
2
+ mask = 1;
3
+ set(channel) {
4
+ this.mask = 1 << validateChannel(channel);
5
+ }
6
+ enable(channel) {
7
+ this.mask |= 1 << validateChannel(channel);
8
+ }
9
+ disable(channel) {
10
+ this.mask &= ~(1 << validateChannel(channel));
11
+ }
12
+ test(other) {
13
+ return (this.mask & other.mask) !== 0;
14
+ }
15
+ }
16
+ function validateChannel(channel) {
17
+ if (!Number.isInteger(channel) || channel < 0 || channel > 31)
18
+ throw new Error("Layer channel must be an integer in [0, 31].");
19
+ return channel;
20
+ }
21
+ //# sourceMappingURL=Layers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Layers.js","sourceRoot":"","sources":["../../../../packages/scene/src/Layers.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,MAAM;IACjB,IAAI,GAAG,CAAC,CAAC;IAET,GAAG,CAAC,OAAe;QACjB,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,KAAa;QAChB,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;CACF;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC/H,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type Vector3 } from "@aura3d/math";
2
+ import { type Vec3 } from "./MathTypes.js";
3
+ import { SceneNode } from "./SceneNode.js";
4
+ export type LightKind = "directional" | "point" | "spot";
5
+ export declare abstract class Light extends SceneNode {
6
+ readonly kind: LightKind;
7
+ color: Vec3 | Vector3;
8
+ castsShadow: boolean;
9
+ private currentIntensity;
10
+ protected constructor(kind: LightKind, name: string, id?: string);
11
+ get intensity(): number;
12
+ set intensity(value: number);
13
+ }
14
+ //# sourceMappingURL=Light.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Light.d.ts","sourceRoot":"","sources":["../../../../packages/scene/src/Light.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzD,8BAAsB,KAAM,SAAQ,SAAS;IAC3C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,KAAK,EAAE,IAAI,GAAG,OAAO,CAAa;IAClC,WAAW,UAAS;IACpB,OAAO,CAAC,gBAAgB,CAAK;IAE7B,SAAS,aAAa,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM;IAKhE,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,EAG1B;CACF"}
package/dist/Light.js ADDED
@@ -0,0 +1,23 @@
1
+ import { ValidationError } from "@aura3d/core";
2
+ import {} from "@aura3d/math";
3
+ import {} from "./MathTypes.js";
4
+ import { SceneNode } from "./SceneNode.js";
5
+ export class Light extends SceneNode {
6
+ kind;
7
+ color = [1, 1, 1];
8
+ castsShadow = false;
9
+ currentIntensity = 1;
10
+ constructor(kind, name, id) {
11
+ super({ id, name });
12
+ this.kind = kind;
13
+ }
14
+ get intensity() {
15
+ return this.currentIntensity;
16
+ }
17
+ set intensity(value) {
18
+ if (!(value >= 0) || !Number.isFinite(value))
19
+ throw new ValidationError("LIGHT_INTENSITY", "Light intensity must be a finite non-negative number.");
20
+ this.currentIntensity = value;
21
+ }
22
+ }
23
+ //# sourceMappingURL=Light.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Light.js","sourceRoot":"","sources":["../../../../packages/scene/src/Light.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAgB,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAa,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI3C,MAAM,OAAgB,KAAM,SAAQ,SAAS;IAClC,IAAI,CAAY;IACzB,KAAK,GAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,WAAW,GAAG,KAAK,CAAC;IACZ,gBAAgB,GAAG,CAAC,CAAC;IAE7B,YAAsB,IAAe,EAAE,IAAY,EAAE,EAAW;QAC9D,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,IAAI,SAAS,CAAC,KAAa;QACzB,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,iBAAiB,EAAE,uDAAuD,CAAC,CAAC;QACpJ,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export { DirectionalLight } from "./DirectionalLight.js";
2
+ export { Light } from "./Light.js";
3
+ export type { LightKind } from "./Light.js";
4
+ export { PointLight } from "./PointLight.js";
5
+ export { SpotLight } from "./SpotLight.js";
6
+ //# sourceMappingURL=Lights.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lights.d.ts","sourceRoot":"","sources":["../../../../packages/scene/src/Lights.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/Lights.js ADDED
@@ -0,0 +1,5 @@
1
+ export { DirectionalLight } from "./DirectionalLight.js";
2
+ export { Light } from "./Light.js";
3
+ export { PointLight } from "./PointLight.js";
4
+ export { SpotLight } from "./SpotLight.js";
5
+ //# sourceMappingURL=Lights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lights.js","sourceRoot":"","sources":["../../../../packages/scene/src/Lights.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { Matrix4, Quaternion, Vector3 } from "@aura3d/math";
2
+ export type Vec3 = [number, number, number];
3
+ export type Quat = [number, number, number, number];
4
+ export type Mat4 = [
5
+ number,
6
+ number,
7
+ number,
8
+ number,
9
+ number,
10
+ number,
11
+ number,
12
+ number,
13
+ number,
14
+ number,
15
+ number,
16
+ number,
17
+ number,
18
+ number,
19
+ number,
20
+ number
21
+ ];
22
+ export type PlaneTuple = [number, number, number, number];
23
+ export declare const EPSILON = 1e-8;
24
+ export declare function vec3(x?: number, y?: number, z?: number): Vec3;
25
+ export declare function quat(x?: number, y?: number, z?: number, w?: number): Quat;
26
+ export declare function identityMat4(): Mat4;
27
+ export declare function cloneMat4(value: Mat4): Mat4;
28
+ export declare function addVec3(a: Vec3, b: Vec3): Vec3;
29
+ export declare function subVec3(a: Vec3, b: Vec3): Vec3;
30
+ export declare function scaleVec3(a: Vec3, scalar: number): Vec3;
31
+ export declare function lengthVec3(a: Vec3): number;
32
+ export declare function normalizeVec3(a: Vec3): Vec3;
33
+ export declare function normalizeQuat(value: Quat): Quat;
34
+ export declare function quatFromEuler(x: number, y: number, z: number): Quat;
35
+ export declare function multiplyMat4(a: Mat4, b: Mat4): Mat4;
36
+ export declare function composeMat4(position: Vec3, rotation: Quat, scale: Vec3): Mat4;
37
+ export declare function transformPoint(matrix: Mat4, point: Vec3): Vec3;
38
+ export declare function invertMat4(matrix: Mat4): Mat4;
39
+ export declare function perspectiveMat4(fovYRadians: number, aspect: number, near: number, far: number): Mat4;
40
+ export declare function orthographicMat4(left: number, right: number, bottom: number, top: number, near: number, far: number): Mat4;
41
+ export declare function extractFrustumPlanes(viewProjection: Mat4): PlaneTuple[];
42
+ export declare function toMathVec3(value: Vec3): Vector3;
43
+ export declare function toMathQuat(value: Quat): Quaternion;
44
+ export declare function toMathMat4(value: Mat4): Matrix4;
45
+ export declare function fromMathMat4(value: Matrix4): Mat4;
46
+ export declare function fromMathQuat(value: Quaternion): Quat;
47
+ export declare function decomposeMat4(matrix: Mat4): {
48
+ position: Vec3;
49
+ rotation: Quat;
50
+ scale: Vec3;
51
+ };
52
+ //# sourceMappingURL=MathTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MathTypes.d.ts","sourceRoot":"","sources":["../../../../packages/scene/src/MathTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ import { Frustum, Matrix4, Quaternion, Vector3 } from "@aura3d/math";
2
+ export const EPSILON = 1e-8;
3
+ export function vec3(x = 0, y = 0, z = 0) {
4
+ return [x, y, z];
5
+ }
6
+ export function quat(x = 0, y = 0, z = 0, w = 1) {
7
+ return fromMathQuat(new Quaternion(x, y, z, w).normalize());
8
+ }
9
+ export function identityMat4() {
10
+ return fromMathMat4(Matrix4.identity());
11
+ }
12
+ export function cloneMat4(value) {
13
+ return [...value];
14
+ }
15
+ export function addVec3(a, b) {
16
+ return toMathVec3(a).add(toMathVec3(b)).toArray();
17
+ }
18
+ export function subVec3(a, b) {
19
+ return toMathVec3(a).subtract(toMathVec3(b)).toArray();
20
+ }
21
+ export function scaleVec3(a, scalar) {
22
+ return toMathVec3(a).multiplyScalar(scalar).toArray();
23
+ }
24
+ export function lengthVec3(a) {
25
+ return toMathVec3(a).length();
26
+ }
27
+ export function normalizeVec3(a) {
28
+ return toMathVec3(a).normalize().toArray();
29
+ }
30
+ export function normalizeQuat(value) {
31
+ return fromMathQuat(toMathQuat(value).normalize());
32
+ }
33
+ export function quatFromEuler(x, y, z) {
34
+ const sx = Math.sin(x / 2);
35
+ const cx = Math.cos(x / 2);
36
+ const sy = Math.sin(y / 2);
37
+ const cy = Math.cos(y / 2);
38
+ const sz = Math.sin(z / 2);
39
+ const cz = Math.cos(z / 2);
40
+ return quat(sx * cy * cz + cx * sy * sz, cx * sy * cz - sx * cy * sz, cx * cy * sz + sx * sy * cz, cx * cy * cz - sx * sy * sz);
41
+ }
42
+ export function multiplyMat4(a, b) {
43
+ return fromMathMat4(toMathMat4(a).multiply(toMathMat4(b)));
44
+ }
45
+ export function composeMat4(position, rotation, scale) {
46
+ return fromMathMat4(Matrix4.compose(toMathVec3(position), toMathQuat(rotation), toMathVec3(scale)));
47
+ }
48
+ export function transformPoint(matrix, point) {
49
+ return toMathMat4(matrix).transformPoint(toMathVec3(point)).toArray();
50
+ }
51
+ export function invertMat4(matrix) {
52
+ return fromMathMat4(toMathMat4(matrix).inverse());
53
+ }
54
+ export function perspectiveMat4(fovYRadians, aspect, near, far) {
55
+ return fromMathMat4(Matrix4.perspective(fovYRadians, aspect, near, far));
56
+ }
57
+ export function orthographicMat4(left, right, bottom, top, near, far) {
58
+ return fromMathMat4(Matrix4.orthographic(left, right, bottom, top, near, far));
59
+ }
60
+ export function extractFrustumPlanes(viewProjection) {
61
+ return Frustum.fromMatrix(toMathMat4(viewProjection)).planes.map((plane) => [
62
+ plane.normal.x,
63
+ plane.normal.y,
64
+ plane.normal.z,
65
+ plane.constant
66
+ ]);
67
+ }
68
+ export function toMathVec3(value) {
69
+ return new Vector3(value[0], value[1], value[2]);
70
+ }
71
+ export function toMathQuat(value) {
72
+ return new Quaternion(value[0], value[1], value[2], value[3]);
73
+ }
74
+ export function toMathMat4(value) {
75
+ return new Matrix4(value);
76
+ }
77
+ export function fromMathMat4(value) {
78
+ return [...value.elements];
79
+ }
80
+ export function fromMathQuat(value) {
81
+ return [value.x, value.y, value.z, value.w];
82
+ }
83
+ export function decomposeMat4(matrix) {
84
+ const position = [matrix[12], matrix[13], matrix[14]];
85
+ const sx = Math.hypot(matrix[0], matrix[1], matrix[2]);
86
+ const sy = Math.hypot(matrix[4], matrix[5], matrix[6]);
87
+ const sz = Math.hypot(matrix[8], matrix[9], matrix[10]);
88
+ if (sx <= EPSILON || sy <= EPSILON || sz <= EPSILON)
89
+ throw new Error("Cannot decompose transform matrix with zero scale.");
90
+ const m00 = matrix[0] / sx;
91
+ const m01 = matrix[4] / sy;
92
+ const m02 = matrix[8] / sz;
93
+ const m10 = matrix[1] / sx;
94
+ const m11 = matrix[5] / sy;
95
+ const m12 = matrix[9] / sz;
96
+ const m20 = matrix[2] / sx;
97
+ const m21 = matrix[6] / sy;
98
+ const m22 = matrix[10] / sz;
99
+ const trace = m00 + m11 + m22;
100
+ let rotation;
101
+ if (trace > 0) {
102
+ const s = Math.sqrt(trace + 1) * 2;
103
+ rotation = [(m21 - m12) / s, (m02 - m20) / s, (m10 - m01) / s, 0.25 * s];
104
+ }
105
+ else if (m00 > m11 && m00 > m22) {
106
+ const s = Math.sqrt(1 + m00 - m11 - m22) * 2;
107
+ rotation = [0.25 * s, (m01 + m10) / s, (m02 + m20) / s, (m21 - m12) / s];
108
+ }
109
+ else if (m11 > m22) {
110
+ const s = Math.sqrt(1 + m11 - m00 - m22) * 2;
111
+ rotation = [(m01 + m10) / s, 0.25 * s, (m12 + m21) / s, (m02 - m20) / s];
112
+ }
113
+ else {
114
+ const s = Math.sqrt(1 + m22 - m00 - m11) * 2;
115
+ rotation = [(m02 + m20) / s, (m12 + m21) / s, 0.25 * s, (m10 - m01) / s];
116
+ }
117
+ return { position, rotation: normalizeQuat(rotation), scale: [sx, sy, sz] };
118
+ }
119
+ //# sourceMappingURL=MathTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MathTypes.js","sourceRoot":"","sources":["../../../../packages/scene/src/MathTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { SceneNode, type SceneNodeOptions } from "./SceneNode.js";
2
+ import { Renderable, type RenderableDescriptor } from "./Renderable.js";
3
+ import type { Mat4, Quat, Vec3 } from "./MathTypes.js";
4
+ export interface Object3DOptions extends SceneNodeOptions {
5
+ readonly visible?: boolean;
6
+ readonly layerMask?: number;
7
+ readonly renderOrder?: number;
8
+ readonly userData?: Record<string, unknown>;
9
+ }
10
+ export declare class Object3D extends SceneNode {
11
+ readonly isObject3D = true;
12
+ constructor(options?: Object3DOptions);
13
+ get position(): Vec3;
14
+ get quaternion(): Quat;
15
+ get scale(): Vec3;
16
+ get matrix(): Mat4;
17
+ get matrixWorld(): Mat4;
18
+ get matrixAutoUpdate(): boolean;
19
+ set matrixAutoUpdate(enabled: boolean);
20
+ setLocalMatrix(matrix: Mat4, options?: {
21
+ readonly decompose?: boolean;
22
+ readonly matrixAutoUpdate?: boolean;
23
+ }): this;
24
+ }
25
+ export declare class Group extends Object3D {
26
+ readonly isGroup = true;
27
+ }
28
+ export interface MeshOptions extends Object3DOptions {
29
+ readonly renderable?: Renderable | RenderableDescriptor;
30
+ }
31
+ export declare class Mesh extends Object3D {
32
+ readonly isMesh = true;
33
+ constructor(options?: MeshOptions);
34
+ setRenderable(renderable: Renderable | RenderableDescriptor): this;
35
+ }
36
+ export declare class SkinnedMesh extends Mesh {
37
+ readonly isSkinnedMesh = true;
38
+ get skinning(): Renderable["skinning"] | undefined;
39
+ setSkinning(skinning: NonNullable<Renderable["skinning"]>): this;
40
+ }
41
+ export declare class InstancedMesh extends Mesh {
42
+ readonly isInstancedMesh = true;
43
+ get instanceTransforms(): Float32Array | undefined;
44
+ get instanceColors(): Float32Array | undefined;
45
+ setInstanceTransforms(transforms: Float32Array | readonly number[]): this;
46
+ setInstanceColors(colors: Float32Array | readonly number[]): this;
47
+ }
48
+ //# sourceMappingURL=Object3D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Object3D.d.ts","sourceRoot":"","sources":["../../../../packages/scene/src/Object3D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,qBAAa,QAAS,SAAQ,SAAS;IACrC,QAAQ,CAAC,UAAU,QAAQ;gBAEf,OAAO,GAAE,eAAoB;IAKzC,IAAI,QAAQ,IAAI,IAAI,CAEnB;IAED,IAAI,UAAU,IAAI,IAAI,CAErB;IAED,IAAI,KAAK,IAAI,IAAI,CAEhB;IAED,IAAI,MAAM,IAAI,IAAI,CAEjB;IAED,IAAI,WAAW,IAAI,IAAI,CAEtB;IAED,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,IAAI,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAEpC;IAED,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,IAAI;CAIxH;AAED,qBAAa,KAAM,SAAQ,QAAQ;IACjC,QAAQ,CAAC,OAAO,QAAQ;CACzB;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IAClD,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,oBAAoB,CAAC;CACzD;AAED,qBAAa,IAAK,SAAQ,QAAQ;IAChC,QAAQ,CAAC,MAAM,QAAQ;gBAEX,OAAO,GAAE,WAAgB;IAKrC,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,oBAAoB,GAAG,IAAI;CAInE;AAED,qBAAa,WAAY,SAAQ,IAAI;IACnC,QAAQ,CAAC,aAAa,QAAQ;IAE9B,IAAI,QAAQ,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,SAAS,CAEjD;IAED,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI;CAQjE;AAED,qBAAa,aAAc,SAAQ,IAAI;IACrC,QAAQ,CAAC,eAAe,QAAQ;IAEhC,IAAI,kBAAkB,IAAI,YAAY,GAAG,SAAS,CAEjD;IAED,IAAI,cAAc,IAAI,YAAY,GAAG,SAAS,CAE7C;IAED,qBAAqB,CAAC,UAAU,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI;IAgBzE,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI;CAelE"}