@woosh/meep-engine 2.117.36 → 2.117.38

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 (25) hide show
  1. package/build/meep.cjs +5 -1
  2. package/build/meep.module.js +5 -1
  3. package/package.json +1 -1
  4. package/src/core/geom/3d/Ray3.js +2 -2
  5. package/src/core/geom/3d/frustum/frustum_matrix4_project.d.ts +10 -0
  6. package/src/core/geom/3d/frustum/frustum_matrix4_project.d.ts.map +1 -0
  7. package/src/core/geom/3d/frustum/frustum_matrix4_project.js +43 -0
  8. package/src/core/geom/3d/frustum/slice_frustum_linear_to_points.d.ts.map +1 -1
  9. package/src/core/geom/3d/frustum/slice_frustum_linear_to_points.js +5 -1
  10. package/src/core/geom/3d/plane/plane3_matrix4_project.d.ts +12 -0
  11. package/src/core/geom/3d/plane/plane3_matrix4_project.d.ts.map +1 -0
  12. package/src/core/geom/3d/plane/plane3_matrix4_project.js +33 -0
  13. package/src/core/geom/vec3/v3_array_matrix4_rotate.d.ts +11 -0
  14. package/src/core/geom/vec3/v3_array_matrix4_rotate.d.ts.map +1 -0
  15. package/src/core/geom/vec3/v3_array_matrix4_rotate.js +22 -0
  16. package/src/core/geom/vec3/v3_matrix4_rotate.d.ts +4 -3
  17. package/src/core/geom/vec3/v3_matrix4_rotate.d.ts.map +1 -1
  18. package/src/core/geom/vec3/v3_matrix4_rotate.js +6 -7
  19. package/src/core/geom/vec3/v3_multiply_scalar.d.ts +11 -0
  20. package/src/core/geom/vec3/v3_multiply_scalar.d.ts.map +1 -0
  21. package/src/core/geom/vec3/v3_multiply_scalar.js +19 -0
  22. package/src/engine/graphics/geometry/buffered/geometry_compute_vertex_normals_unindexed.d.ts.map +1 -1
  23. package/src/engine/graphics/geometry/buffered/geometry_compute_vertex_normals_unindexed.js +1 -4
  24. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.js +2 -2
  25. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +2 -2
