@woosh/meep-engine 2.126.33 → 2.126.35

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 (31) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/src/core/geom/3d/frustum/frustum_compute_center.d.ts +9 -0
  4. package/src/core/geom/3d/frustum/frustum_compute_center.d.ts.map +1 -0
  5. package/src/core/geom/3d/frustum/frustum_compute_center.js +41 -0
  6. package/src/core/geom/3d/frustum/frustum_compute_corners.d.ts +11 -0
  7. package/src/core/geom/3d/frustum/frustum_compute_corners.d.ts.map +1 -0
  8. package/src/core/geom/3d/frustum/frustum_compute_corners.js +91 -0
  9. package/src/core/geom/3d/mat4/MATRIX_4_IDENTITY.d.ts +1 -1
  10. package/src/core/geom/3d/mat4/MATRIX_4_IDENTITY.js +1 -1
  11. package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.d.ts +4 -4
  12. package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.d.ts.map +1 -1
  13. package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.js +27 -27
  14. package/src/core/geom/3d/mat4/m4_inverse_rotation_translation.d.ts +9 -0
  15. package/src/core/geom/3d/mat4/m4_inverse_rotation_translation.d.ts.map +1 -0
  16. package/src/core/geom/3d/mat4/m4_inverse_rotation_translation.js +40 -0
  17. package/src/core/geom/3d/mat4/m4_multiply.d.ts +0 -1
  18. package/src/core/geom/3d/mat4/m4_multiply.d.ts.map +1 -1
  19. package/src/core/geom/3d/mat4/m4_multiply.js +2 -1
  20. package/src/core/geom/3d/mat4/m4_rotation_translation.d.ts +9 -0
  21. package/src/core/geom/3d/mat4/m4_rotation_translation.d.ts.map +1 -0
  22. package/src/core/geom/3d/mat4/m4_rotation_translation.js +32 -0
  23. package/src/core/geom/mat3/m3_make_rotation.d.ts +9 -0
  24. package/src/core/geom/mat3/m3_make_rotation.d.ts.map +1 -0
  25. package/src/core/geom/mat3/m3_make_rotation.js +31 -0
  26. package/src/engine/graphics/render/forward_plus/computeFrustumCorners.d.ts +1 -0
  27. package/src/engine/graphics/render/forward_plus/computeFrustumCorners.d.ts.map +1 -1
  28. package/src/engine/graphics/render/forward_plus/computeFrustumCorners.js +1 -0
  29. package/src/engine/graphics/render/frame_graph/RenderGraph.d.ts +5 -0
  30. package/src/engine/graphics/render/frame_graph/RenderGraph.d.ts.map +1 -1
  31. package/src/engine/graphics/render/frame_graph/RenderGraph.js +6 -0
package/README.md CHANGED
@@ -13,7 +13,7 @@ To help get you started, various samples are provided under `/samples` folder. F
13
13
 
14
14
  ## Quality
15
15
 
16
- Meep is covered by 2,716 handwritten unit tests
16
+ Meep is covered by 2,720 handwritten unit tests
17
17
 
