@woosh/meep-engine 2.37.18 → 2.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/core/assert.js +1 -1
  2. package/core/binary/float2uint8.js +8 -0
  3. package/core/binary/uint82float.js +8 -0
  4. package/core/bvh2/bvh3/ExplicitBinaryBoundingVolumeHierarchy.js +6 -4
  5. package/core/collection/array/array_get_index_in_range.js +16 -0
  6. package/core/collection/array/typed/isTypedArray.js +20 -0
  7. package/core/collection/array/typedArrayToDataType.js +1 -0
  8. package/{engine/navigation/grid → core/collection/heap}/BinaryHeap.js +6 -1
  9. package/{engine/navigation/grid → core/collection/heap}/FastBinaryHeap.js +3 -2
  10. package/{engine/navigation/grid → core/collection/heap}/FastBinaryHeap.spec.js +3 -3
  11. package/core/collection/heap/Uin32Heap.spec.js +59 -0
  12. package/core/collection/heap/Uint32Heap.js +385 -0
  13. package/core/collection/list/List.d.ts +1 -1
  14. package/core/collection/table/RowFirstTable.js +34 -0
  15. package/core/collection/table/RowFirstTable.spec.js +59 -1
  16. package/core/color/Color.js +83 -1
  17. package/core/color/YCbCr_to_rgb_uint24.js +3 -4
  18. package/core/color/hsv2rgb.js +4 -3
  19. package/core/color/linear_to_sRGB.js +4 -5
  20. package/core/color/rgb2hex.js +1 -1
  21. package/core/color/rgb2uint24.js +6 -4
  22. package/core/color/rgb_to_YCbCr_uint24.js +11 -13
  23. package/core/events/signal/Signal.d.ts +11 -9
  24. package/core/events/signal/Signal.spec.js +16 -0
  25. package/core/geom/2d/quad-tree/qt_collect_by_circle.js +67 -0
  26. package/core/geom/3d/topology/computeTopoMeshVertexDuplicates.js +9 -6
  27. package/core/geom/3d/topology/expandConnectivityByLocality.js +5 -5
  28. package/core/geom/3d/topology/query/query_edge_is_boundary.js +7 -0
  29. package/core/geom/3d/topology/query/query_edge_is_manifold.js +13 -0
  30. package/core/geom/3d/topology/query/query_edge_is_manifold_or_boundary.js +11 -0
  31. package/core/geom/3d/topology/query/query_edge_is_wire.js +13 -0
  32. package/core/geom/3d/topology/query/query_edge_other_vertex.js +20 -0
  33. package/core/geom/3d/topology/query/query_edge_share_vert.js +9 -0
  34. package/core/geom/3d/topology/query/query_face_get_other_edges.js +39 -0
  35. package/core/geom/3d/topology/query/query_face_next_vertex.js +19 -0
  36. package/core/geom/3d/topology/query/query_face_prev_vertex.js +18 -0
  37. package/core/geom/3d/topology/query/query_vertex_in_edge.js +14 -0
  38. package/core/geom/3d/topology/query/query_vertex_pair_share_face.js +24 -0
  39. package/core/geom/3d/topology/query/query_vertices_in_edge.js +19 -0
  40. package/core/geom/3d/topology/simplify/collapseEdge.spec.js +3 -5
  41. package/core/geom/3d/topology/simplify/collapse_all_degenerate_edges.js +8 -10
  42. package/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +12 -2
  43. package/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js +277 -0
  44. package/core/geom/3d/topology/simplify/edge_collapse_quadratic.js +126 -0
  45. package/core/geom/3d/topology/simplify/prototypeMeshSimplification.js +502 -0
  46. package/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +37 -5
  47. package/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js +86 -1
  48. package/core/geom/3d/topology/simplify/simplifyTopoMesh.js +4 -4
  49. package/core/geom/3d/topology/simplify/simplifyTopoMesh2.js +119 -0
  50. package/core/geom/3d/topology/simplify/tm_edge_collapse_is_degenerate_flip.js +81 -0
  51. package/core/geom/3d/topology/{TopoEdge.js → struct/TopoEdge.js} +47 -20
  52. package/core/geom/3d/topology/{TopoEdge.spec.js → struct/TopoEdge.spec.js} +0 -0
  53. package/core/geom/3d/topology/{TopoMesh.js → struct/TopoMesh.js} +20 -41
  54. package/core/geom/3d/topology/{TopoTriangle.js → struct/TopoTriangle.js} +15 -25
  55. package/core/geom/3d/topology/{TopoVertex.js → struct/TopoVertex.js} +21 -4
  56. package/core/geom/3d/topology/{TopoVertex.spec.js → struct/TopoVertex.spec.js} +0 -0
  57. package/core/geom/3d/topology/tm_edge_kill.js +24 -0
  58. package/core/geom/3d/topology/tm_edge_splice.js +42 -0
  59. package/core/geom/3d/topology/tm_face_area.js +18 -0
  60. package/core/geom/3d/topology/tm_face_kill.js +12 -0
  61. package/core/geom/3d/topology/tm_face_normal.js +14 -0
  62. package/core/geom/3d/topology/tm_kill_only_edge.js +35 -0
  63. package/core/geom/3d/topology/tm_kill_only_face.js +12 -0
  64. package/core/geom/3d/topology/tm_kill_only_vert.js +14 -0
  65. package/core/geom/3d/topology/tm_vert_kill.js +19 -0
  66. package/core/geom/3d/topology/tm_vert_splice.js +64 -0
  67. package/core/geom/3d/topology/tm_vertex_compute_normal.js +42 -0
  68. package/core/geom/3d/topology/topoMeshToBufferGeometry.js +18 -4
  69. package/core/geom/3d/topology/weld_duplicate_vertices.js +63 -0
  70. package/core/geom/Quaternion.d.ts +21 -1
  71. package/core/geom/Quaternion.js +279 -200
  72. package/core/geom/Quaternion.spec.js +71 -2
  73. package/core/geom/Vector2.js +3 -3
  74. package/core/geom/Vector3.d.ts +2 -0
  75. package/core/geom/Vector3.js +31 -7
  76. package/core/geom/Vector3.schema.json +16 -0
  77. package/core/geom/Vector4.js +16 -0
  78. package/core/geom/packing/MaxRectangles.js +1 -1
  79. package/core/graph/cluster_mesh_metis.js +16 -0
  80. package/core/graph/coarsen_graph.js +1 -1
  81. package/core/graph/graph_k_means_cluster.js +1 -1
  82. package/core/json/JsonUtils.js +2 -20
  83. package/core/math/bell_membership_function.js +19 -0
  84. package/core/math/exp2.js +8 -0
  85. package/core/math/interval/NumericInterval.js +17 -0
  86. package/core/math/physics/brdf/brdf_burley.js +25 -0
  87. package/core/math/physics/bsdf/bsdf_schlick.js +22 -0
  88. package/core/math/physics/irradiance/interpolate_irradiance_linear.js +18 -0
  89. package/{engine/sound/ecs/emitter/attenuate/attenuateSoundLogarithmic.js → core/math/physics/irradiance/interpolate_irradiance_lograrithmic.js} +2 -2
  90. package/{engine/sound/ecs/emitter/attenuate/attenuateSoundSmith.js → core/math/physics/irradiance/interpolate_irradiance_smith.js} +1 -1
  91. package/core/math/random/seededRandom.js +2 -31
  92. package/core/math/random/seededRandom_Mulberry32.js +31 -0
  93. package/core/math/random/seededRandom_sine.js +33 -0
  94. package/core/model/ObservedEnum.js +8 -0
  95. package/editor/Editor.js +97 -1
  96. package/editor/actions/concrete/ModifyPatchSampler2DAction.js +118 -0
  97. package/editor/actions/concrete/ModifyPatchSampler2DAction.spec.js +30 -0
  98. package/editor/actions/concrete/PatchTerrainHeightAction.js +13 -105
  99. package/editor/ecs/component/FieldDescriptor.js +34 -0
  100. package/editor/ecs/component/FieldValueAdapter.js +20 -0
  101. package/editor/ecs/component/TypeEditor.js +33 -0
  102. package/editor/ecs/component/TypeSchema.d.ts +38 -0
  103. package/editor/ecs/component/createFieldEditor.js +90 -0
  104. package/editor/ecs/component/createObjectEditor.js +266 -60
  105. package/editor/ecs/component/editors/ColorEditor.js +39 -0
  106. package/editor/ecs/component/editors/HTMLElementEditor.js +17 -0
  107. package/editor/ecs/component/editors/ImagePathEditor.js +50 -0
  108. package/editor/ecs/component/editors/NumericIntervalEditor.js +86 -0
  109. package/editor/ecs/component/editors/ObservedBooleanEditor.js +13 -0
  110. package/editor/ecs/component/editors/ObservedEnumEditor.js +32 -0
  111. package/editor/ecs/component/editors/ObservedIntegerEditor.js +43 -0
  112. package/editor/ecs/component/editors/ObservedStringEditor.js +51 -0
  113. package/editor/ecs/component/editors/Sampler2DEditor.js +107 -0
  114. package/editor/ecs/component/editors/collection/ListEditor.js +83 -0
  115. package/editor/ecs/component/editors/common/BitFlagsEditor.js +80 -0
  116. package/editor/ecs/component/editors/common/EnumEditor.js +41 -0
  117. package/editor/ecs/component/editors/common/makeV3_editor.js +85 -0
  118. package/editor/ecs/component/editors/common/noEditor.js +9 -0
  119. package/editor/ecs/component/editors/ecs/GridObstacleEditor.js +17 -0
  120. package/editor/ecs/component/editors/ecs/MinimapMarkerEditor.js +16 -0
  121. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +44 -0
  122. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +17 -0
  123. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +58 -0
  124. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.js +54 -0
  125. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.js +21 -0
  126. package/editor/ecs/component/editors/ecs/Trail2DEditor.js +33 -0
  127. package/editor/ecs/component/editors/ecs/TransformEditor.js +23 -0
  128. package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.js +21 -0
  129. package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.js +89 -0
  130. package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.js +18 -0
  131. package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.js +22 -0
  132. package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.js +20 -0
  133. package/editor/ecs/component/editors/geom/QuaternionEditor.js +56 -0
  134. package/editor/ecs/component/editors/geom/Vector1Editor.js +57 -0
  135. package/editor/ecs/component/editors/geom/Vector2Editor.js +11 -0
  136. package/editor/ecs/component/editors/geom/Vector3Editor.js +13 -0
  137. package/editor/ecs/component/editors/geom/Vector4Editor.js +12 -0
  138. package/editor/ecs/component/editors/primitive/ArrayEditor.js +46 -0
  139. package/editor/ecs/component/editors/primitive/BooleanEditor.js +27 -0
  140. package/editor/ecs/component/editors/primitive/FunctionEditor.js +29 -0
  141. package/editor/ecs/component/editors/primitive/NumberEditor.js +60 -0
  142. package/editor/ecs/component/editors/primitive/ObjectEditor.js +12 -0
  143. package/editor/ecs/component/editors/primitive/StringEditor.js +31 -0
  144. package/editor/ecs/component/editors/three/BufferGeometryEditor.js +28 -0
  145. package/editor/ecs/component/editors/three/MaterialEditor.js +27 -0
  146. package/editor/ecs/component/editors/three/MeshEditor.js +35 -0
  147. package/editor/ecs/component/editors/three/TextureEditor.js +32 -0
  148. package/editor/ecs/component/findNearestRegisteredType.js +59 -0
  149. package/editor/ecs/component/prototypeObjectEditor.js +379 -0
  150. package/editor/tools/SelectionTool.js +1 -1
  151. package/editor/tools/paint/TerrainHeightPaintTool.js +88 -68
  152. package/editor/tools/paint/TerrainPaintTool.js +2 -1
  153. package/editor/tools/paint/TerrainTexturePaintTool.js +8 -73
  154. package/editor/view/EditorView.js +1 -1
  155. package/editor/view/ecs/ComponentControlView.js +2 -30
  156. package/editor/view/ecs/EntityEditor.js +61 -139
  157. package/editor/view/ecs/components/GridObstacleController.js +4 -4
  158. package/editor/view/ecs/components/TerrainController.js +1 -1
  159. package/editor/view/ecs/components/common/NumberController.js +19 -7
  160. package/editor/view/node-graph/NodeGraphView.js +2 -2
  161. package/editor/view/node-graph/NodeView.js +7 -9
  162. package/engine/animation/keyed2/AnimationTrack.js +1 -1
  163. package/engine/asset/AssetManager.d.ts +1 -1
  164. package/engine/asset/AssetManager.js +390 -388
  165. package/engine/asset/loaders/gltf/extensions/MSFT_texture_dds.js +14 -2
  166. package/engine/ecs/components/TagEditor.js +15 -0
  167. package/engine/ecs/fow/FogOfWarEditor.js +13 -0
  168. package/engine/ecs/parent/ParentEntitySystem.js +57 -0
  169. package/engine/ecs/terrain/ecs/OffsetScaleTransform2D.d.ts +6 -0
  170. package/engine/ecs/terrain/ecs/Terrain.js +44 -43
  171. package/engine/ecs/terrain/ecs/TerrainSystem.js +2 -2
  172. package/engine/ecs/terrain/ecs/layers/TerrainLayer.js +1 -1
  173. package/engine/ecs/terrain/ecs/splat/SplatMapping.js +26 -28
  174. package/engine/ecs/terrain/overlay/TerrainOverlay.js +71 -66
  175. package/engine/ecs/terrain/tiles/TerrainTileManager.js +23 -0
  176. package/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +1 -1
  177. package/engine/ecs/terrain/util/paintTerrainOverlayViaLookupTable.js +13 -7
  178. package/engine/ecs/terrain/util/tensionOptimizeUV.js +1 -1
  179. package/engine/ecs/transform/Transform.d.ts +2 -0
  180. package/engine/ecs/transform/Transform.editor.schema.json +16 -0
  181. package/engine/ecs/transform/Transform.js +3 -0
  182. package/engine/graphics/ecs/highlight/HighlightEditor.js +17 -0
  183. package/engine/graphics/ecs/light/Light.js +0 -47
  184. package/engine/graphics/ecs/light/LightSerializationAdapter.js +50 -0
  185. package/engine/graphics/ecs/mesh/MeshEditor.js +28 -0
  186. package/engine/graphics/ecs/mesh-v2/DrawMode.js +2 -1
  187. package/engine/graphics/ecs/mesh-v2/aggregate/prototypeSGMesh.js +3 -3
  188. package/engine/graphics/ecs/mesh-v2/build_three_object.js +3 -1
  189. package/engine/graphics/ecs/mesh-v2/sg_compute_hierarchy_bounding_box_by_parent_entity.js +31 -0
  190. package/engine/graphics/ecs/mesh-v2/sg_hierarchy_compute_bounding_box_via_parent_entity.d.ts +4 -0
  191. package/engine/graphics/ecs/sprite/Sprite.js +11 -0
  192. package/engine/graphics/ecs/sprite/SpriteSystemPE.js +133 -0
  193. package/engine/graphics/ecs/sprite/prototypeSpriteSystem.js +1570 -0
  194. package/engine/graphics/micron/build/PatchRepresentation.js +7 -3
  195. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +18 -8
  196. package/engine/graphics/micron/build/clustering/build_clustering_2.js +1 -1
  197. package/engine/graphics/micron/build/clustering/build_leaf_patches.js +2 -2
  198. package/engine/graphics/micron/build/clustering/build_leaf_patches_metis.js +1 -1
  199. package/engine/graphics/micron/build/hierarchy/buildAbstractPatchHierarchy.js +21 -3
  200. package/engine/graphics/micron/build/hierarchy/merge_patches.js +96 -43
  201. package/engine/graphics/micron/build/hierarchy/qvdr_build_simplified_clusters.js +11 -5
  202. package/engine/graphics/micron/format/VirtualGeometry.js +46 -3
  203. package/engine/graphics/micron/format/micron_build_proxy_geometry.js +4 -2
  204. package/engine/graphics/micron/prototypeVirtualGeometry.js +47 -10
  205. package/engine/graphics/micron/render/instanced/shader/shader_rewrite_standard.js +17 -17
  206. package/engine/graphics/micron/render/refinement/get_geometry_patch_cut.js +15 -3
  207. package/engine/graphics/micron/simplifyGeometry.js +1 -1
  208. package/engine/graphics/particles/particular/engine/ParticularEngine.js +5 -0
  209. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +17 -9
  210. package/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.js +12 -10
  211. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +7 -2
  212. package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js +27 -0
  213. package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.js +80 -0
  214. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +16 -4
  215. package/engine/graphics/shaders/TerrainShader.js +8 -8
  216. package/engine/graphics/texture/atlas/TextureAtlasDebugger.js +2 -1
  217. package/engine/graphics/texture/sampler/Sampler2D.js +206 -201
  218. package/engine/graphics/texture/sampler/Sampler2D.spec.js +34 -35
  219. package/engine/graphics/texture/sampler/bicubic.js +59 -0
  220. package/engine/graphics/texture/sampler/downsampleSample2D.spec.js +2 -2
  221. package/engine/graphics/texture/sampler/genericResampleSampler2D.js +0 -2
  222. package/engine/graphics/texture/sampler/prototypeSamplerFiltering.js +146 -0
  223. package/engine/graphics/texture/sampler/{downsampleSampler2D.js → sampler2D_scale_down_linear.js} +8 -4
  224. package/engine/graphics/texture/sampler/sampler2_d_scale_down_lanczos.js +140 -0
  225. package/engine/graphics/texture/sampler/scaleSampler2D.js +3 -3
  226. package/engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.js +1 -1
  227. package/engine/graphics/util/ScaleObject3ToBox.js +14 -1
  228. package/engine/graphics/util/makeMeshPreviewScene.js +2 -1
  229. package/engine/grid/components/GridObstacle.js +0 -44
  230. package/engine/grid/components/GridObstacleSerializationAdapter.js +46 -0
  231. package/engine/input/devices/PointerDevice.d.ts +1 -1
  232. package/engine/input/devices/PointerDevice.js +17 -2
  233. package/engine/input/ecs/util/TerrainCameraTargetSampler.js +2 -2
  234. package/engine/navigation/ecs/components/Path.d.ts +2 -0
  235. package/engine/navigation/ecs/components/Path.js +6 -1
  236. package/engine/navigation/ecs/components/computeNonuniformCatmullRomSplineSample.js +117 -0
  237. package/engine/navigation/grid/AStar.js +1 -1
  238. package/engine/navigation/grid/GridField.js +3 -2
  239. package/engine/platform/GetURLHash.js +27 -0
  240. package/engine/platform/WebEnginePlatform.js +1 -22
  241. package/engine/sound/ecs/emitter/SoundEmitter.js +10 -6
  242. package/engine/ui/DraggableAspect.js +2 -2
  243. package/generation/GridGenerator.js +7 -6
  244. package/generation/example/SampleGenerator0.js +39 -35
  245. package/generation/example/filters/SampleGroundMoistureFilter.js +58 -17
  246. package/generation/example/generators/interactive/mir_generator_place_buff_objects.js +7 -6
  247. package/generation/example/generators/mir_generator_place_bases.js +7 -3
  248. package/generation/example/generators/mir_generator_place_road_decorators.js +3 -3
  249. package/generation/example/generators/mir_generator_place_starting_point.js +3 -2
  250. package/generation/example/themes/SampleTheme0.js +11 -7
  251. package/generation/filtering/numeric/CellFilterLiteralFloat.js +5 -0
  252. package/generation/filtering/numeric/complex/CellFilterDilate.js +36 -0
  253. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +15 -5
  254. package/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +53 -1
  255. package/generation/filtering/numeric/math/CellFilterMax2.js +3 -0
  256. package/generation/filtering/numeric/math/CellFilterMembershipGeneralizedBell.js +55 -0
  257. package/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +42 -0
  258. package/generation/filtering/numeric/sampling/CellFilterSampleLayerCubic.js +36 -0
  259. package/generation/filtering/numeric/sampling/CellFilterSampleLayerLinear.js +41 -0
  260. package/generation/grid/GridData.d.ts +5 -1
  261. package/generation/grid/GridData.js +35 -36
  262. package/generation/grid/MarkerMatchCounter.js +5 -3
  263. package/generation/grid/generation/discrete/GridTaskConnectRooms.js +1 -1
  264. package/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.js +1 -1
  265. package/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.js +1 -1
  266. package/generation/grid/generation/road/GridTaskGenerateRoads.js +1 -1
  267. package/generation/markers/GridActionRuleSet.js +15 -32
  268. package/generation/markers/GridCellActionPlaceMarker.js +12 -8
  269. package/generation/markers/debug/visualizeMarkers.js +56 -36
  270. package/generation/markers/emitter/MarkerNodeEmitterFromAction.js +8 -8
  271. package/generation/markers/prototypeGridCellActionPlaceMarker.js +209 -0
  272. package/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +1 -5
  273. package/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.spec.js +2 -2
  274. package/generation/placement/GridCellPlacementRule.js +31 -25
  275. package/generation/theme/ThemeEngine.js +1 -1
  276. package/package.json +1 -1
  277. package/samples/terrain/from_image.js +7 -3
  278. package/samples/terrain/main.js +1 -1
  279. package/view/View.js +23 -1
  280. package/view/common/LabelView.js +1 -1
  281. package/view/compose3x3transform.js +32 -8
  282. package/view/controller/dat/DatGuiUtils.js +1 -1
  283. package/view/elements/DropDownSelectionView.js +11 -3
  284. package/view/elements/image/ImageView.js +3 -1
  285. package/core/model/ObservedReal.js +0 -55
  286. package/editor/ecs/component/ObjectEditor.js +0 -0
  287. package/engine/graphics/particles/particular/engine/renderers/SoftBillboardParticleRenderer.js +0 -7
  288. package/engine/sound/ecs/emitter/attenuate/attenuateSoundLinear.js +0 -11
  289. package/generation/filtering/numeric/CellFilterReadGridLayer.js +0 -73