package/build/meep.cjs CHANGED
@@ -106777,7 +106777,11 @@ function read_cluster_frustum_corners(output, i_z_0, tr_xy_1, i_y_0, tr_x_1, i_x
106777
106777
  * @param {number} tr_z slices in Z axis
106778
106778
  * @param {number[]} output_frustum_corners
106779
106779
  */
106780
- function slice_frustum_linear_to_points(input_frustum_corners, tr_x, tr_y, tr_z, output_frustum_corners) {
106780
+ function slice_frustum_linear_to_points(
106781
+ input_frustum_corners,
106782
+ tr_x, tr_y, tr_z,
106783
+ output_frustum_corners
106784
+ ) {
106781
106785
  // read out view frustum scratch_corners
106782
106786
  const x_000 = input_frustum_corners[0];
106783
106787
  const y_000 = input_frustum_corners[1];
@@ -106775,7 +106775,11 @@ function read_cluster_frustum_corners(output, i_z_0, tr_xy_1, i_y_0, tr_x_1, i_x
106775
106775
  * @param {number} tr_z slices in Z axis
106776
106776
  * @param {number[]} output_frustum_corners
106777
106777
  */
106778
- function slice_frustum_linear_to_points(input_frustum_corners, tr_x, tr_y, tr_z, output_frustum_corners) {
106778
+ function slice_frustum_linear_to_points(
106779
+ input_frustum_corners,
106780
+ tr_x, tr_y, tr_z,
106781
+ output_frustum_corners
106782
+ ) {
106779
106783
  // read out view frustum scratch_corners
106780
106784
  const x_000 = input_frustum_corners[0];
106781
106785
  const y_000 = input_frustum_corners[1];
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Fully featured ECS game engine written in JavaScript",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.117.36",
8
+ "version": "2.117.38",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -2,9 +2,9 @@ import { assert } from "../../assert.js";
2
2
  import { array_copy } from "../../collection/array/array_copy.js";
3
3
  import { array_range_equal_strict } from "../../collection/array/array_range_equal_strict.js";
4
4
  import { computeHashFloatArray } from "../../math/hash/computeHashFloatArray.js";
5
+ import { v3_array_matrix4_rotate } from "../vec3/v3_array_matrix4_rotate.js";
5
6
  import { v3_array_normalize } from "../vec3/v3_array_normalize.js";
6
7
  import { v3_matrix4_multiply } from "../vec3/v3_matrix4_multiply.js";
7
- import { v3_matrix4_rotate } from "../vec3/v3_matrix4_rotate.js";
8
8
  import { ray3_interval_array_apply_matrix4 } from "./ray/ray3_interval_array_apply_matrix4.js";
9
9
 
10
10
  /**
@@ -175,7 +175,7 @@ export class Ray3 extends Float32Array {
175
175
 
176
176
  // special case
177
177
  v3_matrix4_multiply(this, 0, this, 0, m4);
178
- v3_matrix4_rotate(this, 3, this, 3, m4);
178
+ v3_array_matrix4_rotate(this, 3, this, 3, m4);
179
179
 
180
180
  }
181
181
  }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Perform affine transform on a given frustum
3
+ * @param {number[]|Float32Array|Float64Array} output
4
+ * @param {number} output_offset
5
+ * @param {number[]|Float32Array|Float64Array} input
6
+ * @param {number} input_offset
7
+ * @param {number[]|Float32Array|Float64Array} matrix4
8
+ */
9
+ export function frustum_matrix4_project(output: number[] | Float32Array | Float64Array, output_offset: number, input: number[] | Float32Array | Float64Array, input_offset: number, matrix4: number[] | Float32Array | Float64Array): void;
10
+ //# sourceMappingURL=frustum_matrix4_project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frustum_matrix4_project.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/frustum/frustum_matrix4_project.js"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,gDANW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,gBAClC,MAAM,WACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,QAiC5C"}
@@ -0,0 +1,43 @@
1
+ import { assert } from "../../../assert.js";
2
+ import { plane3_matrix4_project } from "../plane/plane3_matrix4_project.js";
3
+
4
+ /**
5
+ * Perform affine transform on a given frustum
6
+ * @param {number[]|Float32Array|Float64Array} output
7
+ * @param {number} output_offset
8
+ * @param {number[]|Float32Array|Float64Array} input
9
+ * @param {number} input_offset
10
+ * @param {number[]|Float32Array|Float64Array} matrix4
11
+ */
12
+ export function frustum_matrix4_project(
13
+ output, output_offset,
14
+ input, input_offset,
15
+ matrix4
16
+ ) {
17
+ assert.isArrayLike(output, 'output');
18
+ assert.isNonNegativeInteger(output_offset, "output_offset");
19
+
20
+ assert.isArrayLike(input, 'input');
21
+ assert.greaterThanOrEqual(input.length, input_offset + 24, 'input too small');
22
+ assert.isNonNegativeInteger(input_offset, "input_offset");
23
+
24
+ assert.isArrayLike(matrix4, 'matrix4');
25
+
26
+ for (let plane_index = 0; plane_index < 6; plane_index++) {
27
+ const frustum_offset = plane_index * 4;
28
+
29
+ const i = input_offset + frustum_offset;
30
+ const o = output_offset + frustum_offset;
31
+
32
+ plane3_matrix4_project(
33
+ output, o,
34
+ matrix4,
35
+ input[i],
36
+ input[i + 1],
37
+ input[i + 2],
38
+ input[i + 3],
39
+ );
40
+
41
+ }
42
+
43
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"slice_frustum_linear_to_points.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/frustum/slice_frustum_linear_to_points.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,sEANW,MAAM,EAAE,QACR,MAAM,QACN,MAAM,QACN,MAAM,0BACN,MAAM,EAAE,QAqFlB"}
1
+ {"version":3,"file":"slice_frustum_linear_to_points.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/frustum/slice_frustum_linear_to_points.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,sEANW,MAAM,EAAE,QACR,MAAM,QACN,MAAM,QACN,MAAM,0BACN,MAAM,EAAE,QAyFlB"}
@@ -6,7 +6,11 @@
6
6
  * @param {number} tr_z slices in Z axis
7
7
  * @param {number[]} output_frustum_corners
8
8
  */
9
- export function slice_frustum_linear_to_points(input_frustum_corners, tr_x, tr_y, tr_z, output_frustum_corners) {
9
+ export function slice_frustum_linear_to_points(
10
+ input_frustum_corners,
11
+ tr_x, tr_y, tr_z,
12
+ output_frustum_corners
13
+ ) {
10
14
  // read out view frustum scratch_corners
11
15
  const x_000 = input_frustum_corners[0];
12
16
  const y_000 = input_frustum_corners[1];
@@ -0,0 +1,12 @@
1
+ /**
2
+ *
3
+ * @param {number[]|Float64Array|Float32Array} destination
4
+ * @param {number} destination_offset
5
+ * @param {number[]|Float32Array|Float64Array} matrix
6
+ * @param {number} x
7
+ * @param {number} y
8
+ * @param {number} z
9
+ * @param {number} w
10
+ */
11
+ export function plane3_matrix4_project(destination: number[] | Float64Array | Float32Array, destination_offset: number, matrix: number[] | Float32Array | Float64Array, x: number, y: number, z: number, w: number): void;
12
+ //# sourceMappingURL=plane3_matrix4_project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plane3_matrix4_project.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/plane/plane3_matrix4_project.js"],"names":[],"mappings":"AAOA;;;;;;;;;GASG;AACH,oDARW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,sBAClC,MAAM,UACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,KAClC,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,QAiBhB"}
@@ -0,0 +1,33 @@
1
+ import { v3_dot_array_array } from "../../vec3/v3_dot_array_array.js";
2
+ import { v3_matrix4_multiply } from "../../vec3/v3_matrix4_multiply.js";
3
+ import { v3_matrix4_rotate } from "../../vec3/v3_matrix4_rotate.js";
4
+ import { v3_multiply_scalar } from "../../vec3/v3_multiply_scalar.js";
5
+
6
+ const scratch_v3_0 = new Float32Array(3);
7
+
8
+ /**
9
+ *
10
+ * @param {number[]|Float64Array|Float32Array} destination
11
+ * @param {number} destination_offset
12
+ * @param {number[]|Float32Array|Float64Array} matrix
13
+ * @param {number} x
14
+ * @param {number} y
15
+ * @param {number} z
16
+ * @param {number} w
17
+ */
18
+ export function plane3_matrix4_project(
19
+ destination, destination_offset,
20
+ matrix,
21
+ x, y, z, w,
22
+ ) {
23
+
24
+ // build reference point in the new pane
25
+ v3_multiply_scalar(scratch_v3_0, 0, x, y, z, -w);
26
+ v3_matrix4_multiply(scratch_v3_0, 0, scratch_v3_0, 0, matrix);
27
+
28
+ // construct rotation matrix for the normal
29
+ v3_matrix4_rotate(destination, destination_offset, x, y, z, matrix);
30
+
31
+ // figure out new planar offset using new orientation and a reference point
32
+ destination[destination_offset + 3] = -v3_dot_array_array(scratch_v3_0, 0, destination, destination_offset);
33
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Perform rotation on a direction vector using 3x3 portion of a 4x4 matrix
3
+ * NOTE: produces a normalized vector
4
+ * @param {number[]|Float32Array} output
5
+ * @param {number} output_offset
6
+ * @param {number[]|Float32Array} input
7
+ * @param {number} input_offset
8
+ * @param {number[]|Float32Array} m4
9
+ */
10
+ export function v3_array_matrix4_rotate(output: number[] | Float32Array, output_offset: number, input: number[] | Float32Array, input_offset: number, m4: number[] | Float32Array): void;
11
+ //# sourceMappingURL=v3_array_matrix4_rotate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3_array_matrix4_rotate.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_array_matrix4_rotate.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,gDANW,MAAM,EAAE,GAAC,YAAY,iBACrB,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,gBACrB,MAAM,MACN,MAAM,EAAE,GAAC,YAAY,QAY/B"}
@@ -0,0 +1,22 @@
1
+ import { v3_matrix4_rotate } from "./v3_matrix4_rotate.js";
2
+
3
+ /**
4
+ * Perform rotation on a direction vector using 3x3 portion of a 4x4 matrix
5
+ * NOTE: produces a normalized vector
6
+ * @param {number[]|Float32Array} output
7
+ * @param {number} output_offset
8
+ * @param {number[]|Float32Array} input
9
+ * @param {number} input_offset
10
+ * @param {number[]|Float32Array} m4
11
+ */
12
+ export function v3_array_matrix4_rotate(
13
+ output, output_offset,
14
+ input, input_offset,
15
+ m4
16
+ ) {
17
+ const x = input[input_offset];
18
+ const y = input[input_offset + 1];
19
+ const z = input[input_offset + 2];
20
+
21
+ v3_matrix4_rotate(output,output_offset,x,y,z,m4);
22
+ }
@@ -2,9 +2,10 @@
2
2
  * Perform rotation on a direction vector using 3x3 portion of a 4x4 matrix
3
3
  * @param {number[]|Float32Array} output
4
4
  * @param {number} output_offset
5
- * @param {number[]|Float32Array} input
6
- * @param {number} input_offset
5
+ * @param {number} x
6
+ * @param {number} y
7
+ * @param {number} z
7
8
  * @param {number[]|Float32Array} m4
8
9
  */
9
- export function v3_matrix4_rotate(output: number[] | Float32Array, output_offset: number, input: number[] | Float32Array, input_offset: number, m4: number[] | Float32Array): void;
10
+ export function v3_matrix4_rotate(output: number[] | Float32Array, output_offset: number, x: number, y: number, z: number, m4: number[] | Float32Array): void;
10
11
  //# sourceMappingURL=v3_matrix4_rotate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"v3_matrix4_rotate.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_matrix4_rotate.js"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,0CANW,MAAM,EAAE,GAAC,YAAY,iBACrB,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,gBACrB,MAAM,MACN,MAAM,EAAE,GAAC,YAAY,QAoB/B"}
1
+ {"version":3,"file":"v3_matrix4_rotate.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_matrix4_rotate.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,0CAPW,MAAM,EAAE,GAAC,YAAY,iBACrB,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,MACN,MAAM,EAAE,GAAC,YAAY,QAkB/B"}
@@ -4,26 +4,25 @@ import { v3_length } from "./v3_length.js";
4
4
  * Perform rotation on a direction vector using 3x3 portion of a 4x4 matrix
5
5
  * @param {number[]|Float32Array} output
6
6
  * @param {number} output_offset
7
- * @param {number[]|Float32Array} input
8
- * @param {number} input_offset
7
+ * @param {number} x
8
+ * @param {number} y
9
+ * @param {number} z
9
10
  * @param {number[]|Float32Array} m4
10
11
  */
11
12
  export function v3_matrix4_rotate(
12
13
  output, output_offset,
13
- input, input_offset,
14
+ x, y, z,
14
15
  m4
15
16
  ) {
16
- const x = input[input_offset];
17
- const y = input[input_offset + 1];
18
- const z = input[input_offset + 2];
19
17
 
20
18
  const _x = m4[0] * x + m4[4] * y + m4[8] * z;
21
19
  const _y = m4[1] * x + m4[5] * y + m4[9] * z;
22
20
  const _z = m4[2] * x + m4[6] * y + m4[10] * z;
23
21
 
22
+ // perform normalization
24
23
  const norm = 1 / v3_length(_x, _y, _z);
25
24
 
26
25
  output[output_offset] = _x * norm;
27
26
  output[output_offset + 1] = _y * norm;
28
27
  output[output_offset + 2] = _z * norm;
29
- }
28
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ *
3
+ * @param {number[]|Float64Array|Float32Array} result
4
+ * @param {number} result_offset
5
+ * @param {number} x
6
+ * @param {number} y
7
+ * @param {number} z
8
+ * @param {number} scalar
9
+ */
10
+ export function v3_multiply_scalar(result: number[] | Float64Array | Float32Array, result_offset: number, x: number, y: number, z: number, scalar: number): void;
11
+ //# sourceMappingURL=v3_multiply_scalar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3_multiply_scalar.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_multiply_scalar.js"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,2CAPW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,UACN,MAAM,QAWhB"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ *
3
+ * @param {number[]|Float64Array|Float32Array} result
4
+ * @param {number} result_offset
5
+ * @param {number} x
6
+ * @param {number} y
7
+ * @param {number} z
8
+ * @param {number} scalar
9
+ */
10
+ export function v3_multiply_scalar(
11
+ result, result_offset,
12
+ x, y, z, scalar
13
+ ) {
14
+
15
+ result[result_offset] = x * scalar;
16
+ result[result_offset + 1] = y * scalar;
17
+ result[result_offset + 2] = z * scalar;
18
+
19
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"geometry_compute_vertex_normals_unindexed.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/geometry/buffered/geometry_compute_vertex_normals_unindexed.js"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,qEAJW,MAAO,MAAM,CAAC,GAAC,YAAY,WAC3B,MAAO,MAAM,CAAC,GAAC,YAAY,gBAC3B,MAAM,QAgChB"}
1
+ {"version":3,"file":"geometry_compute_vertex_normals_unindexed.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/geometry/buffered/geometry_compute_vertex_normals_unindexed.js"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,qEAJW,MAAO,MAAM,CAAC,GAAC,YAAY,WAC3B,MAAO,MAAM,CAAC,GAAC,YAAY,gBAC3B,MAAM,QA8BhB"}
@@ -1,6 +1,5 @@
1
1
  import { array_copy } from "../../../../core/collection/array/array_copy.js";
2
2
  import { geometry_construct_triangle_normal } from "../geometry_construct_triangle_normal.js";
3
- import { v3_array_normalize_many } from "./v3_array_normalize_many.js";
4
3
 
5
4
  const scratch_v3 = new Float64Array(3);
6
5
 
@@ -36,7 +35,5 @@ export function geometry_compute_vertex_normals_unindexed(
36
35
 
37
36
  }
38
37
 
39
- // ensure unit magnitude
40
-
41
- v3_array_normalize_many(normals);
38
+ // no need to normalize, that's already handled during normal construction for each triangle
42
39
  }
@@ -1,4 +1,4 @@
1
- import { v3_matrix4_rotate } from "../../../../core/geom/vec3/v3_matrix4_rotate.js";
1
+ import { v3_array_matrix4_rotate } from "../../../../core/geom/vec3/v3_array_matrix4_rotate.js";
2
2
 
3
3
 
4
4
  /**
@@ -26,6 +26,6 @@ export function ray_hit_apply_transform(output, hit, m) {
26
26
  output[2] = result_p_z;
27
27
 
28
28
  // transform normal
29
- v3_matrix4_rotate(output, 3, hit, 3, m);
29
+ v3_array_matrix4_rotate(output, 3, hit, 3, m);
30
30
 
31
31
  }
@@ -1,7 +1,7 @@
1
1
  import { vec3 } from "gl-matrix";
2
2
  import { dataTypeFromTypedArray } from "../../../../../core/binary/type/dataTypeFromTypedArray.js";
3
+ import { v3_array_matrix4_rotate } from "../../../../../core/geom/vec3/v3_array_matrix4_rotate.js";
3
4
  import { v3_distance_sqr } from "../../../../../core/geom/vec3/v3_distance_sqr.js";
4
- import { v3_matrix4_rotate } from "../../../../../core/geom/vec3/v3_matrix4_rotate.js";
5
5
  import { decode_attribute_value } from "../../../geometry/decode_attribute_value.js";
6
6
  import { geometry_construct_triangle_normal } from "../../../geometry/geometry_construct_triangle_normal.js";
7
7
  import { sample_triangle_attribute } from "../geometry/sample_triangle_attribute.js";
@@ -86,7 +86,7 @@ export function sample_material(
86
86
  }
87
87
 
88
88
  // apply transform
89
- v3_matrix4_rotate(out, 3, out, 3, mesh.transform);
89
+ v3_array_matrix4_rotate(out, 3, out, 3, mesh.transform);
90
90
 
91
91
  material.normal.sample(normal, texture_uv[0], texture_uv[1]);
92
92