@woosh/meep-engine 2.37.19 → 2.37.20
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/binary/float2uint8.js +8 -0
- package/core/binary/uint82float.js +8 -0
- package/core/bvh2/bvh3/ExplicitBinaryBoundingVolumeHierarchy.js +6 -4
- package/core/collection/list/List.d.ts +1 -1
- package/core/color/Color.js +69 -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/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/geom/2d/quad-tree/qt_collect_by_circle.js +67 -0
- package/core/geom/Quaternion.d.ts +16 -1
- package/core/geom/Quaternion.js +129 -65
- package/core/geom/Quaternion.spec.js +24 -0
- 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/Vector4.js +16 -0
- 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/editor/actions/concrete/ModifyPatchSampler2DAction.js +118 -0
- package/editor/actions/concrete/ModifyPatchSampler2DAction.spec.js +30 -0
- package/editor/actions/concrete/PatchTerrainHeightAction.js +12 -104
- package/editor/ecs/component/createObjectEditor.js +53 -29
- package/editor/ecs/component/editors/Sampler2DEditor.js +71 -24
- package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.js +47 -0
- package/editor/ecs/component/editors/primitive/FunctionEditor.js +6 -2
- 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/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/fow/FogOfWarEditor.js +13 -0
- package/engine/ecs/terrain/ecs/OffsetScaleTransform2D.d.ts +6 -0
- package/engine/ecs/terrain/ecs/Terrain.js +21 -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/paintTerrainOverlayViaLookupTable.js +13 -7
- package/engine/ecs/transform/Transform.d.ts +2 -0
- package/engine/ecs/transform/Transform.js +3 -0
- package/engine/graphics/ecs/light/Light.js +0 -47
- package/engine/graphics/ecs/light/LightSerializationAdapter.js +50 -0
- package/engine/graphics/ecs/mesh-v2/DrawMode.js +2 -1
- package/engine/graphics/ecs/mesh-v2/build_three_object.js +3 -1
- 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 +1566 -0
- package/engine/graphics/micron/prototypeVirtualGeometry.js +2 -2
- 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 +190 -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/input/ecs/util/TerrainCameraTargetSampler.js +2 -2
- package/engine/navigation/ecs/components/computeNonuniformCatmullRomSplineSample.js +117 -0
- package/engine/platform/GetURLHash.js +27 -0
- package/engine/platform/WebEnginePlatform.js +1 -22
- package/engine/sound/ecs/emitter/SoundEmitter.js +10 -6
- package/generation/GridGenerator.js +7 -6
- package/generation/example/SampleGenerator0.js +6 -6
- package/generation/example/filters/SampleGroundMoistureFilter.js +58 -17
- 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/markers/GridActionRuleSet.js +15 -32
- package/generation/markers/GridCellActionPlaceMarker.js +8 -10
- 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 +10 -3
- package/package.json +1 -1
- package/samples/terrain/from_image.js +7 -3
- 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
|
@@ -619,20 +619,22 @@ export class ExplicitBinaryBoundingVolumeHierarchy {
|
|
|
619
619
|
while (index !== NULL_NODE) {
|
|
620
620
|
index = this.balance(index);
|
|
621
621
|
|
|
622
|
-
const
|
|
623
|
-
|
|
622
|
+
const node_address = index * ELEMENT_WORD_COUNT;
|
|
623
|
+
|
|
624
|
+
const child1 = uint32[node_address + COLUMN_CHILD_1];
|
|
625
|
+
const child2 = uint32[node_address + COLUMN_CHILD_2];
|
|
624
626
|
|
|
625
627
|
assert.notEqual(child1, NULL_NODE, 'child1 is null');
|
|
626
628
|
assert.notEqual(child2, NULL_NODE, 'child2 is null');
|
|
627
629
|
|
|
628
|
-
uint32[
|
|
630
|
+
uint32[node_address + COLUMN_HEIGHT] = 1 + max2(
|
|
629
631
|
uint32[child1 * ELEMENT_WORD_COUNT + COLUMN_HEIGHT],
|
|
630
632
|
uint32[child2 * ELEMENT_WORD_COUNT + COLUMN_HEIGHT],
|
|
631
633
|
);
|
|
632
634
|
|
|
633
635
|
this.node_set_combined_aabb(index, child1, child2);
|
|
634
636
|
|
|
635
|
-
index = uint32[
|
|
637
|
+
index = uint32[node_address + COLUMN_PARENT];
|
|
636
638
|
}
|
|
637
639
|
}
|
|
638
640
|
|
package/core/color/Color.js
CHANGED
|
@@ -10,6 +10,8 @@ import { rgb2hsv } from "./rgb2hsv.js";
|
|
|
10
10
|
import { rgb2uint24 } from "./rgb2uint24.js";
|
|
11
11
|
import { clamp01 } from "../math/clamp01.js";
|
|
12
12
|
import { rgb2hex } from "./rgb2hex.js";
|
|
13
|
+
import { linear_to_sRGB } from "./linear_to_sRGB.js";
|
|
14
|
+
import { sRGB_to_linear } from "./sRGB_to_linear.js";
|
|
13
15
|
|
|
14
16
|
/**
|
|
15
17
|
* @class
|
|
@@ -487,5 +489,71 @@ export class Color {
|
|
|
487
489
|
r.parse(str);
|
|
488
490
|
|
|
489
491
|
return r;
|
|
490
|
-
}
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
*
|
|
496
|
+
* @param {Color} input
|
|
497
|
+
* @param {Color} output
|
|
498
|
+
*/
|
|
499
|
+
static from_linear_to_sRGB(input, output) {
|
|
500
|
+
linear_to_sRGB(output, 0, input, 0);
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/**
|
|
504
|
+
*
|
|
505
|
+
* @param {Color} input
|
|
506
|
+
* @param {Color} output
|
|
507
|
+
*/
|
|
508
|
+
static from_sRGB_to_linear(input, output) {
|
|
509
|
+
sRGB_to_linear(output, 0, input, 0);
|
|
510
|
+
}
|
|
491
511
|
}
|
|
512
|
+
|
|
513
|
+
/**
|
|
514
|
+
* @readonly
|
|
515
|
+
* @type {Readonly<Color>}
|
|
516
|
+
*/
|
|
517
|
+
Color.red = Object.freeze(new Color(1, 0, 0));
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
* @readonly
|
|
521
|
+
* @type {Readonly<Color>}
|
|
522
|
+
*/
|
|
523
|
+
Color.green = Object.freeze(new Color(0, 1, 0));
|
|
524
|
+
|
|
525
|
+
/**
|
|
526
|
+
* @readonly
|
|
527
|
+
* @type {Readonly<Color>}
|
|
528
|
+
*/
|
|
529
|
+
Color.blue = Object.freeze(new Color(0, 0, 1));
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* @readonly
|
|
533
|
+
* @type {Readonly<Color>}
|
|
534
|
+
*/
|
|
535
|
+
Color.yellow = Object.freeze(new Color(1, 1, 0));
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* @readonly
|
|
539
|
+
* @type {Readonly<Color>}
|
|
540
|
+
*/
|
|
541
|
+
Color.cyan = Object.freeze(new Color(0, 1, 1));
|
|
542
|
+
|
|
543
|
+
/**
|
|
544
|
+
* @readonly
|
|
545
|
+
* @type {Readonly<Color>}
|
|
546
|
+
*/
|
|
547
|
+
Color.magenta = Object.freeze(new Color(1, 0, 1));
|
|
548
|
+
|
|
549
|
+
/**
|
|
550
|
+
* @readonly
|
|
551
|
+
* @type {Readonly<Color>}
|
|
552
|
+
*/
|
|
553
|
+
Color.white = Object.freeze(new Color(1, 1, 1));
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* @readonly
|
|
557
|
+
* @type {Readonly<Color>}
|
|
558
|
+
*/
|
|
559
|
+
Color.black = Object.freeze(new Color(0, 0, 0));
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { rgb2uint24 } from "./rgb2uint24.js";
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* @see https://en.wikipedia.org/wiki/YUV
|
|
3
5
|
* @param {number} Y
|
|
@@ -13,8 +15,5 @@ export function YCbCr_to_rgb_uint24(Y, Cb, Cr) {
|
|
|
13
15
|
const g = Y - ((_Cb >> 2) + (_Cb >> 4) + (_Cb >> 5)) - ((_Cr >> 1) + (_Cr >> 3) + (_Cr >> 4) + (_Cr >> 5));
|
|
14
16
|
const b = Y + _Cb + (_Cb >> 1) + (_Cb >> 2) + (_Cb >> 6);
|
|
15
17
|
|
|
16
|
-
return (
|
|
17
|
-
| (g & 0xFF) << 8
|
|
18
|
-
| (r & 0xFF) << 16
|
|
19
|
-
;
|
|
18
|
+
return rgb2uint24(r, g, b);
|
|
20
19
|
}
|
package/core/color/hsv2rgb.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { clamp01 } from "../math/clamp01.js";
|
|
2
|
+
import { float2uint8 } from "../binary/float2uint8.js";
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
*
|
|
@@ -46,9 +47,9 @@ export function hsv2rgb(h, s, v) {
|
|
|
46
47
|
break;
|
|
47
48
|
}
|
|
48
49
|
return {
|
|
49
|
-
r:
|
|
50
|
-
g:
|
|
51
|
-
b:
|
|
50
|
+
r: float2uint8(r),
|
|
51
|
+
g: float2uint8(g),
|
|
52
|
+
b: float2uint8(b)
|
|
52
53
|
};
|
|
53
54
|
}
|
|
54
55
|
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;
|
|
1
|
+
function convert(c) {
|
|
2
|
+
return (c < 0.0031308) ? c * 12.92 : 1.055 * (Math.pow(c, 0.41666)) - 0.055;
|
|
4
3
|
}
|
|
5
4
|
|
|
6
5
|
/**
|
|
7
6
|
*
|
|
8
|
-
* @param {number[]} output
|
|
7
|
+
* @param {number[]|ArrayLike<number>} output
|
|
9
8
|
* @param {number} output_offset
|
|
10
|
-
* @param {number[]} input
|
|
9
|
+
* @param {number[]|ArrayLike<number>} input
|
|
11
10
|
* @param {number} input_offset
|
|
12
11
|
*/
|
|
13
12
|
export function linear_to_sRGB(output, output_offset, input, input_offset) {
|
package/core/color/rgb2uint24.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { float2uint8 } from "../binary/float2uint8.js";
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
*
|
|
3
5
|
* @param {number} r
|
|
@@ -5,10 +7,10 @@
|
|
|
5
7
|
* @param {number} b
|
|
6
8
|
* @returns {number}
|
|
7
9
|
*/
|
|
8
|
-
export function rgb2uint24(r,g,b){
|
|
9
|
-
const _r =
|
|
10
|
-
const _g =
|
|
11
|
-
const _b =
|
|
10
|
+
export function rgb2uint24(r, g, b) {
|
|
11
|
+
const _r = float2uint8(r);
|
|
12
|
+
const _g = float2uint8(g);
|
|
13
|
+
const _b = float2uint8(b);
|
|
12
14
|
|
|
13
15
|
return (_b & 0xFF)
|
|
14
16
|
| (_g & 0xFF) << 8
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* @see https://en.wikipedia.org/wiki/YUV
|
|
4
|
-
* @param {number} r
|
|
5
|
-
* @param {number} g
|
|
6
|
-
* @param {number} b
|
|
7
|
-
* @returns {number}
|
|
8
|
-
*/
|
|
1
|
+
import { rgb2uint24 } from "./rgb2uint24.js";
|
|
2
|
+
|
|
9
3
|
export function rgb_to_YCbCr_uint24(r, g, b) {
|
|
10
4
|
const Y = 0.299 * r + 0.587 * g + 0.114 * b;
|
|
11
5
|
const Cb = -0.169 * r - 0.331 * g + 0.499 * b + 128;
|
|
12
6
|
const Cr = 0.499 * g - 0.418 * g - 0.0813 * b + 128;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
/**
|
|
8
|
+
*
|
|
9
|
+
* @see https://en.wikipedia.org/wiki/YUV
|
|
10
|
+
* @param {number} r
|
|
11
|
+
* @param {number} g
|
|
12
|
+
* @param {number} b
|
|
13
|
+
* @returns {number}
|
|
14
|
+
*/
|
|
15
|
+
return rgb2uint24(Y,Cb,Cr);
|
|
18
16
|
}
|
|
@@ -5,9 +5,9 @@ export default class Signal<A = any, B = any, C = any, D = any, E = any, F = any
|
|
|
5
5
|
add(listener: (a: A, b: B, c: C) => any, thisArg?: any): void
|
|
6
6
|
add(listener: (a: A, b: B, c: C, d: D) => any, thisArg?: any): void
|
|
7
7
|
add(listener: (a: A, b: B, c: C, d: D, e: E) => any, thisArg?: any): void
|
|
8
|
-
add(listener: (a: A, b: B, c: C, d: D, e: E,f: F) => any, thisArg?: any): void
|
|
9
|
-
add(listener: (a: A, b: B, c: C, d: D, e: E,f: F, g: G) => any, thisArg?: any): void
|
|
10
|
-
add(listener: (a: A, b: B, c: C, d: D, e: E,f: F, g: G, h: H) => any, thisArg?: any): void
|
|
8
|
+
add(listener: (a: A, b: B, c: C, d: D, e: E, f: F) => any, thisArg?: any): void
|
|
9
|
+
add(listener: (a: A, b: B, c: C, d: D, e: E, f: F, g: G) => any, thisArg?: any): void
|
|
10
|
+
add(listener: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H) => any, thisArg?: any): void
|
|
11
11
|
|
|
12
12
|
addOne(listener: () => any, thisArg?: any): void
|
|
13
13
|
addOne(listener: (a: A) => any, thisArg?: any): void
|
|
@@ -15,9 +15,9 @@ export default class Signal<A = any, B = any, C = any, D = any, E = any, F = any
|
|
|
15
15
|
addOne(listener: (a: A, b: B, c: C) => any, thisArg?: any): void
|
|
16
16
|
addOne(listener: (a: A, b: B, c: C, d: D) => any, thisArg?: any): void
|
|
17
17
|
addOne(listener: (a: A, b: B, c: C, d: D, e: E) => any, thisArg?: any): void
|
|
18
|
-
addOne(listener: (a: A, b: B, c: C, d: D, e: E,f: F) => any, thisArg?: any): void
|
|
19
|
-
addOne(listener: (a: A, b: B, c: C, d: D, e: E,f: F, g: G) => any, thisArg?: any): void
|
|
20
|
-
addOne(listener: (a: A, b: B, c: C, d: D, e: E,f: F, g: G, h: H) => any, thisArg?: any): void
|
|
18
|
+
addOne(listener: (a: A, b: B, c: C, d: D, e: E, f: F) => any, thisArg?: any): void
|
|
19
|
+
addOne(listener: (a: A, b: B, c: C, d: D, e: E, f: F, g: G) => any, thisArg?: any): void
|
|
20
|
+
addOne(listener: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H) => any, thisArg?: any): void
|
|
21
21
|
|
|
22
22
|
remove(listener: () => any, thisArg?: any): void
|
|
23
23
|
remove(listener: (a: A) => any, thisArg?: any): void
|
|
@@ -25,9 +25,9 @@ export default class Signal<A = any, B = any, C = any, D = any, E = any, F = any
|
|
|
25
25
|
remove(listener: (a: A, b: B, c: C) => any, thisArg?: any): void
|
|
26
26
|
remove(listener: (a: A, b: B, c: C, d: D) => any, thisArg?: any): void
|
|
27
27
|
remove(listener: (a: A, b: B, c: C, d: D, e: E) => any, thisArg?: any): void
|
|
28
|
-
remove(listener: (a: A, b: B, c: C, d: D, e: E,f: F) => any, thisArg?: any): void
|
|
29
|
-
remove(listener: (a: A, b: B, c: C, d: D, e: E,f: F, g: G) => any, thisArg?: any): void
|
|
30
|
-
remove(listener: (a: A, b: B, c: C, d: D, e: E,f: F, g: G, h: H) => any, thisArg?: any): void
|
|
28
|
+
remove(listener: (a: A, b: B, c: C, d: D, e: E, f: F) => any, thisArg?: any): void
|
|
29
|
+
remove(listener: (a: A, b: B, c: C, d: D, e: E, f: F, g: G) => any, thisArg?: any): void
|
|
30
|
+
remove(listener: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H) => any, thisArg?: any): void
|
|
31
31
|
|
|
32
32
|
send0(): void
|
|
33
33
|
|
|
@@ -47,4 +47,6 @@ export default class Signal<A = any, B = any, C = any, D = any, E = any, F = any
|
|
|
47
47
|
* @deprecated use strongly typed dispatch methods instead (send0, send1 etc)
|
|
48
48
|
*/
|
|
49
49
|
dispatch(...params: any[]): void
|
|
50
|
+
|
|
51
|
+
removeAll(): void
|
|
50
52
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { aabb2_sqrDistanceToPoint } from "../AABB2Math.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @type {QuadTreeNode[]}
|
|
6
|
+
*/
|
|
7
|
+
const node_stack = [];
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @template T
|
|
11
|
+
* @param {QuadTreeDatum<T>[]} result
|
|
12
|
+
* @param {number} result_offset
|
|
13
|
+
* @param {QuadTreeNode<T>} tree
|
|
14
|
+
* @param {number} x
|
|
15
|
+
* @param {number} y
|
|
16
|
+
* @param {number} radius
|
|
17
|
+
* @returns {number}
|
|
18
|
+
*/
|
|
19
|
+
export function qt_collect_by_circle(
|
|
20
|
+
result, result_offset,
|
|
21
|
+
tree,
|
|
22
|
+
x, y, radius
|
|
23
|
+
) {
|
|
24
|
+
let result_cursor = result_offset;
|
|
25
|
+
|
|
26
|
+
let stack_pointer = 0;
|
|
27
|
+
|
|
28
|
+
const r2 = radius * radius;
|
|
29
|
+
|
|
30
|
+
node_stack[stack_pointer] = tree;
|
|
31
|
+
stack_pointer++;
|
|
32
|
+
|
|
33
|
+
while (stack_pointer > 0) {
|
|
34
|
+
|
|
35
|
+
--stack_pointer;
|
|
36
|
+
const node = node_stack[stack_pointer];
|
|
37
|
+
|
|
38
|
+
const d2 = aabb2_sqrDistanceToPoint(node.x0, node.y0, node.x1, node.y1, x, y);
|
|
39
|
+
|
|
40
|
+
if (d2 > r2) {
|
|
41
|
+
// not a match
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const data = node.data;
|
|
46
|
+
const data_count = data.length;
|
|
47
|
+
|
|
48
|
+
for (let i = 0; i < data_count; i++) {
|
|
49
|
+
const datum = data[i];
|
|
50
|
+
|
|
51
|
+
const d2_to_datum = aabb2_sqrDistanceToPoint(datum.x0, datum.y0, datum.x1, datum.y1, x, y);
|
|
52
|
+
|
|
53
|
+
if (d2_to_datum <= r2) {
|
|
54
|
+
result[result_cursor++] = datum;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (node.isSplit()) {
|
|
59
|
+
node_stack[stack_pointer++] = node.topLeft;
|
|
60
|
+
node_stack[stack_pointer++] = node.bottomLeft;
|
|
61
|
+
node_stack[stack_pointer++] = node.topRight;
|
|
62
|
+
node_stack[stack_pointer++] = node.bottomRight;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return result_cursor - result_offset;
|
|
67
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Signal from "../events/signal/Signal";
|
|
2
2
|
import {Matrix4, Quaternion as ThreeQuaternion} from "three";
|
|
3
|
+
import Vector3 from "./Vector3";
|
|
3
4
|
|
|
4
5
|
export default class Quaternion {
|
|
5
6
|
public x: number
|
|
@@ -7,7 +8,7 @@ export default class Quaternion {
|
|
|
7
8
|
public z: number
|
|
8
9
|
public w: number
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
readonly onChanged: Signal<number, number, number, number, number, number, number, number>;
|
|
11
12
|
|
|
12
13
|
set(x: number, y: number, z: number, w: number): void
|
|
13
14
|
|
|
@@ -15,6 +16,10 @@ export default class Quaternion {
|
|
|
15
16
|
copy(other: ThreeQuaternion): void
|
|
16
17
|
copy(other: { x: number, y: number, z: number, w: number }): void
|
|
17
18
|
|
|
19
|
+
equals(other: { x: number, y: number, z: number, w: number }): boolean
|
|
20
|
+
|
|
21
|
+
normalize(): void
|
|
22
|
+
|
|
18
23
|
__setThreeEuler(threeEuler: any): void
|
|
19
24
|
|
|
20
25
|
__setFromEuler(x: number, y: number, z: number, order?: string): void
|
|
@@ -29,4 +34,14 @@ export default class Quaternion {
|
|
|
29
34
|
toEulerAnglesXYZ(v3: { set(x: number, y: number, z: number): any }): void
|
|
30
35
|
|
|
31
36
|
fromEulerAnglesXYZ(x: number, y: number, z: number): void
|
|
37
|
+
|
|
38
|
+
fromAxisAngle(axis: Vector3 | { x: number, y: number, z: number }, angle: number): void
|
|
39
|
+
|
|
40
|
+
computeTwistAngle(axis: Vector3): number
|
|
41
|
+
|
|
42
|
+
multiplyQuaternions(a: Quaternion, b: Quaternion): void
|
|
43
|
+
|
|
44
|
+
toJSON(): any
|
|
45
|
+
|
|
46
|
+
fromJSON(j: any): void
|
|
32
47
|
}
|