@@ -162,8 +162,8 @@ test('to/from euler YXZ consistency', () => {
162
162
 
163
163
  const u = new Vector3();
164
164
 
165
- r.__setFromEuler(x, y, z, 'YXZ');
166
- r.toEulerAnglesYXZ(u);
165
+ r.fromEulerAnglesXYZ(x, y, z);
166
+ r.toEulerAnglesXYZ(u);
167
167
 
168
168
  expect(u.x).toBeCloseTo(x);
169
169
  expect(u.y).toBeCloseTo(y);
@@ -177,4 +177,73 @@ test('to/from euler YXZ consistency', () => {
177
177
  check(1, 0, 1);
178
178
  check(1, 1, 0);
179
179
  check(1, 1, 1);
180
+
181
+ check(0, 0, -1);
182
+ check(0, -1, 0);
183
+ check(0, -1, -1);
184
+ check(-1, 0, 0);
185
+ check(-1, 0, -1);
186
+ check(-1, -1, 0);
187
+ check(-1, -1, -1);
188
+ });
189
+
190
+
191
+ /**
192
+ * See https://www.andre-gaschler.com/rotationconverter/
193
+ */
194
+ test('toEulerAnglesXYZ', () => {
195
+
196
+ function check(quat, euler) {
197
+
198
+ const q = new Quaternion(...quat);
199
+
200
+ const r = new Vector3();
201
+ q.toEulerAnglesXYZ(r)
202
+
203
+ expect(r.x).toBeCloseTo(euler[0]);
204
+ expect(r.y).toBeCloseTo(euler[1]);
205
+ expect(r.z).toBeCloseTo(euler[2]);
206
+ }
207
+
208
+
209
+ check([0, 0, 0, 1], [0, 0, 0]);
210
+
211
+ check([0.4794255, 0, 0, 0.8775826], [1, 0, 0]);
212
+ check([0, 0.4794255, 0, 0.8775826], [0, 1, 0]);
213
+ check([0, 0, 0.4794255, 0.8775826], [0, 0, 1]);
214
+
215
+ check([0.4207355, 0.4207355, 0.2298488, 0.7701512], [1, 1, 0]);
216
+ check([0.2298488, 0.4207355, 0.4207355, 0.7701512], [0, 1, 1]);
217
+ check([0.4207355, -0.2298488, 0.4207355, 0.7701512], [1, 0, 1]);
218
+
219
+ check([0.5709415, 0.1675188, 0.5709415, 0.5656758], [1, 1, 1]);
220
+
221
+
222
+ check([-0.4794255, 0, 0, 0.8775826], [-1, 0, 0]);
223
+ check([0, -0.4794255, 0, 0.8775826], [0, -1, 0]);
224
+ check([0, 0, -0.4794255, 0.8775826], [0, 0, -1]);
225
+
226
+ });
227
+
228
+ test('computeTwistAngle', () => {
229
+ const q = new Quaternion();
230
+
231
+ q.fromAxisAngle(Vector3.up, 0);
232
+
233
+ expect(q.computeTwistAngle(Vector3.up)).toBeCloseTo(0);
234
+
235
+ const hp = Math.PI * 0.5;
236
+
237
+ q.fromAxisAngle(Vector3.up, hp);
238
+
239
+ expect(q.computeTwistAngle(Vector3.up)).toBeCloseTo(hp);
240
+
241
+ q.fromAxisAngle(Vector3.up, hp * 2);
242
+
243
+ expect(q.computeTwistAngle(Vector3.up)).toBeCloseTo(hp * 2);
244
+
245
+ q.fromAxisAngle(Vector3.up, hp * 3);
246
+
247
+ expect(q.computeTwistAngle(Vector3.up)).toBeCloseTo(hp * 3);
248
+
180
249
  });
@@ -475,7 +475,7 @@ class Vector2 {
475
475
  _distanceSqrTo(x, y) {
476
476
  const dx = this.x - x;
477
477
  const dy = this.y - y;
478
- return magnitudeSqr(dx, dy);
478
+ return v2_length_sqr(dx, dy);
479
479
  }
480
480
 
481
481
  /**
@@ -685,7 +685,7 @@ export function v2_dot(x0, y0, x1, y1) {
685
685
  * @param {number} y
686
686
  * @returns {number}
687
687
  */
688
- function magnitudeSqr(x, y) {
688
+ export function v2_length_sqr(x, y) {
689
689
  return x * x + y * y;
690
690
  }
691
691
 
@@ -696,7 +696,7 @@ function magnitudeSqr(x, y) {
696
696
  * @returns {number}
697
697
  */
698
698
  export function v2_magnitude(x, y) {
699
- return Math.sqrt(magnitudeSqr(x, y));
699
+ return Math.sqrt(v2_length_sqr(x, y));
700
700
  }
701
701
 
702
702
  /**
@@ -51,6 +51,8 @@ export default class Vector3 implements Vector3Like {
51
51
 
52
52
  _crossVectors(ax: number, ay: number, az: number, bx: number, by: number, bz: number): void
53
53
 
54
+ _projectVectors(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number): void
55
+
54
56
  isZero(): boolean
55
57
 
56
58
  copy(other: Vector3Like): void
@@ -688,14 +688,38 @@ class Vector3 {
688
688
  }
689
689
 
690
690
  /**
691
- *
691
+ * Compute orthogonal vectors given a normal
692
+ * Orthogonal vectors are normalized vectors pointing at right angles away from the input normal and to one another
693
+ * @see https://stackoverflow.com/questions/3684269/component-of-a-quaternion-rotation-around-an-axis
694
+ * @param normal
695
+ * @param orthonormal1
696
+ * @param orthonormal2
697
+ */
698
+ static findOrthonormals(normal, orthonormal1, orthonormal2) {
699
+ throw new Error('Not Implemented');
700
+
701
+ // Vector3 w = Vector3.Transform(normal, OrthoX);
702
+ // float dot = Vector3.Dot(normal, w);
703
+ // if (Math.Abs(dot) > 0.6)
704
+ // {
705
+ // w = Vector3.Transform(normal, OrthoY);
706
+ // }
707
+ // w.Normalize();
708
+ //
709
+ // orthonormal1 = Vector3.Cross(normal, w);
710
+ // orthonormal1.Normalize();
711
+ // orthonormal2 = Vector3.Cross(normal, orthonormal1);
712
+ // orthonormal2.Normalize();
713
+ }
714
+
715
+ /**
716
+ * Project first vector onto second one
692
717
  * @param {number} x0
693
- * @param y0
694
- * @param z0
695
- * @param x1
696
- * @param y1
697
- * @param z1
698
- * @private
718
+ * @param {number} y0
719
+ * @param {number} z0
720
+ * @param {number} x1
721
+ * @param {number} y1
722
+ * @param {number} z1
699
723
  */
700
724
  _projectVectors(x0, y0, z0, x1, y1, z1) {
701
725
 
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema",
3
+ "title": "Vector3",
4
+ "type": "object",
5
+ "properties": {
6
+ "x": {
7
+ "type": "number"
8
+ },
9
+ "y": {
10
+ "type": "number"
11
+ },
12
+ "z": {
13
+ "type": "number"
14
+ }
15
+ }
16
+ }
@@ -114,6 +114,22 @@ class Vector4 {
114
114
  this.onChanged = new Signal();
115
115
  }
116
116
 
117
+ get 0() {
118
+ return this.x;
119
+ }
120
+
121
+ get 1() {
122
+ return this.y;
123
+ }
124
+
125
+ get 2() {
126
+ return this.z;
127
+ }
128
+
129
+ get 3() {
130
+ return this.w;
131
+ }
132
+
117
133
  /**
118
134
  *
119
135
  * @param {number[]} array
@@ -1,4 +1,4 @@
1
- import BinaryHeap from "../../../engine/navigation/grid/FastBinaryHeap.js";
1
+ import BinaryHeap from "../../collection/heap/FastBinaryHeap.js";
2
2
  import { assert } from "../../assert.js";
3
3
  import { max2 } from "../../math/max2.js";
4
4
  import { min2 } from "../../math/min2.js";
@@ -102,6 +102,22 @@ export async function metis_cluster_bs(result, node_count, edge_addresses, adjec
102
102
 
103
103
  }
104
104
 
105
+ // remap P values. Metis assigns unique unsigned integer values to each cluster, but they don't necessarily start at 0, to fix this we remap values
106
+ const mapping = [];
107
+ let index_counter = 0;
108
+
109
+ for (let i = 0; i < p.length; i++) {
110
+ const source_index = p[i];
111
+
112
+ let target_index = mapping[source_index];
113
+ if (target_index === undefined) {
114
+ target_index = index_counter++;
115
+ mapping[source_index] = target_index;
116
+ }
117
+
118
+ p[i] = target_index;
119
+ }
120
+
105
121
  result.set(p);
106
122
  return partition_count;
107
123
  }
@@ -1,4 +1,4 @@
1
- import FastBinaryHeap from "../../engine/navigation/grid/FastBinaryHeap.js";
1
+ import FastBinaryHeap from "../collection/heap/FastBinaryHeap.js";
2
2
  import { mn_graph_collapse_weighted_edge } from "./mn_graph_collapse_weighted_edge.js";
3
3
  import { WeightedEdge } from "./WeightedEdge.js";
4
4
 
@@ -3,7 +3,7 @@ import { seededRandom } from "../math/random/seededRandom.js";
3
3
  import { SquareMatrix } from "./SquareMatrix.js";
4
4
  import { DataType } from "../collection/table/DataType.js";
5
5
  import { BitSet } from "../binary/BitSet.js";
6
- import FastBinaryHeap from "../../engine/navigation/grid/FastBinaryHeap.js";
6
+ import FastBinaryHeap from "../collection/heap/FastBinaryHeap.js";
7
7
  import { randomIntegerBetween } from "../math/random/randomIntegerBetween.js";
8
8
 
9
9
  /**
@@ -2,24 +2,7 @@
2
2
  * Created by Alex on 03/11/2016.
3
3
  */
4
4
 
5
- /**
6
- *
7
- * @param o
8
- * @returns {boolean}
9
- */
10
- function isTypedArray(o) {
11
- return (
12
- o instanceof Int8Array ||
13
- o instanceof Uint8Array ||
14
- o instanceof Uint8ClampedArray ||
15
- o instanceof Int16Array ||
16
- o instanceof Uint16Array ||
17
- o instanceof Int32Array ||
18
- o instanceof Uint32Array ||
19
- o instanceof Float32Array ||
20
- o instanceof Float64Array
21
- );
22
- }
5
+ import { isTypedArray } from "../collection/array/typed/isTypedArray.js";
23
6
 
24
7
  /**
25
8
  *
@@ -114,6 +97,5 @@ function stringify(json) {
114
97
 
115
98
  export {
116
99
  stringify,
117
- stringifyStream,
118
- isTypedArray
100
+ stringifyStream
119
101
  };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Generalized bell function, also known as "Cauchy membership function"
3
+ * @see "dbellmf" function from Matlab
4
+ * @see https://codecrucks.com/what-is-fuzzy-membership-function-complete-guide/
5
+ * @see https://researchhubs.com/post/maths/fundamentals/bell-shaped-function.html
6
+ * @param {number} v
7
+ * @param {number} a Controls window, larger value = larger window. Function will return exactly 0.5 at this distance away from center
8
+ * @param {number} b Slope, larger slope makes function's tails sharper, meaning that values fall off faster away from center
9
+ * @param {number} c Controls center of the bell curve
10
+ * @returns {number}
11
+ */
12
+ export function bell_membership_function(v, a, b, c) {
13
+
14
+ const N = (v - c) / a;
15
+
16
+ const d = 1 + Math.pow(N, b * 2);
17
+
18
+ return 1 / d;
19
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 2 raised to the power of the parameter
3
+ * @param {number} v
4
+ * @returns {number}
5
+ */
6
+ export function exp2(v) {
7
+ return Math.pow(2, v);
8
+ }
@@ -39,6 +39,7 @@ export class NumericInterval {
39
39
  this.onChanged = new Signal();
40
40
  }
41
41
 
42
+
42
43
  /**
43
44
  *
44
45
  * @param {number} min
@@ -108,6 +109,14 @@ export class NumericInterval {
108
109
  return this.min === 0 && this.max === 0;
109
110
  }
110
111
 
112
+ /**
113
+ * Whether min and max are the same
114
+ * @returns {boolean}
115
+ */
116
+ isExact() {
117
+ return this.min === this.max;
118
+ }
119
+
111
120
  /**
112
121
  *
113
122
  * @returns {number}
@@ -176,6 +185,14 @@ export class NumericInterval {
176
185
 
177
186
  return hash;
178
187
  }
188
+
189
+ /**
190
+ * Distance between min and max (= max - min)
191
+ * @returns {number}
192
+ */
193
+ get span() {
194
+ return this.max - this.min;
195
+ }
179
196
  }
180
197
 
181
198
  /**
@@ -0,0 +1,25 @@
1
+ function F_Schlick(u, f0, f90) {
2
+
3
+ return f0 + (f90 - f0) * Math.pow(1.0 - u, 5.0);
4
+ }
5
+
6
+ /**
7
+ * @see https://google.github.io/filament/Filament.md.html#listing_diffusebrdf
8
+ * @see Brent Burley. 2012. Physically Based Shading at Disney. Physically Based Shading in Film and Game Production, ACM SIGGRAPH 2012 Courses.
9
+ * N = surface normal
10
+ * L = light direction
11
+ * V = view direction
12
+ * H = normalize( V + L )
13
+ *
14
+ * @param {number} NoV = abs(dot(n, v)) + 1e-5
15
+ * @param {number} NoL = lamp(dot(n, l), 0.0, 1.0)
16
+ * @param {number} LoH = clamp(dot(l, h), 0.0, 1.0)
17
+ * @param {number} roughness surface roughness coefficient
18
+ * @returns {number}
19
+ */
20
+ export function brdf_burley(NoV, NoL, LoH, roughness) {
21
+ const f90 = 0.5 + 2.0 * roughness * LoH * LoH;
22
+ const lightScatter = F_Schlick(NoL, 1.0, f90);
23
+ const viewScatter = F_Schlick(NoV, 1.0, f90);
24
+ return lightScatter * viewScatter * (1.0 / Math.PI);
25
+ }
@@ -0,0 +1,22 @@
1
+ import { exp2 } from "../../exp2.js";
2
+
3
+
4
+ /**
5
+ *
6
+ * @param {number} f0
7
+ * @param {number} f90
8
+ * @param {number} dotVH
9
+ * @returns {number}
10
+ */
11
+ export function bsdf_schlick(f0, f90, dotVH) {
12
+
13
+ // Original approximation by Christophe Schlick '94
14
+ // float fresnel = pow( 1.0 - dotVH, 5.0 );
15
+
16
+ // Optimized variant (presented by Epic at SIGGRAPH '13)
17
+ // https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf
18
+
19
+ const fresnel = exp2(((-5.55473) * dotVH - 6.98316) * dotVH);
20
+
21
+ return ((f0 * (1.0 - fresnel)) + (f90 * fresnel));
22
+ }
@@ -0,0 +1,18 @@
1
+ import { inverseLerp } from "../../inverseLerp.js";
2
+
3
+ /**
4
+ *
5
+ * @param {number} distance
6
+ * @param {number} min
7
+ * @param {number} max
8
+ * @returns {number}
9
+ */
10
+ export function interpolate_irradiance_linear(distance, min, max) {
11
+ if (distance <= min) {
12
+ return 1;
13
+ } else if (distance >= max) {
14
+ return 0;
15
+ } else {
16
+ return inverseLerp(max, min, distance);
17
+ }
18
+ }
@@ -1,4 +1,4 @@
1
- import { inverseLerp } from "../../../../../core/math/inverseLerp.js";
1
+ import { inverseLerp } from "../../inverseLerp.js";
2
2
 
3
3
  /**
4
4
  *
@@ -7,7 +7,7 @@ import { inverseLerp } from "../../../../../core/math/inverseLerp.js";
7
7
  * @param {number} max
8
8
  * @return {number}
9
9
  */
10
- export function attenuateSoundLogarithmic(distance, min, max) {
10
+ export function interpolate_irradiance_lograrithmic(distance, min, max) {
11
11
  if (distance >= max) {
12
12
  return 0;
13
13
  }
@@ -6,7 +6,7 @@
6
6
  * @param {number} max
7
7
  * @return {number}
8
8
  */
9
- export function attenuateSoundSmith(distance, min, max) {
9
+ export function interpolate_irradiance_smith(distance, min, max) {
10
10
 
11
11
  if (distance < min) {
12
12
  return 1;
@@ -1,33 +1,4 @@
1
- import { assert } from "../../assert.js";
1
+ import { seededRandom_Mulberry32 } from "./seededRandom_Mulberry32.js";
2
2
 
3
- /**
4
- *
5
- * @param {number} seed
6
- * @returns {Function}
7
- */
8
- export function seededRandom(seed) {
9
- /**
10
- *
11
- * @returns {number}
12
- */
13
- function random() {
14
- const x = Math.sin(seed++) * 10000;
15
- return x - Math.floor(x);
16
- }
17
3
 
18
- /**
19
- *
20
- * @returns {number}
21
- */
22
- random.getCurrentSeed = function () {
23
- return seed;
24
- };
25
-
26
- random.setCurrentSeed = function (v) {
27
- assert.typeOf(v, "number", "v");
28
-
29
- seed = v;
30
- };
31
-
32
- return random;
33
- }
4
+ export const seededRandom = seededRandom_Mulberry32;
@@ -0,0 +1,31 @@
1
+ /**
2
+ *
3
+ * @param {number} [seed]
4
+ * @returns {function():number|{setCurrentSeed(v:number):void,getCurrentSeed():number}}
5
+ */
6
+ export function seededRandom_Mulberry32(seed = 0) {
7
+ let _seed = seed;
8
+
9
+ function random() {
10
+ _seed += 0x6D2B79F5;
11
+
12
+ // Mulberry32 generator
13
+ let t = _seed;
14
+
15
+ t = Math.imul(t ^ t >>> 15, t | 1);
16
+
17
+ t ^= t + Math.imul(t ^ t >>> 7, t | 61);
18
+
19
+ return ((t ^ t >>> 14) >>> 0) / 4294967296;
20
+ }
21
+
22
+ random.setCurrentSeed = function (v) {
23
+ _seed = v;
24
+ };
25
+
26
+ random.getCurrentSeed = function () {
27
+ return _seed;
28
+ };
29
+
30
+ return random;
31
+ }
@@ -0,0 +1,33 @@
1
+ import { assert } from "../../assert.js";
2
+
3
+ /**
4
+ *
5
+ * @param {number} [seed]
6
+ * @returns {function():number|{setCurrentSeed(v:number):void,getCurrentSeed():number}}
7
+ */
8
+ function seededRandom_sine(seed = 0) {
9
+ /**
10
+ *
11
+ * @returns {number}
12
+ */
13
+ function random() {
14
+ const x = Math.sin(seed++) * 10000;
15
+ return x - Math.floor(x);
16
+ }
17
+
18
+ /**
19
+ *
20
+ * @returns {number}
21
+ */
22
+ random.getCurrentSeed = function () {
23
+ return seed;
24
+ };
25
+
26
+ random.setCurrentSeed = function (v) {
27
+ assert.isNumber(v, "v");
28
+
29
+ seed = v;
30
+ };
31
+
32
+ return random;
33
+ }
@@ -22,6 +22,14 @@ function ObservedEnum(value, validSet) {
22
22
  this.onChanged = new Signal();
23
23
  }
24
24
 
25
+ /**
26
+ *
27
+ * @returns {Object<string, T>}
28
+ */
29
+ ObservedEnum.prototype.getValidValueSet = function () {
30
+ return this.__validSet;
31
+ }
32
+
25
33
  /**
26
34
  *
27
35
  * @param {T} value