@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.
- package/core/assert.js +1 -1
- package/core/binary/float2uint8.js +8 -0
- package/core/binary/uint82float.js +8 -0
- package/core/bvh2/bvh3/ExplicitBinaryBoundingVolumeHierarchy.js +6 -4
- package/core/collection/array/array_get_index_in_range.js +16 -0
- package/core/collection/array/typed/isTypedArray.js +20 -0
- package/core/collection/array/typedArrayToDataType.js +1 -0
- package/{engine/navigation/grid → core/collection/heap}/BinaryHeap.js +6 -1
- package/{engine/navigation/grid → core/collection/heap}/FastBinaryHeap.js +3 -2
- package/{engine/navigation/grid → core/collection/heap}/FastBinaryHeap.spec.js +3 -3
- package/core/collection/heap/Uin32Heap.spec.js +59 -0
- package/core/collection/heap/Uint32Heap.js +385 -0
- package/core/collection/list/List.d.ts +1 -1
- package/core/collection/table/RowFirstTable.js +34 -0
- package/core/collection/table/RowFirstTable.spec.js +59 -1
- package/core/color/Color.js +83 -1
- package/core/color/YCbCr_to_rgb_uint24.js +3 -4
- package/core/color/hsv2rgb.js +4 -3
- package/core/color/linear_to_sRGB.js +4 -5
- package/core/color/rgb2hex.js +1 -1
- package/core/color/rgb2uint24.js +6 -4
- package/core/color/rgb_to_YCbCr_uint24.js +11 -13
- package/core/events/signal/Signal.d.ts +11 -9
- package/core/events/signal/Signal.spec.js +16 -0
- package/core/geom/2d/quad-tree/qt_collect_by_circle.js +67 -0
- package/core/geom/3d/topology/computeTopoMeshVertexDuplicates.js +9 -6
- package/core/geom/3d/topology/expandConnectivityByLocality.js +5 -5
- package/core/geom/3d/topology/query/query_edge_is_boundary.js +7 -0
- package/core/geom/3d/topology/query/query_edge_is_manifold.js +13 -0
- package/core/geom/3d/topology/query/query_edge_is_manifold_or_boundary.js +11 -0
- package/core/geom/3d/topology/query/query_edge_is_wire.js +13 -0
- package/core/geom/3d/topology/query/query_edge_other_vertex.js +20 -0
- package/core/geom/3d/topology/query/query_edge_share_vert.js +9 -0
- package/core/geom/3d/topology/query/query_face_get_other_edges.js +39 -0
- package/core/geom/3d/topology/query/query_face_next_vertex.js +19 -0
- package/core/geom/3d/topology/query/query_face_prev_vertex.js +18 -0
- package/core/geom/3d/topology/query/query_vertex_in_edge.js +14 -0
- package/core/geom/3d/topology/query/query_vertex_pair_share_face.js +24 -0
- package/core/geom/3d/topology/query/query_vertices_in_edge.js +19 -0
- package/core/geom/3d/topology/simplify/collapseEdge.spec.js +3 -5
- package/core/geom/3d/topology/simplify/collapse_all_degenerate_edges.js +8 -10
- package/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +12 -2
- package/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js +277 -0
- package/core/geom/3d/topology/simplify/edge_collapse_quadratic.js +126 -0
- package/core/geom/3d/topology/simplify/prototypeMeshSimplification.js +502 -0
- package/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +37 -5
- package/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js +86 -1
- package/core/geom/3d/topology/simplify/simplifyTopoMesh.js +4 -4
- package/core/geom/3d/topology/simplify/simplifyTopoMesh2.js +119 -0
- package/core/geom/3d/topology/simplify/tm_edge_collapse_is_degenerate_flip.js +81 -0
- package/core/geom/3d/topology/{TopoEdge.js → struct/TopoEdge.js} +47 -20
- package/core/geom/3d/topology/{TopoEdge.spec.js → struct/TopoEdge.spec.js} +0 -0
- package/core/geom/3d/topology/{TopoMesh.js → struct/TopoMesh.js} +20 -41
- package/core/geom/3d/topology/{TopoTriangle.js → struct/TopoTriangle.js} +15 -25
- package/core/geom/3d/topology/{TopoVertex.js → struct/TopoVertex.js} +21 -4
- package/core/geom/3d/topology/{TopoVertex.spec.js → struct/TopoVertex.spec.js} +0 -0
- package/core/geom/3d/topology/tm_edge_kill.js +24 -0
- package/core/geom/3d/topology/tm_edge_splice.js +42 -0
- package/core/geom/3d/topology/tm_face_area.js +18 -0
- package/core/geom/3d/topology/tm_face_kill.js +12 -0
- package/core/geom/3d/topology/tm_face_normal.js +14 -0
- package/core/geom/3d/topology/tm_kill_only_edge.js +35 -0
- package/core/geom/3d/topology/tm_kill_only_face.js +12 -0
- package/core/geom/3d/topology/tm_kill_only_vert.js +14 -0
- package/core/geom/3d/topology/tm_vert_kill.js +19 -0
- package/core/geom/3d/topology/tm_vert_splice.js +64 -0
- package/core/geom/3d/topology/tm_vertex_compute_normal.js +42 -0
- package/core/geom/3d/topology/topoMeshToBufferGeometry.js +18 -4
- package/core/geom/3d/topology/weld_duplicate_vertices.js +63 -0
- package/core/geom/Quaternion.d.ts +21 -1
- package/core/geom/Quaternion.js +279 -200
- package/core/geom/Quaternion.spec.js +71 -2
- package/core/geom/Vector2.js +3 -3
- package/core/geom/Vector3.d.ts +2 -0
- package/core/geom/Vector3.js +31 -7
- package/core/geom/Vector3.schema.json +16 -0
- package/core/geom/Vector4.js +16 -0
- package/core/geom/packing/MaxRectangles.js +1 -1
- package/core/graph/cluster_mesh_metis.js +16 -0
- package/core/graph/coarsen_graph.js +1 -1
- package/core/graph/graph_k_means_cluster.js +1 -1
- package/core/json/JsonUtils.js +2 -20
- package/core/math/bell_membership_function.js +19 -0
- package/core/math/exp2.js +8 -0
- package/core/math/interval/NumericInterval.js +17 -0
- package/core/math/physics/brdf/brdf_burley.js +25 -0
- package/core/math/physics/bsdf/bsdf_schlick.js +22 -0
- package/core/math/physics/irradiance/interpolate_irradiance_linear.js +18 -0
- package/{engine/sound/ecs/emitter/attenuate/attenuateSoundLogarithmic.js → core/math/physics/irradiance/interpolate_irradiance_lograrithmic.js} +2 -2
- package/{engine/sound/ecs/emitter/attenuate/attenuateSoundSmith.js → core/math/physics/irradiance/interpolate_irradiance_smith.js} +1 -1
- package/core/math/random/seededRandom.js +2 -31
- package/core/math/random/seededRandom_Mulberry32.js +31 -0
- package/core/math/random/seededRandom_sine.js +33 -0
- package/core/model/ObservedEnum.js +8 -0
- package/editor/Editor.js +97 -1
- package/editor/actions/concrete/ModifyPatchSampler2DAction.js +118 -0
- package/editor/actions/concrete/ModifyPatchSampler2DAction.spec.js +30 -0
- package/editor/actions/concrete/PatchTerrainHeightAction.js +13 -105
- package/editor/ecs/component/FieldDescriptor.js +34 -0
- package/editor/ecs/component/FieldValueAdapter.js +20 -0
- package/editor/ecs/component/TypeEditor.js +33 -0
- package/editor/ecs/component/TypeSchema.d.ts +38 -0
- package/editor/ecs/component/createFieldEditor.js +90 -0
- package/editor/ecs/component/createObjectEditor.js +266 -60
- package/editor/ecs/component/editors/ColorEditor.js +39 -0
- package/editor/ecs/component/editors/HTMLElementEditor.js +17 -0
- package/editor/ecs/component/editors/ImagePathEditor.js +50 -0
- package/editor/ecs/component/editors/NumericIntervalEditor.js +86 -0
- package/editor/ecs/component/editors/ObservedBooleanEditor.js +13 -0
- package/editor/ecs/component/editors/ObservedEnumEditor.js +32 -0
- package/editor/ecs/component/editors/ObservedIntegerEditor.js +43 -0
- package/editor/ecs/component/editors/ObservedStringEditor.js +51 -0
- package/editor/ecs/component/editors/Sampler2DEditor.js +107 -0
- package/editor/ecs/component/editors/collection/ListEditor.js +83 -0
- package/editor/ecs/component/editors/common/BitFlagsEditor.js +80 -0
- package/editor/ecs/component/editors/common/EnumEditor.js +41 -0
- package/editor/ecs/component/editors/common/makeV3_editor.js +85 -0
- package/editor/ecs/component/editors/common/noEditor.js +9 -0
- package/editor/ecs/component/editors/ecs/GridObstacleEditor.js +17 -0
- package/editor/ecs/component/editors/ecs/MinimapMarkerEditor.js +16 -0
- package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +44 -0
- package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +17 -0
- package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +58 -0
- package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.js +54 -0
- package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.js +21 -0
- package/editor/ecs/component/editors/ecs/Trail2DEditor.js +33 -0
- package/editor/ecs/component/editors/ecs/TransformEditor.js +23 -0
- package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.js +21 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.js +89 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.js +18 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.js +22 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.js +20 -0
- package/editor/ecs/component/editors/geom/QuaternionEditor.js +56 -0
- package/editor/ecs/component/editors/geom/Vector1Editor.js +57 -0
- package/editor/ecs/component/editors/geom/Vector2Editor.js +11 -0
- package/editor/ecs/component/editors/geom/Vector3Editor.js +13 -0
- package/editor/ecs/component/editors/geom/Vector4Editor.js +12 -0
- package/editor/ecs/component/editors/primitive/ArrayEditor.js +46 -0
- package/editor/ecs/component/editors/primitive/BooleanEditor.js +27 -0
- package/editor/ecs/component/editors/primitive/FunctionEditor.js +29 -0
- package/editor/ecs/component/editors/primitive/NumberEditor.js +60 -0
- package/editor/ecs/component/editors/primitive/ObjectEditor.js +12 -0
- package/editor/ecs/component/editors/primitive/StringEditor.js +31 -0
- package/editor/ecs/component/editors/three/BufferGeometryEditor.js +28 -0
- package/editor/ecs/component/editors/three/MaterialEditor.js +27 -0
- package/editor/ecs/component/editors/three/MeshEditor.js +35 -0
- package/editor/ecs/component/editors/three/TextureEditor.js +32 -0
- package/editor/ecs/component/findNearestRegisteredType.js +59 -0
- package/editor/ecs/component/prototypeObjectEditor.js +379 -0
- package/editor/tools/SelectionTool.js +1 -1
- package/editor/tools/paint/TerrainHeightPaintTool.js +88 -68
- package/editor/tools/paint/TerrainPaintTool.js +2 -1
- package/editor/tools/paint/TerrainTexturePaintTool.js +8 -73
- package/editor/view/EditorView.js +1 -1
- package/editor/view/ecs/ComponentControlView.js +2 -30
- package/editor/view/ecs/EntityEditor.js +61 -139
- package/editor/view/ecs/components/GridObstacleController.js +4 -4
- package/editor/view/ecs/components/TerrainController.js +1 -1
- package/editor/view/ecs/components/common/NumberController.js +19 -7
- package/editor/view/node-graph/NodeGraphView.js +2 -2
- package/editor/view/node-graph/NodeView.js +7 -9
- package/engine/animation/keyed2/AnimationTrack.js +1 -1
- package/engine/asset/AssetManager.d.ts +1 -1
- package/engine/asset/AssetManager.js +390 -388
- package/engine/asset/loaders/gltf/extensions/MSFT_texture_dds.js +14 -2
- package/engine/ecs/components/TagEditor.js +15 -0
- package/engine/ecs/fow/FogOfWarEditor.js +13 -0
- package/engine/ecs/parent/ParentEntitySystem.js +57 -0
- package/engine/ecs/terrain/ecs/OffsetScaleTransform2D.d.ts +6 -0
- package/engine/ecs/terrain/ecs/Terrain.js +44 -43
- package/engine/ecs/terrain/ecs/TerrainSystem.js +2 -2
- package/engine/ecs/terrain/ecs/layers/TerrainLayer.js +1 -1
- package/engine/ecs/terrain/ecs/splat/SplatMapping.js +26 -28
- package/engine/ecs/terrain/overlay/TerrainOverlay.js +71 -66
- package/engine/ecs/terrain/tiles/TerrainTileManager.js +23 -0
- package/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +1 -1
- package/engine/ecs/terrain/util/paintTerrainOverlayViaLookupTable.js +13 -7
- package/engine/ecs/terrain/util/tensionOptimizeUV.js +1 -1
- package/engine/ecs/transform/Transform.d.ts +2 -0
- package/engine/ecs/transform/Transform.editor.schema.json +16 -0
- package/engine/ecs/transform/Transform.js +3 -0
- package/engine/graphics/ecs/highlight/HighlightEditor.js +17 -0
- package/engine/graphics/ecs/light/Light.js +0 -47
- package/engine/graphics/ecs/light/LightSerializationAdapter.js +50 -0
- package/engine/graphics/ecs/mesh/MeshEditor.js +28 -0
- package/engine/graphics/ecs/mesh-v2/DrawMode.js +2 -1
- package/engine/graphics/ecs/mesh-v2/aggregate/prototypeSGMesh.js +3 -3
- package/engine/graphics/ecs/mesh-v2/build_three_object.js +3 -1
- package/engine/graphics/ecs/mesh-v2/sg_compute_hierarchy_bounding_box_by_parent_entity.js +31 -0
- package/engine/graphics/ecs/mesh-v2/sg_hierarchy_compute_bounding_box_via_parent_entity.d.ts +4 -0
- package/engine/graphics/ecs/sprite/Sprite.js +11 -0
- package/engine/graphics/ecs/sprite/SpriteSystemPE.js +133 -0
- package/engine/graphics/ecs/sprite/prototypeSpriteSystem.js +1570 -0
- package/engine/graphics/micron/build/PatchRepresentation.js +7 -3
- package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +18 -8
- package/engine/graphics/micron/build/clustering/build_clustering_2.js +1 -1
- package/engine/graphics/micron/build/clustering/build_leaf_patches.js +2 -2
- package/engine/graphics/micron/build/clustering/build_leaf_patches_metis.js +1 -1
- package/engine/graphics/micron/build/hierarchy/buildAbstractPatchHierarchy.js +21 -3
- package/engine/graphics/micron/build/hierarchy/merge_patches.js +96 -43
- package/engine/graphics/micron/build/hierarchy/qvdr_build_simplified_clusters.js +11 -5
- package/engine/graphics/micron/format/VirtualGeometry.js +46 -3
- package/engine/graphics/micron/format/micron_build_proxy_geometry.js +4 -2
- package/engine/graphics/micron/prototypeVirtualGeometry.js +47 -10
- package/engine/graphics/micron/render/instanced/shader/shader_rewrite_standard.js +17 -17
- package/engine/graphics/micron/render/refinement/get_geometry_patch_cut.js +15 -3
- package/engine/graphics/micron/simplifyGeometry.js +1 -1
- package/engine/graphics/particles/particular/engine/ParticularEngine.js +5 -0
- package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +17 -9
- package/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.js +12 -10
- package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +7 -2
- package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js +27 -0
- package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.js +80 -0
- package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +16 -4
- package/engine/graphics/shaders/TerrainShader.js +8 -8
- package/engine/graphics/texture/atlas/TextureAtlasDebugger.js +2 -1
- package/engine/graphics/texture/sampler/Sampler2D.js +206 -201
- package/engine/graphics/texture/sampler/Sampler2D.spec.js +34 -35
- package/engine/graphics/texture/sampler/bicubic.js +59 -0
- package/engine/graphics/texture/sampler/downsampleSample2D.spec.js +2 -2
- package/engine/graphics/texture/sampler/genericResampleSampler2D.js +0 -2
- package/engine/graphics/texture/sampler/prototypeSamplerFiltering.js +146 -0
- package/engine/graphics/texture/sampler/{downsampleSampler2D.js → sampler2D_scale_down_linear.js} +8 -4
- package/engine/graphics/texture/sampler/sampler2_d_scale_down_lanczos.js +140 -0
- package/engine/graphics/texture/sampler/scaleSampler2D.js +3 -3
- package/engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.js +1 -1
- package/engine/graphics/util/ScaleObject3ToBox.js +14 -1
- package/engine/graphics/util/makeMeshPreviewScene.js +2 -1
- package/engine/grid/components/GridObstacle.js +0 -44
- package/engine/grid/components/GridObstacleSerializationAdapter.js +46 -0
- package/engine/input/devices/PointerDevice.d.ts +1 -1
- package/engine/input/devices/PointerDevice.js +17 -2
- package/engine/input/ecs/util/TerrainCameraTargetSampler.js +2 -2
- package/engine/navigation/ecs/components/Path.d.ts +2 -0
- package/engine/navigation/ecs/components/Path.js +6 -1
- package/engine/navigation/ecs/components/computeNonuniformCatmullRomSplineSample.js +117 -0
- package/engine/navigation/grid/AStar.js +1 -1
- package/engine/navigation/grid/GridField.js +3 -2
- package/engine/platform/GetURLHash.js +27 -0
- package/engine/platform/WebEnginePlatform.js +1 -22
- package/engine/sound/ecs/emitter/SoundEmitter.js +10 -6
- package/engine/ui/DraggableAspect.js +2 -2
- package/generation/GridGenerator.js +7 -6
- package/generation/example/SampleGenerator0.js +39 -35
- package/generation/example/filters/SampleGroundMoistureFilter.js +58 -17
- package/generation/example/generators/interactive/mir_generator_place_buff_objects.js +7 -6
- package/generation/example/generators/mir_generator_place_bases.js +7 -3
- package/generation/example/generators/mir_generator_place_road_decorators.js +3 -3
- package/generation/example/generators/mir_generator_place_starting_point.js +3 -2
- package/generation/example/themes/SampleTheme0.js +11 -7
- package/generation/filtering/numeric/CellFilterLiteralFloat.js +5 -0
- package/generation/filtering/numeric/complex/CellFilterDilate.js +36 -0
- package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +15 -5
- package/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +53 -1
- package/generation/filtering/numeric/math/CellFilterMax2.js +3 -0
- package/generation/filtering/numeric/math/CellFilterMembershipGeneralizedBell.js +55 -0
- package/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +42 -0
- package/generation/filtering/numeric/sampling/CellFilterSampleLayerCubic.js +36 -0
- package/generation/filtering/numeric/sampling/CellFilterSampleLayerLinear.js +41 -0
- package/generation/grid/GridData.d.ts +5 -1
- package/generation/grid/GridData.js +35 -36
- package/generation/grid/MarkerMatchCounter.js +5 -3
- package/generation/grid/generation/discrete/GridTaskConnectRooms.js +1 -1
- package/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.js +1 -1
- package/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.js +1 -1
- package/generation/grid/generation/road/GridTaskGenerateRoads.js +1 -1
- package/generation/markers/GridActionRuleSet.js +15 -32
- package/generation/markers/GridCellActionPlaceMarker.js +12 -8
- package/generation/markers/debug/visualizeMarkers.js +56 -36
- package/generation/markers/emitter/MarkerNodeEmitterFromAction.js +8 -8
- package/generation/markers/prototypeGridCellActionPlaceMarker.js +209 -0
- package/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +1 -5
- package/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.spec.js +2 -2
- package/generation/placement/GridCellPlacementRule.js +31 -25
- package/generation/theme/ThemeEngine.js +1 -1
- package/package.json +1 -1
- package/samples/terrain/from_image.js +7 -3
- package/samples/terrain/main.js +1 -1
- package/view/View.js +23 -1
- package/view/common/LabelView.js +1 -1
- package/view/compose3x3transform.js +32 -8
- package/view/controller/dat/DatGuiUtils.js +1 -1
- package/view/elements/DropDownSelectionView.js +11 -3
- package/view/elements/image/ImageView.js +3 -1
- package/core/model/ObservedReal.js +0 -55
- package/editor/ecs/component/ObjectEditor.js +0 -0
- package/engine/graphics/particles/particular/engine/renderers/SoftBillboardParticleRenderer.js +0 -7
- package/engine/sound/ecs/emitter/attenuate/attenuateSoundLinear.js +0 -11
- 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.
|
|
166
|
-
r.
|
|
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
|
});
|
package/core/geom/Vector2.js
CHANGED
|
@@ -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
|
|
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
|
|
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(
|
|
699
|
+
return Math.sqrt(v2_length_sqr(x, y));
|
|
700
700
|
}
|
|
701
701
|
|
|
702
702
|
/**
|
package/core/geom/Vector3.d.ts
CHANGED
|
@@ -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
|
package/core/geom/Vector3.js
CHANGED
|
@@ -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
|
|
package/core/geom/Vector4.js
CHANGED
|
@@ -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 "
|
|
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 "
|
|
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 "
|
|
6
|
+
import FastBinaryHeap from "../collection/heap/FastBinaryHeap.js";
|
|
7
7
|
import { randomIntegerBetween } from "../math/random/randomIntegerBetween.js";
|
|
8
8
|
|
|
9
9
|
/**
|
package/core/json/JsonUtils.js
CHANGED
|
@@ -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
|
+
}
|
|
@@ -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 "
|
|
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
|
|
10
|
+
export function interpolate_irradiance_lograrithmic(distance, min, max) {
|
|
11
11
|
if (distance >= max) {
|
|
12
12
|
return 0;
|
|
13
13
|
}
|
|
@@ -1,33 +1,4 @@
|
|
|
1
|
-
import {
|
|
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
|