18
18
  The aim is to [ensure quality](https://about.codecov.io/blog/the-case-against-100-code-coverage/). As a result, the tests are written to cover complex code first and to exhaustively validate critical algorithms.
19
19
  Most of the test code is significantly larger than the code that is being tested.
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Pure JavaScript game engine. Fully featured and production ready.",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.126.33",
8
+ "version": "2.126.35",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -0,0 +1,9 @@
1
+ /**
2
+ *
3
+ * @param {number[]} output
4
+ * @param {number} output_offset
5
+ * @param {number[]} frustum
6
+ * @param {number} frustum_offset
7
+ */
8
+ export function frustum_compute_center(output: number[], output_offset: number, frustum: number[], frustum_offset: number): void;
9
+ //# sourceMappingURL=frustum_compute_center.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frustum_compute_center.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/frustum/frustum_compute_center.js"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,+CALW,MAAM,EAAE,iBACR,MAAM,WACN,MAAM,EAAE,kBACR,MAAM,QA8BhB"}
@@ -0,0 +1,41 @@
1
+ import { assert } from "../../../assert.js";
2
+ import { frustum_compute_corners } from "./frustum_compute_corners.js";
3
+
4
+ const scratch_corners = new Float32Array(24);
5
+
6
+ /**
7
+ *
8
+ * @param {number[]} output
9
+ * @param {number} output_offset
10
+ * @param {number[]} frustum
11
+ * @param {number} frustum_offset
12
+ */
13
+ export function frustum_compute_center(
14
+ output,
15
+ output_offset,
16
+ frustum,
17
+ frustum_offset
18
+ ) {
19
+ assert.defined(output,'output');
20
+ assert.isNonNegativeInteger(output_offset,'output_offset');
21
+ assert.defined(frustum,'frustum');
22
+ assert.isNonNegativeInteger(frustum_offset,'frustum_offset');
23
+
24
+ frustum_compute_corners(scratch_corners, 0, frustum, frustum_offset);
25
+
26
+ let x = 0;
27
+ let y = 0;
28
+ let z = 0;
29
+
30
+ for (let i = 0; i < 8; i++) {
31
+ const i3 = i * 3;
32
+
33
+ x += scratch_corners[i3]
34
+ y += scratch_corners[i3 + 1]
35
+ z += scratch_corners[i3 + 2]
36
+ }
37
+
38
+ output[output_offset] = x / 8;
39
+ output[output_offset + 1] = y / 8;
40
+ output[output_offset + 2] = z / 8;
41
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * This function operates in 3D.
3
+ * Write 8 frustum corners out into the output.
4
+ * Assumes frustum is convex and has no parallel planes except those in the same axis.
5
+ * @param {number[]|Float32Array} output where to write results to
6
+ * @param {number} output_offset where to start writing results
7
+ * @param {number[]|Float32Array} frustum defined as [plane_normal_x, plane_normal_y, plane_normal_z, plane_offset], planes should be in the following order [x0, x1, y0, y1, z0, z1]
8
+ * @param {number} frustum_offset where to start reading from
9
+ */
10
+ export function frustum_compute_corners(output: number[] | Float32Array, output_offset: number, frustum: number[] | Float32Array, frustum_offset: number): void;
11
+ //# sourceMappingURL=frustum_compute_corners.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frustum_compute_corners.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/frustum/frustum_compute_corners.js"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,gDALW,MAAM,EAAE,GAAC,YAAY,iBACrB,MAAM,WACN,MAAM,EAAE,GAAC,YAAY,kBACrB,MAAM,QAgFhB"}
@@ -0,0 +1,91 @@
1
+ import { assert } from "../../../assert.js";
2
+ import { plane3_compute_convex_3_plane_intersection } from "../plane/plane3_compute_convex_3_plane_intersection.js";
3
+
4
+ /**
5
+ * This function operates in 3D.
6
+ * Write 8 frustum corners out into the output.
7
+ * Assumes frustum is convex and has no parallel planes except those in the same axis.
8
+ * @param {number[]|Float32Array} output where to write results to
9
+ * @param {number} output_offset where to start writing results
10
+ * @param {number[]|Float32Array} frustum defined as [plane_normal_x, plane_normal_y, plane_normal_z, plane_offset], planes should be in the following order [x0, x1, y0, y1, z0, z1]
11
+ * @param {number} frustum_offset where to start reading from
12
+ */
13
+ export function frustum_compute_corners(
14
+ output,
15
+ output_offset,
16
+ frustum,
17
+ frustum_offset
18
+ ) {
19
+ assert.defined(output,'output');
20
+ assert.isNonNegativeInteger(output_offset,'output_offset');
21
+ assert.defined(frustum,'frustum');
22
+ assert.isNonNegativeInteger(frustum_offset,'frustum_offset');
23
+
24
+ const f = frustum;
25
+ const o = frustum_offset;
26
+
27
+ // plane_x0, plane_y0, plane_z0
28
+ plane3_compute_convex_3_plane_intersection(
29
+ output, output_offset,
30
+ f[o], f[o + 1], f[o + 2], f[o + 3],
31
+ f[o + 8], f[o + 9], f[o + 10], f[o + 11],
32
+ f[o + 16], f[o + 17], f[o + 18], f[o + 19],
33
+ );
34
+
35
+ // plane_x0, plane_y0, plane_z1
36
+ plane3_compute_convex_3_plane_intersection(
37
+ output, output_offset + 3,
38
+ f[o], f[o + 1], f[o + 2], f[o + 3],
39
+ f[o + 8], f[o + 9], f[o + 10], f[o + 11],
40
+ f[o + 20], f[o + 21], f[o + 22], f[o + 23],
41
+ );
42
+
43
+ // plane_x0, plane_y1, plane_z0
44
+ plane3_compute_convex_3_plane_intersection(
45
+ output, output_offset + 6,
46
+ f[o], f[o + 1], f[o + 2], f[o + 3],
47
+ f[o + 12], f[o + 13], f[o + 14], f[o + 15],
48
+ f[o + 16], f[o + 17], f[o + 18], f[o + 19],
49
+ );
50
+
51
+ // plane_x0, plane_y1, plane_z1
52
+ plane3_compute_convex_3_plane_intersection(
53
+ output, output_offset + 9,
54
+ f[o], f[o + 1], f[o + 2], f[o + 3],
55
+ f[o + 12], f[o + 13], f[o + 14], f[o + 15],
56
+ f[o + 20], f[o + 21], f[o + 22], f[o + 23],
57
+ );
58
+
59
+ // plane_x1, plane_y0, plane_z0
60
+ plane3_compute_convex_3_plane_intersection(
61
+ output, output_offset + 12,
62
+ f[o + 4], f[o + 5], f[o + 6], f[o + 7],
63
+ f[o + 8], f[o + 9], f[o + 10], f[o + 11],
64
+ f[o + 16], f[o + 17], f[o + 18], f[o + 19],
65
+ );
66
+
67
+ // plane_x1, plane_y0, plane_z1
68
+ plane3_compute_convex_3_plane_intersection(
69
+ output, output_offset + 15,
70
+ f[o + 4], f[o + 5], f[o + 6], f[o + 7],
71
+ f[o + 8], f[o + 9], f[o + 10], f[o + 11],
72
+ f[o + 20], f[o + 21], f[o + 22], f[o + 23],
73
+ );
74
+
75
+ // plane_x1, plane_y1, plane_z0
76
+ plane3_compute_convex_3_plane_intersection(
77
+ output, output_offset + 18,
78
+ f[o + 4], f[o + 5], f[o + 6], f[o + 7],
79
+ f[o + 12], f[o + 13], f[o + 14], f[o + 15],
80
+ f[o + 16], f[o + 17], f[o + 18], f[o + 19],
81
+ );
82
+
83
+ // plane_x1, plane_y1, plane_z1
84
+ plane3_compute_convex_3_plane_intersection(
85
+ output, output_offset + 21,
86
+ f[o + 4], f[o + 5], f[o + 6], f[o + 7],
87
+ f[o + 12], f[o + 13], f[o + 14], f[o + 15],
88
+ f[o + 20], f[o + 21], f[o + 22], f[o + 23],
89
+ );
90
+
91
+ }
@@ -1,5 +1,5 @@
1
1
  /**
2
- *
2
+ * Identity 4x4 matrix, also called "eye" matrix sometimes.
3
3
  * @type {number[]|mat4}
4
4
  */
5
5
  export const MATRIX_4_IDENTITY: number[] | mat4;
@@ -1,5 +1,5 @@
1
1
  /**
2
- *
2
+ * Identity 4x4 matrix, also called "eye" matrix sometimes.
3
3
  * @type {number[]|mat4}
4
4
  */
5
5
  export const MATRIX_4_IDENTITY = Object.freeze([
@@ -18,11 +18,11 @@
18
18
  * NOTE: ported from Eigen C++ library
19
19
  * @see https://gitlab.com/libeigen/eigen/-/blob/master/Eigen/src/Geometry/EulerAngles.h
20
20
  * @see https://stackoverflow.com/questions/11514063/extract-yaw-pitch-and-roll-from-a-rotationmatrix
21
- * @param {number[]} res
22
- * @param {number[]|Float32Array|mat4} m4
23
- * @param {number} a0 axis index
21
+ * @param {number[]} output
22
+ * @param {number[]|Float32Array|mat4} m4 source matrix to extract rotation from
23
+ * @param {number} a0 axis index (0 = X, 1 = Y, 2 = Z)
24
24
  * @param {number} a1 axis index
25
25
  * @param {number} a2 axis index
26
26
  */
27
- export function eulerAnglesFromMatrix(res: number[], m4: number[] | Float32Array | mat4, a0: number, a1: number, a2: number): void;
27
+ export function eulerAnglesFromMatrix(output: number[], m4: number[] | Float32Array | mat4, a0: number, a1: number, a2: number): void;
28
28
  //# sourceMappingURL=eulerAnglesFromMatrix.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eulerAnglesFromMatrix.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/eulerAnglesFromMatrix.js"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,2CANW,MAAM,EAAE,MACR,MAAM,EAAE,GAAC,YAAY,GAAC,IAAI,MAC1B,MAAM,MACN,MAAM,MACN,MAAM,QA2EhB"}
1
+ {"version":3,"file":"eulerAnglesFromMatrix.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/eulerAnglesFromMatrix.js"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,8CANW,MAAM,EAAE,MACR,MAAM,EAAE,GAAC,YAAY,GAAC,IAAI,MAC1B,MAAM,MACN,MAAM,MACN,MAAM,QA2EhB"}
@@ -36,14 +36,14 @@ const atan2 = Math.atan2;
36
36
  * NOTE: ported from Eigen C++ library
37
37
  * @see https://gitlab.com/libeigen/eigen/-/blob/master/Eigen/src/Geometry/EulerAngles.h
38
38
  * @see https://stackoverflow.com/questions/11514063/extract-yaw-pitch-and-roll-from-a-rotationmatrix
39
- * @param {number[]} res
40
- * @param {number[]|Float32Array|mat4} m4
41
- * @param {number} a0 axis index
39
+ * @param {number[]} output
40
+ * @param {number[]|Float32Array|mat4} m4 source matrix to extract rotation from
41
+ * @param {number} a0 axis index (0 = X, 1 = Y, 2 = Z)
42
42
  * @param {number} a1 axis index
43
43
  * @param {number} a2 axis index
44
44
  */
45
45
  export function eulerAnglesFromMatrix(
46
- res, m4,
46
+ output, m4,
47
47
  a0, a1, a2
48
48
  ) {
49
49
 
@@ -54,19 +54,19 @@ export function eulerAnglesFromMatrix(
54
54
  const k = (a0 + 2 - odd) % 3;
55
55
 
56
56
  if (a0 === a2) {
57
- res[0] = atan2(coeff(m4, j, i), coeff(m4, k, i));
57
+ output[0] = atan2(coeff(m4, j, i), coeff(m4, k, i));
58
58
 
59
- if ((odd && res[0] < 0) || ((~odd) && res[0] > 0)) {
60
- if (res[0] > 0) {
61
- res[0] -= Math.PI;
59
+ if ((odd && output[0] < 0) || ((~odd) && output[0] > 0)) {
60
+ if (output[0] > 0) {
61
+ output[0] -= Math.PI;
62
62
  } else {
63
- res[0] += Math.PI;
63
+ output[0] += Math.PI;
64
64
  }
65
65
  const s2 = v2_length(coeff(m4, j, i), coeff(m4, k, i));
66
- res[1] = -atan2(s2, coeff(m4, i, i));
66
+ output[1] = -atan2(s2, coeff(m4, i, i));
67
67
  } else {
68
68
  const s2 = v2_length(coeff(m4, j, i), coeff(m4, k, i));
69
- res[1] = atan2(s2, coeff(m4, i, i));
69
+ output[1] = atan2(s2, coeff(m4, i, i));
70
70
  }
71
71
 
72
72
  // With a=(0,1,0), we have i=0; j=1; k=2, and after computing the first two angles,
@@ -79,40 +79,40 @@ export function eulerAnglesFromMatrix(
79
79
  //
80
80
  // Thus: m11.c1 - m21.s1 = c3 & m12.c1 - m22.s1 = s3
81
81
 
82
- const s1 = sin(res[0]);
83
- const c1 = cos(res[0]);
82
+ const s1 = sin(output[0]);
83
+ const c1 = cos(output[0]);
84
84
 
85
- res[2] = atan2(c1 * coeff(m4, j, k) - s1 * coeff(m4, k, k), c1 * coeff(m4, j, j) - s1 * coeff(m4, k, j));
85
+ output[2] = atan2(c1 * coeff(m4, j, k) - s1 * coeff(m4, k, k), c1 * coeff(m4, j, j) - s1 * coeff(m4, k, j));
86
86
 
87
87
  } else {
88
88
 
89
- res[0] = atan2(coeff(m4, j, k), coeff(m4, k, k));
89
+ output[0] = atan2(coeff(m4, j, k), coeff(m4, k, k));
90
90
 
91
91
  const c2 = v2_length(coeff(m4, i, i), coeff(m4, i, j));
92
92
 
93
- if ((odd && res[0] < 0) || ((~odd) && res[0] > 0)) {
94
- if (res[0] > 0) {
95
- res[0] -= Math.PI;
93
+ if ((odd && output[0] < 0) || ((~odd) && output[0] > 0)) {
94
+ if (output[0] > 0) {
95
+ output[0] -= Math.PI;
96
96
  } else {
97
- res[0] += Math.PI;
97
+ output[0] += Math.PI;
98
98
  }
99
- res[1] = atan2(-coeff(m4, i, k), -c2);
99
+ output[1] = atan2(-coeff(m4, i, k), -c2);
100
100
  } else {
101
- res[1] = atan2(-coeff(m4, i, k), c2);
101
+ output[1] = atan2(-coeff(m4, i, k), c2);
102
102
  }
103
103
 
104
- const s1 = sin(res[0]);
105
- const c1 = cos(res[0]);
104
+ const s1 = sin(output[0]);
105
+ const c1 = cos(output[0]);
106
106
 
107
- res[2] = atan2(s1 * coeff(m4, k, i) - c1 * coeff(m4, j, i), c1 * coeff(m4, j, j) - s1 * coeff(m4, k, j));
107
+ output[2] = atan2(s1 * coeff(m4, k, i) - c1 * coeff(m4, j, i), c1 * coeff(m4, j, j) - s1 * coeff(m4, k, j));
108
108
 
109
109
  }
110
110
 
111
111
  if (odd === 0) {
112
112
  // invert result
113
- res[0] = -res[0];
114
- res[1] = -res[1];
115
- res[2] = -res[2];
113
+ output[0] = -output[0];
114
+ output[1] = -output[1];
115
+ output[2] = -output[2];
116
116
  }
117
117
 
118
118
  }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Compose an inverse 4x4 transformation matrix from 3x3 rotation matrix and a translation vector
3
+ * @param {number[]} output 4x4 matrix
4
+ * @param {number[]} rotation_matrix 3x3 mat
5
+ * @param {number[]} translation 3d vector
6
+ * @see m4_rotation_translation
7
+ */
8
+ export function m4_inverse_rotation_translation(output: number[], rotation_matrix: number[], translation: number[]): void;
9
+ //# sourceMappingURL=m4_inverse_rotation_translation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"m4_inverse_rotation_translation.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_inverse_rotation_translation.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wDALW,MAAM,EAAE,mBACR,MAAM,EAAE,eACR,MAAM,EAAE,QAiClB"}
@@ -0,0 +1,40 @@
1
+ import { v3_dot } from "../../vec3/v3_dot.js";
2
+
3
+ /**
4
+ * Compose an inverse 4x4 transformation matrix from 3x3 rotation matrix and a translation vector
5
+ * @param {number[]} output 4x4 matrix
6
+ * @param {number[]} rotation_matrix 3x3 mat
7
+ * @param {number[]} translation 3d vector
8
+ * @see m4_rotation_translation
9
+ */
10
+ export function m4_inverse_rotation_translation(
11
+ output,
12
+ rotation_matrix,
13
+ translation
14
+ ) {
15
+
16
+ const r = rotation_matrix;
17
+
18
+
19
+ output[0] = r[0];
20
+ output[1] = r[3];
21
+ output[2] = r[6];
22
+ output[3] = 0;
23
+
24
+ output[4] = r[1];
25
+ output[5] = r[4];
26
+ output[6] = r[7];
27
+ output[7] = 0;
28
+
29
+ output[8] = r[2];
30
+ output[9] = r[5];
31
+ output[10] = r[8];
32
+ output[11] = 0;
33
+
34
+ const t = translation;
35
+
36
+ output[12] = -v3_dot(t[0], t[1], t[2], r[0], r[1], r[2]);
37
+ output[13] = -v3_dot(t[0], t[1], t[2], r[3], r[4], r[5]);
38
+ output[14] = -v3_dot(t[0], t[1], t[2], r[6], r[7], r[8]);
39
+ output[15] = 1;
40
+ }
@@ -1,6 +1,5 @@
1
1
  /**
2
2
  * Multiplies two 4x4 matrices
3
- * Adapted from gl-matrix
4
3
  *
5
4
  * @param {number[]|ArrayLike<number>|Float32Array} out the receiving matrix
6
5
  * @param {number[]|ArrayLike<number>|Float32Array} a the first operand
@@ -1 +1 @@
1
- {"version":3,"file":"m4_multiply.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_multiply.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,iCAJW,MAAM,EAAE,GAAC,SAAS,CAAC,MAAM,CAAC,GAAC,YAAY,KACvC,MAAM,EAAE,GAAC,SAAS,CAAC,MAAM,CAAC,GAAC,YAAY,KACvC,MAAM,EAAE,GAAC,SAAS,CAAC,MAAM,CAAC,GAAC,YAAY,QA4DjD"}
1
+ {"version":3,"file":"m4_multiply.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_multiply.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,iCAJW,MAAM,EAAE,GAAC,SAAS,CAAC,MAAM,CAAC,GAAC,YAAY,KACvC,MAAM,EAAE,GAAC,SAAS,CAAC,MAAM,CAAC,GAAC,YAAY,KACvC,MAAM,EAAE,GAAC,SAAS,CAAC,MAAM,CAAC,GAAC,YAAY,QA8DjD"}
@@ -1,12 +1,13 @@
1
1
  /**
2
2
  * Multiplies two 4x4 matrices
3
- * Adapted from gl-matrix
4
3
  *
5
4
  * @param {number[]|ArrayLike<number>|Float32Array} out the receiving matrix
6
5
  * @param {number[]|ArrayLike<number>|Float32Array} a the first operand
7
6
  * @param {number[]|ArrayLike<number>|Float32Array} b the second operand
8
7
  */
9
8
  export function m4_multiply(out, a, b) {
9
+ // Adapted from gl-matrix
10
+
10
11
  const a00 = a[0],
11
12
  a01 = a[1],
12
13
  a02 = a[2],
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Compose a 4x4 transformation matrix from 3x3 rotation matrix and a translation vector
3
+ * @param {number[]} output 4x4 matrix
4
+ * @param {number[]} rotation_matrix 3x3 mat
5
+ * @param {number[]} translation 3d vector
6
+ * @see m4_inverse_rotation_translation
7
+ */
8
+ export function m4_rotation_translation(output: number[], rotation_matrix: number[], translation: number[]): void;
9
+ //# sourceMappingURL=m4_rotation_translation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"m4_rotation_translation.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_rotation_translation.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,gDALW,MAAM,EAAE,mBACR,MAAM,EAAE,eACR,MAAM,EAAE,QA2BlB"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Compose a 4x4 transformation matrix from 3x3 rotation matrix and a translation vector
3
+ * @param {number[]} output 4x4 matrix
4
+ * @param {number[]} rotation_matrix 3x3 mat
5
+ * @param {number[]} translation 3d vector
6
+ * @see m4_inverse_rotation_translation
7
+ */
8
+ export function m4_rotation_translation(output, rotation_matrix, translation) {
9
+ const r = rotation_matrix;
10
+
11
+ output[0] = r[0];
12
+ output[1] = r[1];
13
+ output[2] = r[2];
14
+ output[3] = 0;
15
+
16
+ output[4] = r[3];
17
+ output[5] = r[4];
18
+ output[6] = r[5];
19
+ output[7] = 0;
20
+
21
+ output[8] = r[6];
22
+ output[9] = r[7];
23
+ output[10] = r[8];
24
+ output[11] = 0;
25
+
26
+ const t = translation;
27
+
28
+ output[12] = t[0];
29
+ output[13] = t[1];
30
+ output[14] = t[2];
31
+ output[15] = 1;
32
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ *
3
+ * @param {number[]} output 3x3 rotation matrix
4
+ * @param {Vector3} forward
5
+ * @param {Vector3} up_dir
6
+ */
7
+ export function m3_make_rotation_TBN(output: number[], forward: Vector3, up_dir: Vector3): void;
8
+ import Vector3 from "../Vector3.js";
9
+ //# sourceMappingURL=m3_make_rotation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"m3_make_rotation.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/mat3/m3_make_rotation.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,6CAJW,MAAM,EAAE,WACR,OAAO,UACP,OAAO,QAqBjB;oBA9BmB,eAAe"}
@@ -0,0 +1,31 @@
1
+ import Vector3 from "../Vector3.js";
2
+
3
+ const v3_scratch_1 = new Vector3();
4
+ const v3_scratch_2 = new Vector3();
5
+
6
+ /**
7
+ *
8
+ * @param {number[]} output 3x3 rotation matrix
9
+ * @param {Vector3} forward
10
+ * @param {Vector3} up_dir
11
+ */
12
+ export function m3_make_rotation_TBN(output, forward, up_dir) {
13
+ output[6] = forward.x;
14
+ output[7] = forward.y;
15
+ output[8] = forward.z;
16
+
17
+ v3_scratch_2.set(output[6], output[7], output[8]);
18
+ v3_scratch_1.crossVectors(up_dir, v3_scratch_2);
19
+ v3_scratch_1.normalize();
20
+
21
+ output[0] = v3_scratch_1.x;
22
+ output[1] = v3_scratch_1.y;
23
+ output[2] = v3_scratch_1.z;
24
+
25
+ v3_scratch_1.crossVectors(v3_scratch_2, v3_scratch_1);
26
+ v3_scratch_1.normalize();
27
+
28
+ output[3] = v3_scratch_1.x;
29
+ output[4] = v3_scratch_1.y;
30
+ output[5] = v3_scratch_1.z;
31
+ }
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * Get frustum corners from a set of planes
3
+ * see {@link frustum_compute_corners} for a non-three.js version
3
4
  * @param {Float32Array|number[]} result
4
5
  * @param {Plane[]} planes
5
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"computeFrustumCorners.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/render/forward_plus/computeFrustumCorners.js"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,8CAHW,YAAY,GAAC,MAAM,EAAE,UACrB,KAAK,EAAE,QA6DjB"}
1
+ {"version":3,"file":"computeFrustumCorners.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/render/forward_plus/computeFrustumCorners.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,8CAHW,YAAY,GAAC,MAAM,EAAE,UACrB,KAAK,EAAE,QA6DjB"}
@@ -4,6 +4,7 @@ import {
4
4
 
5
5
  /**
6
6
  * Get frustum corners from a set of planes
7
+ * see {@link frustum_compute_corners} for a non-three.js version
7
8
  * @param {Float32Array|number[]} result
8
9
  * @param {Plane[]} planes
9
10
  */
@@ -117,6 +117,11 @@ export class RenderGraph {
117
117
  * @return {string}
118
118
  */
119
119
  exportToDot(): string;
120
+ /**
121
+ * @readonly
122
+ * @type {boolean}
123
+ */
124
+ readonly isRenderGraph: boolean;
120
125
  }
121
126
  import { ResourceEntry } from "./ResourceEntry.js";
122
127
  import { ResourceNode } from "./ResourceNode.js";
@@ -1 +1 @@
1
- {"version":3,"file":"RenderGraph.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/render/frame_graph/RenderGraph.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH;IA6BI;;;OAGG;IACH,mBAFW,MAAM,EAOhB;IArCD;;;;OAIG;IACH,MAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,qBAAkB;IAElB;;;;OAIG;IACH,yBAAsB;IAEtB;;;;OAIG;IACH,4BAAyB;IAazB;;;;OAIG;IACH,qBAHW,MAAM,sBAahB;IAED;;;;OAIG;IACH,oBAHW,MAAM,qBAmBhB;IAED;;;;OAIG;IACH,cAJa,CAAC,MACH,MAAM,GACJ,CAAC,CAIb;IAED;;;;OAIG;IACH,gBAJa,CAAC,QACH,MAAM,cACN,CAAC,UAUX;IAED;;;;;OAKG;IACH,6BAYC;IAED;;;;;;OAMG;IACH,4BAeC;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAkBlB;IAED;;;;;;OAMG;IACH,gBANa,CAAC,QACH,MAAM,eACN,kBAAkB,CAAC,CAAC,CAAC,YACrB,CAAC,GACC,MAAM,CAUlB;IAED;;;OAGG;IACH,4BAHa,OAAO,CAQnB;IAED;;;;;;OAMG;IACH,IANa,CAAC,QACH,MAAM,QACN,CAAC,iBAEC,kBAAkB,CA2B9B;IAED;;;;;;OAMG;IACH,2DAHW,GAAC,GACC,OAAO,CAOnB;IAED,gBA6FC;IAED;;;OAGG;IACH,iBAFW,cAAc,QA6CxB;IAED;;;OAGG;IACH,eAFY,MAAM,CAiEjB;CACJ;8BAld6B,oBAAoB;6BACrB,mBAAmB;mCAJb,yBAAyB"}
1
+ {"version":3,"file":"RenderGraph.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/render/frame_graph/RenderGraph.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH;IA6BI;;;OAGG;IACH,mBAFW,MAAM,EAOhB;IArCD;;;;OAIG;IACH,MAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,qBAAkB;IAElB;;;;OAIG;IACH,yBAAsB;IAEtB;;;;OAIG;IACH,4BAAyB;IAazB;;;;OAIG;IACH,qBAHW,MAAM,sBAahB;IAED;;;;OAIG;IACH,oBAHW,MAAM,qBAmBhB;IAED;;;;OAIG;IACH,cAJa,CAAC,MACH,MAAM,GACJ,CAAC,CAIb;IAED;;;;OAIG;IACH,gBAJa,CAAC,QACH,MAAM,cACN,CAAC,UAUX;IAED;;;;;OAKG;IACH,6BAYC;IAED;;;;;;OAMG;IACH,4BAeC;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAkBlB;IAED;;;;;;OAMG;IACH,gBANa,CAAC,QACH,MAAM,eACN,kBAAkB,CAAC,CAAC,CAAC,YACrB,CAAC,GACC,MAAM,CAUlB;IAED;;;OAGG;IACH,4BAHa,OAAO,CAQnB;IAED;;;;;;OAMG;IACH,IANa,CAAC,QACH,MAAM,QACN,CAAC,iBAEC,kBAAkB,CA2B9B;IAED;;;;;;OAMG;IACH,2DAHW,GAAC,GACC,OAAO,CAOnB;IAED,gBA6FC;IAED;;;OAGG;IACH,iBAFW,cAAc,QA6CxB;IAED;;;OAGG;IACH,eAFY,MAAM,CAiEjB;IAGL;;;OAGG;IACH,wBAFU,OAAO,CAEkB;CANlC;8BAld6B,oBAAoB;6BACrB,mBAAmB;mCAJb,yBAAyB"}
@@ -470,3 +470,9 @@ export class RenderGraph {
470
470
  return out.build();
471
471
  }
472
472
  }
473
+
474
+ /**
475
+ * @readonly
476
+ * @type {boolean}
477
+ */
478
+ RenderGraph.prototype.isRenderGraph = true;