@woosh/meep-engine 2.109.0 → 2.109.2

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 (311) hide show
  1. package/build/meep.cjs +150 -199
  2. package/build/meep.min.js +1 -1
  3. package/build/meep.module.js +150 -199
  4. package/package.json +1 -1
  5. package/src/core/binary/BitSet.d.ts +6 -0
  6. package/src/core/binary/BitSet.d.ts.map +1 -1
  7. package/src/core/binary/BitSet.js +14 -42
  8. package/src/core/binary/align_32.d.ts +7 -0
  9. package/src/core/binary/align_32.d.ts.map +1 -0
  10. package/src/core/binary/align_32.js +8 -0
  11. package/src/core/binary/align_32.spec.d.ts +2 -0
  12. package/src/core/binary/align_32.spec.d.ts.map +1 -0
  13. package/src/core/binary/align_32.spec.js +11 -0
  14. package/src/core/binary/align_4.js +2 -1
  15. package/src/core/binary/ctz32.d.ts.map +1 -1
  16. package/src/core/binary/ctz32.js +12 -11
  17. package/src/core/binary/lsb_32.d.ts +9 -0
  18. package/src/core/binary/lsb_32.d.ts.map +1 -0
  19. package/src/core/binary/lsb_32.js +12 -0
  20. package/src/core/binary/msb_32.d.ts +2 -0
  21. package/src/core/binary/msb_32.d.ts.map +1 -0
  22. package/src/core/binary/msb_32.js +20 -0
  23. package/src/core/binary/msb_lut_de_bruijn.d.ts +7 -0
  24. package/src/core/binary/msb_lut_de_bruijn.d.ts.map +1 -0
  25. package/src/core/binary/msb_lut_de_bruijn.js +9 -0
  26. package/src/core/binary/reinterpret_int32_as_float32.d.ts +7 -0
  27. package/src/core/binary/reinterpret_int32_as_float32.d.ts.map +1 -0
  28. package/src/core/binary/reinterpret_int32_as_float32.js +14 -0
  29. package/src/core/binary/reverse_bits_uint32.d.ts +8 -0
  30. package/src/core/binary/reverse_bits_uint32.d.ts.map +1 -0
  31. package/src/core/binary/reverse_bits_uint32.js +17 -0
  32. package/src/core/binary/reverse_bits_uint32.spec.d.ts +2 -0
  33. package/src/core/binary/reverse_bits_uint32.spec.d.ts.map +1 -0
  34. package/src/core/binary/reverse_bits_uint32.spec.js +18 -0
  35. package/src/core/bvh2/bvh3/BVH.d.ts.map +1 -1
  36. package/src/core/bvh2/bvh3/BVH.js +13 -18
  37. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.d.ts.map +1 -1
  38. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.js +3 -1
  39. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.d.ts.map +1 -1
  40. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.js +6 -7
  41. package/src/core/bvh2/bvh3/ebvh_build_hierarchy.d.ts.map +1 -1
  42. package/src/core/bvh2/bvh3/ebvh_build_hierarchy.js +4 -0
  43. package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.d.ts +16 -0
  44. package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.d.ts.map +1 -0
  45. package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.js +130 -0
  46. package/src/core/bvh2/bvh3/query/cache/BVH_QUERY_CACHE_SIZE.d.ts +2 -0
  47. package/src/core/bvh2/bvh3/query/cache/BVH_QUERY_CACHE_SIZE.d.ts.map +1 -0
  48. package/src/core/bvh2/bvh3/query/cache/BVH_QUERY_CACHE_SIZE.js +1 -0
  49. package/src/core/bvh2/bvh3/query/cache/bvh_query_cache_hash_v3.d.ts +9 -0
  50. package/src/core/bvh2/bvh3/query/cache/bvh_query_cache_hash_v3.d.ts.map +1 -0
  51. package/src/core/bvh2/bvh3/query/cache/bvh_query_cache_hash_v3.js +31 -0
  52. package/src/core/collection/array/array_quick_sort_by_lookup_map.d.ts +9 -0
  53. package/src/core/collection/array/array_quick_sort_by_lookup_map.d.ts.map +1 -0
  54. package/src/core/collection/array/array_quick_sort_by_lookup_map.js +79 -0
  55. package/src/core/collection/array/array_quick_sort_by_lookup_uint.d.ts +8 -0
  56. package/src/core/collection/array/array_quick_sort_by_lookup_uint.d.ts.map +1 -0
  57. package/src/core/collection/array/{array_quick_sort_by_lookup.js → array_quick_sort_by_lookup_uint.js} +1 -1
  58. package/src/core/collection/array/array_shuffle.js +1 -1
  59. package/src/core/collection/array/array_swap_one.d.ts.map +1 -1
  60. package/src/core/collection/array/array_swap_one.js +6 -0
  61. package/src/core/events/signal/Signal.d.ts.map +1 -1
  62. package/src/core/events/signal/Signal.js +10 -10
  63. package/src/core/geom/2d/compute_triangle_area_2d.d.ts.map +1 -1
  64. package/src/core/geom/2d/compute_triangle_area_2d.js +5 -3
  65. package/src/core/geom/3d/Ray3.d.ts +6 -0
  66. package/src/core/geom/3d/Ray3.d.ts.map +1 -1
  67. package/src/core/geom/3d/Ray3.js +24 -0
  68. package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_min.d.ts +16 -0
  69. package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_min.d.ts.map +1 -0
  70. package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_min.js +29 -0
  71. package/src/core/geom/3d/aabb/aabb3_from_v3_array_transformed.d.ts +2 -2
  72. package/src/core/geom/3d/aabb/aabb3_from_v3_array_transformed.d.ts.map +1 -1
  73. package/src/core/geom/3d/aabb/aabb3_from_v3_array_transformed.js +6 -6
  74. package/src/core/geom/3d/aabb/aabb3_overlaps_ray_segment.d.ts +11 -0
  75. package/src/core/geom/3d/aabb/aabb3_overlaps_ray_segment.d.ts.map +1 -0
  76. package/src/core/geom/3d/aabb/aabb3_overlaps_ray_segment.js +61 -0
  77. package/src/core/geom/3d/eulerAnglesFromMatrix.d.ts +2 -2
  78. package/src/core/geom/3d/eulerAnglesFromMatrix.d.ts.map +1 -1
  79. package/src/core/geom/3d/eulerAnglesFromMatrix.js +28 -25
  80. package/src/core/geom/3d/morton/v3_morton_encode_bounded.d.ts +2 -2
  81. package/src/core/geom/3d/morton/v3_morton_encode_bounded.d.ts.map +1 -1
  82. package/src/core/geom/3d/morton/v3_morton_encode_bounded.js +1 -1
  83. package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.d.ts +2 -2
  84. package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.d.ts.map +1 -1
  85. package/src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.js +1 -1
  86. package/src/core/geom/3d/ray/ray3_shift_origin_along_direction.js +2 -2
  87. package/src/core/geom/3d/sphere/harmonics/sh3_convolve_with_cosine_kernel.js +2 -1
  88. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.d.ts +12 -0
  89. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.d.ts.map +1 -0
  90. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.js +40 -0
  91. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.spec.d.ts +2 -0
  92. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.spec.d.ts.map +1 -0
  93. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.spec.js +27 -0
  94. package/src/core/geom/3d/sphere/sphere_intersects_ray.js +1 -1
  95. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_circumsphere.d.ts.map +1 -1
  96. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_circumsphere.js +24 -188
  97. package/src/core/geom/3d/tetrahedra/triangle/prototype.js +1 -1
  98. package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.d.ts +11 -0
  99. package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.d.ts.map +1 -0
  100. package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.js +42 -0
  101. package/src/core/geom/3d/topology/samples/sampleFloodFill.js +2 -2
  102. package/src/core/geom/3d/topology/tm_face_area.js +2 -2
  103. package/src/core/geom/3d/triangle/{computeTriangleSurfaceArea.d.ts → compute_triangle_area_3d.d.ts} +2 -2
  104. package/src/core/geom/3d/triangle/compute_triangle_area_3d.d.ts.map +1 -0
  105. package/src/core/geom/3d/triangle/{computeTriangleSurfaceArea.js → compute_triangle_area_3d.js} +2 -4
  106. package/src/core/geom/Quaternion.d.ts.map +1 -1
  107. package/src/core/geom/Quaternion.js +13 -102
  108. package/src/core/geom/Quaternion.spec.js +2 -2
  109. package/src/core/geom/Vector1.d.ts.map +1 -1
  110. package/src/core/geom/Vector1.js +14 -6
  111. package/src/core/geom/vec/vector_copy.d.ts +10 -0
  112. package/src/core/geom/vec/vector_copy.d.ts.map +1 -0
  113. package/src/core/geom/vec/vector_copy.js +13 -0
  114. package/src/core/{math/vector_nd_dot.d.ts → geom/vec/vector_dot.d.ts} +2 -2
  115. package/src/core/geom/vec/vector_dot.d.ts.map +1 -0
  116. package/src/core/{math/vector_nd_dot.js → geom/vec/vector_dot.js} +1 -1
  117. package/src/core/{math/vector_nd_normalize.d.ts → geom/vec/vector_normalize.d.ts} +2 -2
  118. package/src/core/geom/vec/vector_normalize.d.ts.map +1 -0
  119. package/src/core/{math/vector_nd_normalize.js → geom/vec/vector_normalize.js} +1 -1
  120. package/src/core/geom/vec/vector_normalize.spec.d.ts +2 -0
  121. package/src/core/geom/vec/vector_normalize.spec.d.ts.map +1 -0
  122. package/src/core/{math/vector_nd_normalize.spec.js → geom/vec/vector_normalize.spec.js} +3 -3
  123. package/src/core/geom/vec/vector_scale_array.d.ts +11 -0
  124. package/src/core/geom/vec/vector_scale_array.d.ts.map +1 -0
  125. package/src/core/geom/vec/vector_scale_array.js +31 -0
  126. package/src/core/geom/vec3/v3_array_displace_in_direction.d.ts +14 -0
  127. package/src/core/geom/vec3/v3_array_displace_in_direction.d.ts.map +1 -0
  128. package/src/core/geom/vec3/{v3_shift_along_direction.js → v3_array_displace_in_direction.js} +1 -1
  129. package/src/core/geom/vec3/v3_displace_in_direction.d.ts +7 -7
  130. package/src/core/geom/vec3/v3_displace_in_direction.d.ts.map +1 -1
  131. package/src/core/geom/vec3/v3_displace_in_direction.js +20 -17
  132. package/src/core/geom/vec3/v3_displace_in_direction.spec.d.ts +2 -0
  133. package/src/core/geom/vec3/v3_displace_in_direction.spec.d.ts.map +1 -0
  134. package/src/core/geom/vec3/v3_displace_in_direction.spec.js +80 -0
  135. package/src/core/geom/vec3/v3_dot_array_array.js +2 -0
  136. package/src/core/geom/vec4/v4_length.d.ts +10 -0
  137. package/src/core/geom/vec4/v4_length.d.ts.map +1 -0
  138. package/src/core/geom/vec4/v4_length.js +13 -0
  139. package/src/core/geom/vec4/v4_length_sqr.js +2 -1
  140. package/src/core/graph/eigen/matrix_eigenvalues_in_place.spec.js +31 -1
  141. package/src/core/math/FLT_EPSILON_64.d.ts +6 -0
  142. package/src/core/math/FLT_EPSILON_64.d.ts.map +1 -0
  143. package/src/core/math/FLT_EPSILON_64.js +5 -0
  144. package/src/core/math/gaussian.d.ts +2 -2
  145. package/src/core/math/gaussian.js +2 -2
  146. package/src/core/math/linalg/README.md +1 -0
  147. package/src/core/math/linalg/lu_factor_linear_system.d.ts +13 -0
  148. package/src/core/math/linalg/lu_factor_linear_system.d.ts.map +1 -0
  149. package/src/core/math/linalg/lu_factor_linear_system.js +112 -0
  150. package/src/core/math/linalg/lu_solve_linear_system.d.ts +14 -0
  151. package/src/core/math/linalg/lu_solve_linear_system.d.ts.map +1 -0
  152. package/src/core/math/linalg/lu_solve_linear_system.js +51 -0
  153. package/src/core/math/linalg/solve_linear_system.d.ts +14 -0
  154. package/src/core/math/linalg/solve_linear_system.d.ts.map +1 -0
  155. package/src/core/math/linalg/solve_linear_system.js +52 -0
  156. package/src/core/math/linalg/solve_linear_system.spec.d.ts +2 -0
  157. package/src/core/math/linalg/solve_linear_system.spec.d.ts.map +1 -0
  158. package/src/core/math/linalg/solve_linear_system.spec.js +70 -0
  159. package/src/core/math/linalg/solve_linear_system_GEPP_2x2.d.ts +10 -0
  160. package/src/core/math/linalg/solve_linear_system_GEPP_2x2.d.ts.map +1 -0
  161. package/src/core/math/linalg/solve_linear_system_GEPP_2x2.js +91 -0
  162. package/src/core/math/solveQuadratic.d.ts.map +1 -1
  163. package/src/core/math/solveQuadratic.js +2 -0
  164. package/src/core/math/statistics/gaussian_amplitude.d.ts +8 -0
  165. package/src/core/math/statistics/gaussian_amplitude.d.ts.map +1 -0
  166. package/src/core/math/statistics/gaussian_amplitude.js +13 -0
  167. package/src/core/math/statistics/halton_sequence.js +3 -3
  168. package/src/core/math/statistics/halton_sequence.spec.js +18 -0
  169. package/src/core/math/statistics/hammersley_sequence.d.ts +9 -0
  170. package/src/core/math/statistics/hammersley_sequence.d.ts.map +1 -0
  171. package/src/core/math/statistics/hammersley_sequence.js +25 -0
  172. package/src/core/math/statistics/hammersley_sequence_2d.d.ts +9 -0
  173. package/src/core/math/statistics/hammersley_sequence_2d.d.ts.map +1 -0
  174. package/src/core/math/statistics/hammersley_sequence_2d.js +17 -0
  175. package/src/core/math/statistics/radical_inverse_VdC_base_2.d.ts +8 -0
  176. package/src/core/math/statistics/radical_inverse_VdC_base_2.d.ts.map +1 -0
  177. package/src/core/math/statistics/radical_inverse_VdC_base_2.js +15 -0
  178. package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.d.ts +2 -0
  179. package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.d.ts.map +1 -0
  180. package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.js +9 -0
  181. package/src/core/model/node-graph/node/NodeInstance.d.ts.map +1 -1
  182. package/src/core/model/node-graph/node/NodeInstance.js +44 -12
  183. package/src/core/model/node-graph/node/NodeInstance.spec.d.ts +2 -0
  184. package/src/core/model/node-graph/node/NodeInstance.spec.d.ts.map +1 -0
  185. package/src/core/model/node-graph/node/NodeInstance.spec.js +82 -0
  186. package/src/core/model/node-graph/node/NodeInstancePortReference.d.ts.map +1 -1
  187. package/src/core/model/node-graph/node/NodeInstancePortReference.js +9 -0
  188. package/src/core/model/node-graph/node/NodeInstancePortReference.spec.js +20 -0
  189. package/src/core/model/node-graph/node/Port.d.ts.map +1 -1
  190. package/src/core/model/node-graph/node/Port.js +5 -12
  191. package/src/core/model/node-graph/node/PortDirection.d.ts.map +1 -1
  192. package/src/core/model/node-graph/node/PortDirection.js +7 -1
  193. package/src/engine/asset/CORS/CrossOriginConfig.d.ts.map +1 -1
  194. package/src/engine/asset/CORS/CrossOriginConfig.js +6 -4
  195. package/src/engine/graphics/geometry/computeMeshSurfaceArea.js +2 -2
  196. package/src/engine/graphics/impostors/octahedral/grid/OctahedralUvEncoder.d.ts.map +1 -1
  197. package/src/engine/graphics/impostors/octahedral/grid/OctahedralUvEncoder.js +33 -3
  198. package/src/engine/graphics/impostors/octahedral/prototypeBaker.js +9 -7
  199. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts +6 -0
  200. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts.map +1 -0
  201. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.js +18 -0
  202. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.d.ts +6 -0
  203. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.d.ts.map +1 -0
  204. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.js +266 -0
  205. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.d.ts +7 -0
  206. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.d.ts.map +1 -0
  207. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.js +19 -0
  208. package/src/engine/graphics/sh3/SH3VisualisationMaterial.js +9 -9
  209. package/src/engine/graphics/sh3/fromCubeRenderTarget.d.ts.map +1 -1
  210. package/src/engine/graphics/sh3/fromCubeRenderTarget.js +14 -17
  211. package/src/engine/graphics/sh3/gi/material/MaterialTransformer.d.ts.map +1 -1
  212. package/src/engine/graphics/sh3/gi/material/MaterialTransformer.js +0 -2
  213. package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts +7 -29
  214. package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts.map +1 -1
  215. package/src/engine/graphics/sh3/lpv/LightProbeVolume.js +52 -164
  216. package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.d.ts +13 -0
  217. package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.d.ts.map +1 -0
  218. package/src/engine/graphics/sh3/lpv/LightProbeVolumeBaker.js +63 -0
  219. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts +1 -0
  220. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts.map +1 -1
  221. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.js +33 -16
  222. package/src/engine/graphics/sh3/lpv/build_probes_for_scene.d.ts.map +1 -1
  223. package/src/engine/graphics/sh3/lpv/build_probes_for_scene.js +4 -29
  224. package/src/engine/graphics/sh3/lpv/{LightProbeVolumeSerializationAdapter.d.ts → serialization/LightProbeVolumeSerializationAdapter.d.ts} +2 -2
  225. package/src/engine/graphics/sh3/lpv/serialization/LightProbeVolumeSerializationAdapter.d.ts.map +1 -0
  226. package/src/engine/graphics/sh3/lpv/{LightProbeVolumeSerializationAdapter.js → serialization/LightProbeVolumeSerializationAdapter.js} +2 -2
  227. package/src/engine/graphics/sh3/lpv/sh3_bake_depth.d.ts +13 -0
  228. package/src/engine/graphics/sh3/lpv/sh3_bake_depth.d.ts.map +1 -0
  229. package/src/engine/graphics/sh3/lpv/sh3_bake_depth.js +71 -0
  230. package/src/engine/graphics/sh3/lpv/worker/lpv_build_worker.d.ts +2 -0
  231. package/src/engine/graphics/sh3/lpv/worker/lpv_build_worker.d.ts.map +1 -0
  232. package/src/engine/graphics/sh3/lpv/worker/lpv_build_worker.js +38 -0
  233. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts +1 -7
  234. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts.map +1 -1
  235. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.js +58 -147
  236. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts +13 -9
  237. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts.map +1 -1
  238. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.js +74 -54
  239. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts +23 -5
  240. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts.map +1 -1
  241. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.js +211 -59
  242. package/src/engine/graphics/sh3/path_tracer/PathTracer.js +1 -1
  243. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_along_ray.d.ts +15 -0
  244. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_along_ray.d.ts.map +1 -0
  245. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_along_ray.js +46 -0
  246. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_sqr_to_point.d.ts +14 -0
  247. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_sqr_to_point.d.ts.map +1 -0
  248. package/src/engine/graphics/sh3/path_tracer/build_bvh_nodes_distances_sqr_to_point.js +43 -0
  249. package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts.map +1 -0
  250. package/src/engine/graphics/sh3/path_tracer/{compute_triangle_group_aabb3.js → geometry/compute_triangle_group_aabb3.js} +2 -2
  251. package/src/engine/graphics/sh3/path_tracer/geometry/construct_ray_hit_from_geometry.d.ts +12 -0
  252. package/src/engine/graphics/sh3/path_tracer/geometry/construct_ray_hit_from_geometry.d.ts.map +1 -0
  253. package/src/engine/graphics/sh3/path_tracer/geometry/construct_ray_hit_from_geometry.js +72 -0
  254. package/src/engine/graphics/sh3/path_tracer/geometry/sample_triangle_attribute.d.ts.map +1 -0
  255. package/src/engine/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.d.ts +13 -0
  256. package/src/engine/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.d.ts.map +1 -0
  257. package/src/engine/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.js +48 -0
  258. package/src/engine/graphics/sh3/path_tracer/material/StandardMaterial.d.ts +1 -0
  259. package/src/engine/graphics/sh3/path_tracer/material/StandardMaterial.d.ts.map +1 -1
  260. package/src/engine/graphics/sh3/path_tracer/material/StandardMaterial.js +4 -0
  261. package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.d.ts +1 -0
  262. package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.d.ts.map +1 -1
  263. package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.js +8 -5
  264. package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +24 -18
  265. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.d.ts +2 -2
  266. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.d.ts.map +1 -1
  267. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.js +1 -1
  268. package/src/engine/graphics/sh3/path_tracer/sampling/getBiasedNormalSample.d.ts.map +1 -0
  269. package/src/engine/graphics/sh3/path_tracer/{getBiasedNormalSample.js → sampling/getBiasedNormalSample.js} +1 -1
  270. package/src/engine/graphics/sh3/path_tracer/sampling/random_in_hemisphere.d.ts.map +1 -0
  271. package/src/engine/graphics/sh3/path_tracer/{random_in_hemisphere.js → sampling/random_in_hemisphere.js} +1 -1
  272. package/src/engine/graphics/sh3/path_tracer/sort_bvh_nodes_by_distance_to_point.d.ts +12 -0
  273. package/src/engine/graphics/sh3/path_tracer/sort_bvh_nodes_by_distance_to_point.d.ts.map +1 -0
  274. package/src/engine/graphics/sh3/path_tracer/sort_bvh_nodes_by_distance_to_point.js +46 -0
  275. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +2 -2
  276. package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.d.ts +7 -0
  277. package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.d.ts.map +1 -0
  278. package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.js +69 -0
  279. package/src/engine/graphics/sh3/prototypeSH3Probe.js +45 -7
  280. package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.d.ts +11 -1
  281. package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.d.ts.map +1 -1
  282. package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.js +33 -16
  283. package/src/engine/graphics/texture/formatToChannelCount.d.ts.map +1 -1
  284. package/src/engine/graphics/texture/formatToChannelCount.js +14 -1
  285. package/src/engine/graphics/three/three_object_replace_materials.d.ts +7 -0
  286. package/src/engine/graphics/three/three_object_replace_materials.d.ts.map +1 -0
  287. package/src/engine/graphics/three/three_object_replace_materials.js +13 -0
  288. package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.d.ts.map +1 -1
  289. package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.js +6 -6
  290. package/src/core/collection/array/array_quick_sort_by_lookup.d.ts +0 -8
  291. package/src/core/collection/array/array_quick_sort_by_lookup.d.ts.map +0 -1
  292. package/src/core/geom/3d/triangle/computeTriangleSurfaceArea.d.ts.map +0 -1
  293. package/src/core/geom/vec3/v3_shift_along_direction.d.ts +0 -14
  294. package/src/core/geom/vec3/v3_shift_along_direction.d.ts.map +0 -1
  295. package/src/core/math/vector_nd_dot.d.ts.map +0 -1
  296. package/src/core/math/vector_nd_normalize.d.ts.map +0 -1
  297. package/src/core/math/vector_nd_normalize.spec.d.ts +0 -2
  298. package/src/core/math/vector_nd_normalize.spec.d.ts.map +0 -1
  299. package/src/engine/graphics/filter/FlipArrayViaCanvas.d.ts +0 -2
  300. package/src/engine/graphics/filter/FlipArrayViaCanvas.d.ts.map +0 -1
  301. package/src/engine/graphics/filter/FlipArrayViaCanvas.js +0 -13
  302. package/src/engine/graphics/sh3/lpv/LightProbeVolumeSerializationAdapter.d.ts.map +0 -1
  303. package/src/engine/graphics/sh3/path_tracer/compute_triangle_group_aabb3.d.ts.map +0 -1
  304. package/src/engine/graphics/sh3/path_tracer/getBiasedNormalSample.d.ts.map +0 -1
  305. package/src/engine/graphics/sh3/path_tracer/random_in_hemisphere.d.ts.map +0 -1
  306. package/src/engine/graphics/sh3/path_tracer/sample_triangle_attribute.d.ts.map +0 -1
  307. /package/src/engine/graphics/sh3/path_tracer/{compute_triangle_group_aabb3.d.ts → geometry/compute_triangle_group_aabb3.d.ts} +0 -0
  308. /package/src/engine/graphics/sh3/path_tracer/{sample_triangle_attribute.d.ts → geometry/sample_triangle_attribute.d.ts} +0 -0
  309. /package/src/engine/graphics/sh3/path_tracer/{sample_triangle_attribute.js → geometry/sample_triangle_attribute.js} +0 -0
  310. /package/src/engine/graphics/sh3/path_tracer/{getBiasedNormalSample.d.ts → sampling/getBiasedNormalSample.d.ts} +0 -0
  311. /package/src/engine/graphics/sh3/path_tracer/{random_in_hemisphere.d.ts → sampling/random_in_hemisphere.d.ts} +0 -0
@@ -1,10 +1,5 @@
1
- //
2
-
3
1
  import { v2_magnitude } from "../vec2/v2_magnitude.js";
4
2
 
5
- function atan2(a, b) {
6
- return Math.atan2(a, b);
7
- }
8
3
 
9
4
  /**
10
5
  *
@@ -17,15 +12,9 @@ function coeff(mat4, row_index, column_index) {
17
12
  return mat4[row_index + column_index * 4];
18
13
  }
19
14
 
20
- function sin(a) {
21
- return Math.sin(a);
22
- }
23
-
24
- function cos(a) {
25
- return Math.cos(a);
26
- }
27
-
28
- const EIGEN_PI = Math.PI;
15
+ const sin = Math.sin;
16
+ const cos = Math.cos;
17
+ const atan2 = Math.atan2;
29
18
 
30
19
  /**
31
20
  *
@@ -50,10 +39,14 @@ const EIGEN_PI = Math.PI;
50
39
  * @param {number[]} res
51
40
  * @param {number[]|Float32Array|mat4} m4
52
41
  * @param {number} a0 axis index
53
- * @param {number} a1
54
- * @param {number} a2
42
+ * @param {number} a1 axis index
43
+ * @param {number} a2 axis index
55
44
  */
56
- export function eulerAnglesFromMatrix(res, m4, a0, a1, a2) {
45
+ export function eulerAnglesFromMatrix(
46
+ res, m4,
47
+ a0, a1, a2
48
+ ) {
49
+
57
50
  const odd = ((a0 + 1) % 3 === a1) ? 0 : 1;
58
51
 
59
52
  const i = a0;
@@ -62,11 +55,12 @@ export function eulerAnglesFromMatrix(res, m4, a0, a1, a2) {
62
55
 
63
56
  if (a0 === a2) {
64
57
  res[0] = atan2(coeff(m4, j, i), coeff(m4, k, i));
65
- if ((odd && res[0] < 0) || ((!odd) && res[0] > 0)) {
58
+
59
+ if ((odd && res[0] < 0) || ((~odd) && res[0] > 0)) {
66
60
  if (res[0] > 0) {
67
- res[0] -= EIGEN_PI;
61
+ res[0] -= Math.PI;
68
62
  } else {
69
- res[0] += EIGEN_PI;
63
+ res[0] += Math.PI;
70
64
  }
71
65
  const s2 = v2_magnitude(coeff(m4, j, i), coeff(m4, k, i));
72
66
  res[1] = -atan2(s2, coeff(m4, i, i));
@@ -87,25 +81,34 @@ export function eulerAnglesFromMatrix(res, m4, a0, a1, a2) {
87
81
 
88
82
  const s1 = sin(res[0]);
89
83
  const c1 = cos(res[0]);
84
+
90
85
  res[2] = atan2(c1 * coeff(m4, j, k) - s1 * coeff(m4, k, k), c1 * coeff(m4, j, j) - s1 * coeff(m4, k, j));
86
+
91
87
  } else {
88
+
92
89
  res[0] = atan2(coeff(m4, j, k), coeff(m4, k, k));
90
+
93
91
  const c2 = v2_magnitude(coeff(m4, i, i), coeff(m4, i, j));
94
- if ((odd && res[0] < 0) || ((!odd) && res[0] > 0)) {
92
+
93
+ if ((odd && res[0] < 0) || ((~odd) && res[0] > 0)) {
95
94
  if (res[0] > 0) {
96
- res[0] -= EIGEN_PI;
95
+ res[0] -= Math.PI;
97
96
  } else {
98
- res[0] += EIGEN_PI;
97
+ res[0] += Math.PI;
99
98
  }
100
99
  res[1] = atan2(-coeff(m4, i, k), -c2);
101
- } else
100
+ } else {
102
101
  res[1] = atan2(-coeff(m4, i, k), c2);
102
+ }
103
+
103
104
  const s1 = sin(res[0]);
104
105
  const c1 = cos(res[0]);
106
+
105
107
  res[2] = atan2(s1 * coeff(m4, k, i) - c1 * coeff(m4, j, i), c1 * coeff(m4, j, j) - s1 * coeff(m4, k, j));
108
+
106
109
  }
107
110
 
108
- if (!odd) {
111
+ if (odd === 0) {
109
112
  // invert result
110
113
  res[0] = -res[0];
111
114
  res[1] = -res[1];
@@ -2,8 +2,8 @@
2
2
  * @param {number} x
3
3
  * @param {number} y
4
4
  * @param {number} z
5
- * @param {number[]} bounds
5
+ * @param {number[]|AABB3} bounds
6
6
  * @returns {number}
7
7
  */
8
- export function v3_morton_encode_bounded(x: number, y: number, z: number, bounds: number[]): number;
8
+ export function v3_morton_encode_bounded(x: number, y: number, z: number, bounds: number[] | AABB3): number;
9
9
  //# sourceMappingURL=v3_morton_encode_bounded.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"v3_morton_encode_bounded.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/morton/v3_morton_encode_bounded.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,4CANW,MAAM,KACN,MAAM,KACN,MAAM,UACN,MAAM,EAAE,GACN,MAAM,CA0BlB"}
1
+ {"version":3,"file":"v3_morton_encode_bounded.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/morton/v3_morton_encode_bounded.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,4CANW,MAAM,KACN,MAAM,KACN,MAAM,UACN,MAAM,EAAE,QAAM,GACZ,MAAM,CA0BlB"}
@@ -4,7 +4,7 @@ import { mortonEncode_magicbits } from "./mortonEncode_magicbits.js";
4
4
  * @param {number} x
5
5
  * @param {number} y
6
6
  * @param {number} z
7
- * @param {number[]} bounds
7
+ * @param {number[]|AABB3} bounds
8
8
  * @returns {number}
9
9
  */
10
10
  export function v3_morton_encode_bounded(x, y, z, bounds) {
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * @see A Survey of Efficient Representations for Independent Unit Vectors (Journal of Computer Graphics Techniques Vol. 3, No. 2, 2014) - page 13
3
3
  * @see https://gamedev.stackexchange.com/questions/169508/octahedral-impostors-octahedral-mapping
4
- * @param {number[]} output
4
+ * @param {number[]|Vector3} output
5
5
  * @param {number} output_offset
6
6
  * @param {number} x range [0,1]
7
7
  * @param {number} y range [0,1]
8
8
  */
9
- export function decode_octahedron_to_unit(output: number[], output_offset: number, x: number, y: number): void;
9
+ export function decode_octahedron_to_unit(output: number[] | Vector3, output_offset: number, x: number, y: number): void;
10
10
  //# sourceMappingURL=decode_octahedron_to_unit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decode_octahedron_to_unit.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.js"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,kDALW,MAAM,EAAE,iBACR,MAAM,KACN,MAAM,KACN,MAAM,QAsBhB"}
1
+ {"version":3,"file":"decode_octahedron_to_unit.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/normal/octahedron/decode_octahedron_to_unit.js"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,kDALW,MAAM,EAAE,UAAQ,iBAChB,MAAM,KACN,MAAM,KACN,MAAM,QAsBhB"}
@@ -3,7 +3,7 @@ import { sign_not_zero } from "../../../../math/sign_not_zero.js";
3
3
  /**
4
4
  * @see A Survey of Efficient Representations for Independent Unit Vectors (Journal of Computer Graphics Techniques Vol. 3, No. 2, 2014) - page 13
5
5
  * @see https://gamedev.stackexchange.com/questions/169508/octahedral-impostors-octahedral-mapping
6
- * @param {number[]} output
6
+ * @param {number[]|Vector3} output
7
7
  * @param {number} output_offset
8
8
  * @param {number} x range [0,1]
9
9
  * @param {number} y range [0,1]
@@ -1,4 +1,4 @@
1
- import { v3_shift_along_direction } from "../../vec3/v3_shift_along_direction.js";
1
+ import { v3_array_displace_in_direction } from "../../vec3/v3_array_displace_in_direction.js";
2
2
 
3
3
  /**
4
4
  *
@@ -21,7 +21,7 @@ export function ray3_shift_origin_along_direction(
21
21
  const direction_y = input[input_offset + 4];
22
22
  const direction_z = input[input_offset + 5];
23
23
 
24
- v3_shift_along_direction(
24
+ v3_array_displace_in_direction(
25
25
  output, 0,
26
26
  origin_x, origin_y, origin_z,
27
27
  direction_x, direction_y, direction_z,
@@ -22,4 +22,5 @@ export function sh3_convolve_with_cosine_kernel(out, out_offset, input, input_of
22
22
  out[out_offset + 6] = input[input_offset + 6] * CosineA2;
23
23
  out[out_offset + 7] = input[input_offset + 7] * CosineA2;
24
24
  out[out_offset + 8] = input[input_offset + 8] * CosineA2;
25
- }
25
+ }
26
+
@@ -0,0 +1,12 @@
1
+ /**
2
+ *
3
+ * @param {number[]|Float32Array|Float64Array} out
4
+ * @param {number} out_offset
5
+ * @param {number[]|Float32Array|Float64Array} basis
6
+ * @param {number} basis_offset
7
+ * @param {number[]|Float32Array|Float64Array} vector
8
+ * @param {number} vector_offset
9
+ * @param {number} dimensions
10
+ */
11
+ export function sh3_vector_accumulate(out: number[] | Float32Array | Float64Array, out_offset: number, basis: number[] | Float32Array | Float64Array, basis_offset: number, vector: number[] | Float32Array | Float64Array, vector_offset: number, dimensions: number): void;
12
+ //# sourceMappingURL=sh3_vector_accumulate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sh3_vector_accumulate.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.js"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,2CARW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,gBAClC,MAAM,UACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,cACN,MAAM,QA6BhB"}
@@ -0,0 +1,40 @@
1
+ import { assert } from "../../../../assert.js";
2
+
3
+ /**
4
+ *
5
+ * @param {number[]|Float32Array|Float64Array} out
6
+ * @param {number} out_offset
7
+ * @param {number[]|Float32Array|Float64Array} basis
8
+ * @param {number} basis_offset
9
+ * @param {number[]|Float32Array|Float64Array} vector
10
+ * @param {number} vector_offset
11
+ * @param {number} dimensions
12
+ */
13
+ export function sh3_vector_accumulate(
14
+ out, out_offset,
15
+ basis, basis_offset,
16
+ vector, vector_offset, dimensions
17
+ ) {
18
+
19
+ assert.isArrayLike(out, 'out');
20
+ assert.isNonNegativeInteger(out_offset, 'out_offset');
21
+
22
+ assert.isArrayLike(basis, 'basis');
23
+ assert.isNonNegativeInteger(basis_offset, 'basis_offset');
24
+
25
+ assert.isNonNegativeInteger(dimensions, 'dimensions');
26
+
27
+ for (let j = 0; j < 9; j++) {
28
+
29
+ const out_coefficient_offset = out_offset + j * dimensions;
30
+
31
+ const basis_value = basis[basis_offset + j];
32
+
33
+ for (let i = 0; i < dimensions; i++) {
34
+ const scalar = vector[vector_offset + i];
35
+
36
+ out[out_coefficient_offset + i] += basis_value * scalar;
37
+ }
38
+
39
+ }
40
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sh3_vector_accumulate.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sh3_vector_accumulate.spec.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.spec.js"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import { sh3_vector_accumulate } from "./sh3_vector_accumulate.js";
2
+
3
+ test("basics", () => {
4
+ const out = [
5
+ 1, 2,
6
+ 3,4, 5,6,7,8,
7
+ 9,10, 11,12, 13,14, 15,16, 17,18
8
+ ];
9
+ const basis = [
10
+ 2,
11
+ 3, 5, 7,
12
+ 11, 13, 17, 19, 23
13
+ ];
14
+
15
+ sh3_vector_accumulate(
16
+ out, 0,
17
+ basis, 0,
18
+ [-3, 5], 0,
19
+ 2
20
+ );
21
+
22
+ expect(out).toEqual([
23
+ -5, 12,
24
+ -6, 19, -10, 31, -14, 43,
25
+ -24, 65, -28, 77, -38, 99, -42, 111, -52, 133
26
+ ]);
27
+ });
@@ -48,4 +48,4 @@ export function sphere_intersects_ray(
48
48
  }
49
49
 
50
50
  return true;
51
- }
51
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"tetrahedron_compute_circumsphere.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/tetrahedra/tetrahedron_compute_circumsphere.js"],"names":[],"mappings":"AAOA;;;;;;;;;;GAUG;AACH,yDAPW,MAAM,EAAE,UACR,MAAM,EAAE,KACR,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,QA+EhB"}
1
+ {"version":3,"file":"tetrahedron_compute_circumsphere.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/tetrahedra/tetrahedron_compute_circumsphere.js"],"names":[],"mappings":"AAkBA;;;;;;;;;;GAUG;AACH,yDAPW,MAAM,EAAE,UACR,MAAM,EAAE,KACR,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,QA2EhB"}
@@ -1,9 +1,20 @@
1
1
  import { array_copy } from "../../../collection/array/array_copy.js";
2
+ import { solve_linear_system } from "../../../math/linalg/solve_linear_system.js";
2
3
  import { v3_dot } from "../../vec3/v3_dot.js";
3
4
 
4
5
  const MAX_FLOAT32 = 3.4028234663852886e+38;
5
- const SMALL_NUMBER = 1e-12;
6
- const VTK_MAX_WARNS = 3;
6
+
7
+ const n12 = new Float64Array(3);
8
+ const n13 = new Float64Array(3);
9
+ const n14 = new Float64Array(3);
10
+
11
+ const x12 = new Float64Array(3);
12
+ const x13 = new Float64Array(3);
13
+ const x14 = new Float64Array(3);
14
+
15
+ const A = new Float64Array(9);
16
+
17
+ const rhs = new Float64Array(3);
7
18
 
8
19
  /**
9
20
  * Compute the circumcenter (center[3]) and radius squared (method return value) of a tetrahedron defined by the four points x1, x2, x3, and x4.
@@ -21,23 +32,16 @@ export function tetrahedron_compute_circumsphere(
21
32
  points,
22
33
  a, b, c, d
23
34
  ) {
24
- const n12 = [];
25
- const n13 = [];
26
- const n14 = [];
27
35
 
28
- const x12 = [];
29
- const x13 = [];
30
- const x14 = [];
31
-
32
- // calculate normals and intersection points of bisecting planes.
36
+ // calculate normals and intersection points of bisecting planes.
33
37
  for (let i = 0; i < 3; i++) {
34
38
  const v_a = points[a * 3 + i];
35
-
36
39
  const v_b = points[b * 3 + i];
37
- n12[i] = v_b - v_a;
38
40
  const v_c = points[c * 3 + i];
39
- n13[i] = v_c - v_a;
40
41
  const v_d = points[d * 3 + i];
42
+
43
+ n12[i] = v_b - v_a;
44
+ n13[i] = v_c - v_a;
41
45
  n14[i] = v_d - v_a;
42
46
 
43
47
  x12[i] = (v_b + v_a) * 0.5;
@@ -45,28 +49,28 @@ export function tetrahedron_compute_circumsphere(
45
49
  x14[i] = (v_d + v_a) * 0.5;
46
50
  }
47
51
 
48
- const A = [];
49
-
50
52
  array_copy(n12, 0, A, 0, 3);
51
53
  array_copy(n13, 0, A, 3, 3);
52
54
  array_copy(n14, 0, A, 6, 3);
53
55
 
54
- const rhs = [];
55
-
56
56
  rhs[0] = v3_dot(n12[0], n12[1], n12[2], x12[0], x12[1], x12[2]);
57
57
  rhs[1] = v3_dot(n13[0], n13[1], n13[2], x13[0], x13[1], x13[2]);
58
58
  rhs[2] = v3_dot(n14[0], n14[1], n14[2], x14[0], x14[1], x14[2]);
59
59
 
60
60
  // Solve system of equations
61
61
  if (solve_linear_system(A, rhs, 3) === false) {
62
+
62
63
  // failed to solve, fall-back to infinitely-sized sphere centered around origin
63
64
  result[0] = result[1] = result[2] = 0;
64
65
  result[3] = MAX_FLOAT32;
65
66
  return;
67
+
66
68
  } else {
69
+
67
70
  result[0] = rhs[0];
68
71
  result[1] = rhs[1];
69
72
  result[2] = rhs[2];
73
+
70
74
  }
71
75
 
72
76
  let sum = 0;
@@ -77,10 +81,13 @@ export function tetrahedron_compute_circumsphere(
77
81
 
78
82
  diff = points[a * 3 + i] - rhs_offset;
79
83
  sum += diff * diff;
84
+
80
85
  diff = points[b * 3 + i] - rhs_offset;
81
86
  sum += diff * diff;
87
+
82
88
  diff = points[c * 3 + i] - rhs_offset;
83
89
  sum += diff * diff;
90
+
84
91
  diff = points[d * 3 + i] - rhs_offset;
85
92
  sum += diff * diff;
86
93
  }
@@ -95,175 +102,4 @@ export function tetrahedron_compute_circumsphere(
95
102
  }
96
103
  }
97
104
 
98
- /**
99
- * Solve linear equations Ax = b using Crout's method. Input is square matrix A
100
- * and load vector b. Solution x is written over load vector. The dimension of
101
- * the matrix is specified in size. If error is found, method returns a 0.
102
- *
103
- * @see https://github.com/Kitware/VTK/blob/af928016f4041ad8a6a193d032355b909721fc95/Common/Core/vtkMath.cxx
104
- *
105
- * @param {number[]} A
106
- * @param {number[]} x
107
- * @param {number} size
108
- * @returns {boolean}
109
- */
110
- function solve_linear_system(A, x, size) {
111
- const index = [];
112
-
113
- if (luf_factor_linear_system(A, index, size) === 0) {
114
- return false;
115
- }
116
-
117
- luf_solve_linear_system(A, index, x, size);
118
-
119
- return true;
120
- }
121
-
122
-
123
- /**
124
- * Factor linear equations Ax = b using LU decomposition A = LU where L is
125
- * lower triangular matrix and U is upper triangular matrix. Input is
126
- * square matrix A, integer array of pivot indices index[0->n-1], and size
127
- * of square matrix n. Output factorization LU is in matrix A. If error is
128
- * found, method returns 0.
129
- * @param {number[]} A
130
- * @param {number[]} index
131
- * @param {number} size
132
- */
133
- function luf_factor_linear_system(A, index, size) {
134
- const scale = [];
135
-
136
- // double scratch[10];
137
- // double* scale = (size < 10 ? scratch : new double[size]);
138
- //
139
- // int i, j, k;
140
- // int maxI = 0;
141
- // double largest, temp1, temp2, sum;
142
- //
143
- // // Manage number of output warnings
144
- // static int numWarns = 0;
145
- //
146
- // //
147
-
148
- let numWarns = 0;
149
- let i, j, k;
150
- let maxI = 0;
151
- let largest, temp1, temp2, sum;
152
- // Loop over rows to get implicit scaling information
153
- //
154
- for (i = 0; i < size; ++i) {
155
- for (largest = 0.0, j = 0; j < size; ++j) {
156
- if ((temp2 = Math.abs(A[i * size + j])) > largest) {
157
- largest = temp2;
158
- }
159
- }
160
-
161
- if (largest === 0.0 && numWarns++ < VTK_MAX_WARNS) {
162
- // vtkGenericWarningMacro(<< "Unable to factor linear system");
163
- return 0;
164
- }
165
- scale[i] = 1.0 / largest;
166
- }
167
- //
168
- // Loop over all columns using Crout's method
169
- //
170
- for (j = 0; j < size; ++j) {
171
- for (i = 0; i < j; ++i) {
172
- sum = A[i * size + j];
173
- for (k = 0; k < i; ++k) {
174
- sum -= A[i * size + k] * A[k * size + j];
175
- }
176
- A[i * size + j] = sum;
177
- }
178
- //
179
- // Begin search for largest pivot element
180
- //
181
- for (largest = 0.0, i = j; i < size; ++i) {
182
- sum = A[i * size + j];
183
- for (k = 0; k < j; ++k) {
184
- sum -= A[i * size + k] * A[k * size + j];
185
- }
186
- A[i * size + j] = sum;
187
-
188
- if ((temp1 = scale[i] * Math.abs(sum)) >= largest) {
189
- largest = temp1;
190
- maxI = i;
191
- }
192
- }
193
- //
194
- // Check for row interchange
195
- //
196
- if (j !== maxI) {
197
- for (k = 0; k < size; ++k) {
198
- temp1 = A[maxI * size + k];
199
- A[maxI * size + k] = A[j * size + k];
200
- A[j * size + k] = temp1;
201
- }
202
- scale[maxI] = scale[j];
203
- }
204
- //
205
- // Divide by pivot element and perform elimination
206
- //
207
- index[j] = maxI;
208
105
 
209
- if (Math.abs(A[j * size + j]) <= SMALL_NUMBER && numWarns++ < VTK_MAX_WARNS) {
210
- //vtkGenericWarningMacro(<< "Unable to factor linear system");
211
- return 0;
212
- }
213
-
214
- if (j !== (size - 1)) {
215
- temp1 = 1.0 / A[j * size + j];
216
- for (i = j + 1; i < size; ++i) {
217
- A[i * size + j] *= temp1;
218
- }
219
- }
220
- }
221
-
222
- return 1;
223
- }
224
-
225
- /**
226
- * Solve linear equations Ax = b using LU decomposition A = LU where L is
227
- * lower triangular matrix and U is upper triangular matrix. Input is
228
- * factored matrix A=LU, integer array of pivot indices index[0->n-1],
229
- * load vector x[0->n-1], and size of square matrix n. Note that A=LU and
230
- * index[] are generated from method LUFactorLinearSystem). Also, solution
231
- * vector is written directly over input load vector.
232
- * @param {number[]} A
233
- * @param {number[]} index
234
- * @param {number[]} x
235
- * @param {number} size
236
- */
237
- function luf_solve_linear_system(A, index, x, size) {
238
- let i, j, ii, idx;
239
- let sum;
240
- //
241
- // Proceed with forward and backsubstitution for L and U
242
- // matrices. First, forward substitution.
243
- //
244
- for (ii = -1, i = 0; i < size; ++i) {
245
- idx = index[i];
246
- sum = x[idx];
247
- x[idx] = x[i];
248
-
249
- if (ii >= 0) {
250
- for (j = ii; j <= (i - 1); ++j) {
251
- sum -= A[i * size + j] * x[j];
252
- }
253
- } else if (sum !== 0.0) {
254
- ii = i;
255
- }
256
-
257
- x[i] = sum;
258
- }
259
- //
260
- // Now, back substitution
261
- //
262
- for (i = size - 1; i >= 0; i--) {
263
- sum = x[i];
264
- for (j = i + 1; j < size; ++j) {
265
- sum -= A[i * size + j] * x[j];
266
- }
267
- x[i] = sum / A[i * size + i];
268
- }
269
- }
@@ -54,7 +54,7 @@ async function main() {
54
54
 
55
55
  transform.scale.setScalar(1.5);
56
56
 
57
- scene.addMesh(
57
+ scene.createMesh(
58
58
  new BoxBufferGeometry(),
59
59
  new MeshStandardMaterial(),
60
60
  transform.matrix
@@ -0,0 +1,11 @@
1
+ /**
2
+ *
3
+ * @param {TetrahedralMesh} mesh
4
+ * @param {number[]} positions
5
+ * @param {string|number} color CSS color definition
6
+ * @param {number} opacity
7
+ * @returns {Entity}
8
+ */
9
+ export function visualize_tetrahedral_mesh({ mesh, positions, color, opacity }: TetrahedralMesh): Entity;
10
+ import Entity from "../../../../engine/ecs/Entity.js";
11
+ //# sourceMappingURL=visualize_tetrahedral_mesh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualize_tetrahedral_mesh.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.js"],"names":[],"mappings":"AAQA;;;;;;;GAOG;AACH,kGAFa,MAAM,CA2BlB;mBAxCkB,kCAAkC"}
@@ -0,0 +1,42 @@
1
+ import { LineBasicMaterial } from "three";
2
+ import Entity from "../../../../engine/ecs/Entity.js";
3
+ import { Transform } from "../../../../engine/ecs/transform/Transform.js";
4
+ import { DrawMode } from "../../../../engine/graphics/ecs/mesh-v2/DrawMode.js";
5
+ import { ShadedGeometry } from "../../../../engine/graphics/ecs/mesh-v2/ShadedGeometry.js";
6
+ import { ShadedGeometryFlags } from "../../../../engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js";
7
+ import { build_tetrahedral_mesh_buffer_geometry } from "./build_tetrahedral_mesh_buffer_geometry.js";
8
+
9
+ /**
10
+ *
11
+ * @param {TetrahedralMesh} mesh
12
+ * @param {number[]} positions
13
+ * @param {string|number} color CSS color definition
14
+ * @param {number} opacity
15
+ * @returns {Entity}
16
+ */
17
+ export function visualize_tetrahedral_mesh({
18
+ mesh, positions,
19
+ color = '#FF00FF',
20
+ opacity = 0.35
21
+ }) {
22
+
23
+ const geometry = build_tetrahedral_mesh_buffer_geometry(mesh, positions);
24
+
25
+ const sg = ShadedGeometry.from(geometry, new LineBasicMaterial({
26
+ color: color,
27
+ transparent: true,
28
+ opacity,
29
+ depthWrite: false
30
+ }), DrawMode.LineSegments);
31
+
32
+ sg.clearFlag(ShadedGeometryFlags.CastShadow);
33
+ sg.clearFlag(ShadedGeometryFlags.ReceiveShadow);
34
+
35
+ const entity = new Entity();
36
+
37
+ entity
38
+ .add(sg)
39
+ .add(new Transform());
40
+
41
+ return entity;
42
+ }
@@ -21,7 +21,7 @@ import { seededRandom } from "../../../../math/random/seededRandom.js";
21
21
  import { v3_dot } from "../../../vec3/v3_dot.js";
22
22
  import { compute_aabb_from_points } from "../../aabb/compute_aabb_from_points.js";
23
23
  import { SurfacePoint3 } from "../../SurfacePoint3.js";
24
- import { computeTriangleSurfaceArea } from "../../triangle/computeTriangleSurfaceArea.js";
24
+ import { compute_triangle_area_3d } from "../../triangle/compute_triangle_area_3d.js";
25
25
  import { expandConnectivityByLocality } from "../expandConnectivityByLocality.js";
26
26
  import { TopoMesh } from "../struct/TopoMesh.js";
27
27
  import { three_buffer_geometry_to_topo_mesh } from "../three_buffer_geometry_to_topo_mesh.js";
@@ -226,7 +226,7 @@ async function main(engine) {
226
226
  filter(current, prev) {
227
227
  current.computeNormal();
228
228
 
229
- const area = computeTriangleSurfaceArea(
229
+ const area = compute_triangle_area_3d(
230
230
  current.vertices[0].x,
231
231
  current.vertices[0].z,
232
232
  current.vertices[0].y,
@@ -1,4 +1,4 @@
1
- import { computeTriangleSurfaceArea } from "../triangle/computeTriangleSurfaceArea.js";
1
+ import { compute_triangle_area_3d } from "../triangle/compute_triangle_area_3d.js";
2
2
 
3
3
  /**
4
4
  *
@@ -10,7 +10,7 @@ export function tm_face_area(face) {
10
10
  const v1 = face.vertices[1];
11
11
  const v2 = face.vertices[2];
12
12
 
13
- return computeTriangleSurfaceArea(
13
+ return compute_triangle_area_3d(
14
14
  v0.x, v0.y, v0.z,
15
15
  v1.x, v1.y, v1.z,
16
16
  v2.x, v2.y, v2.z