@woosh/meep-engine 2.39.15 → 2.39.18
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/int32_to_binary_string.js +18 -0
- package/core/cache/Cache.js +1 -1
- package/core/geom/3d/decompose_matrix_4_array.js +3 -1
- package/core/geom/3d/ray/ray3_array_apply_matrix4.js +15 -1
- package/editor/tools/v2/TransformControls.d.ts +15 -0
- package/editor/tools/v2/TransformControls.js +1782 -0
- package/editor/tools/v2/prototypeTransformControls.js +80 -0
- package/engine/asset/AssetManager.js +82 -23
- package/engine/ecs/parent/EntityNode.js +41 -13
- package/engine/ecs/terrain/ecs/Terrain.js +20 -21
- package/engine/ecs/terrain/ecs/layers/TerrainLayers.js +8 -3
- package/engine/ecs/transform/Transform.d.ts +2 -0
- package/engine/ecs/transform/Transform.js +6 -0
- package/engine/ecs/transform-attachment/TransformAttachment.js +13 -0
- package/engine/ecs/transform-attachment/TransformAttachmentSystem.js +138 -16
- package/engine/graphics/FrameRunner.js +8 -2
- package/engine/graphics/ecs/mesh-v2/DrawMode.js +4 -0
- package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +77 -0
- package/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +10 -0
- package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +2 -30
- package/engine/graphics/ecs/mesh-v2/render/ShadedGeometryRendererContext.js +11 -0
- package/engine/graphics/ecs/mesh-v2/render/adapters/InstancedRendererAdapter.js +8 -32
- package/engine/graphics/ecs/mesh-v2/render/optimization/RuntimeDrawMethodOptimizer.js +6 -0
- package/engine/graphics/geometry/buffered/makeGeometryIndexed.js +23 -0
- package/engine/graphics/geometry/buffered/query/GeometrySpatialQueryAccelerator.js +16 -4
- package/engine/graphics/geometry/buffered/query/GeometryVisitor.js +8 -1
- package/engine/graphics/geometry/buffered/query/RaycastNearestHitComputingVisitor.js +14 -5
- package/engine/graphics/geometry/bvh/buffered/BinaryBVHFromBufferGeometry.js +56 -0
- package/package.json +1 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @see https://stackoverflow.com/questions/9939760/how-do-i-convert-an-integer-to-binary-in-javascript
|
|
3
|
+
* @example 1024 -> "00000000 00000000 00000100 00000000"
|
|
4
|
+
* @example -1 -> "11111111 11111111 11111111 11111111"
|
|
5
|
+
* @param {number} nMask
|
|
6
|
+
* @returns {string}
|
|
7
|
+
*/
|
|
8
|
+
export function int32_to_binary_string(nMask) {
|
|
9
|
+
// nMask must be between -2147483648 and 2147483647
|
|
10
|
+
if (nMask > 2 ** 31 - 1)
|
|
11
|
+
throw "number too large. number shouldn't be > 2**31-1"; //added
|
|
12
|
+
if (nMask < -1 * (2 ** 31))
|
|
13
|
+
throw "number too far negative, number shouldn't be < 2**31" //added
|
|
14
|
+
for (var nFlag = 0, nShifted = nMask, sMask = ''; nFlag < 32;
|
|
15
|
+
nFlag++, sMask += String(nShifted >>> 31), nShifted <<= 1) ;
|
|
16
|
+
sMask = sMask.replace(/\B(?=(.{8})+(?!.))/g, " ") // added
|
|
17
|
+
return sMask;
|
|
18
|
+
}
|
package/core/cache/Cache.js
CHANGED
|
@@ -5,7 +5,7 @@ import { returnOne, returnZero, strictEquals } from "../function/Functions.js";
|
|
|
5
5
|
import { CacheElement } from "./CacheElement.js";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* TODO validate hashes of held elements to keep them up to date. Keys are assumed to be immutable, but this assumption may be broken by users
|
|
9
9
|
* @template Key, Value
|
|
10
10
|
* @extends Map<Key,Value>
|
|
11
11
|
*/
|
|
@@ -26,7 +26,7 @@ export function decompose_matrix_4_array(m, position, rotation, scale) {
|
|
|
26
26
|
|
|
27
27
|
const scale_z = hypot(m31, m32, m33);
|
|
28
28
|
|
|
29
|
-
// extract rotation
|
|
29
|
+
// extract rotation matrix
|
|
30
30
|
const is1 = 1 / scale_x;
|
|
31
31
|
const is2 = 1 / scale_y;
|
|
32
32
|
const is3 = 1 / scale_z;
|
|
@@ -43,6 +43,8 @@ export function decompose_matrix_4_array(m, position, rotation, scale) {
|
|
|
43
43
|
const sm32 = m32 * is3;
|
|
44
44
|
const sm33 = m33 * is3;
|
|
45
45
|
|
|
46
|
+
// TODO take care of cases where scale is 0
|
|
47
|
+
|
|
46
48
|
// write out results
|
|
47
49
|
|
|
48
50
|
position.set(
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* @param {number[]|ArrayLike<number>|Float32Array} output 6 component vector, [origin_x, origin_y, origin_z, direction_x, direction_y, direction_z]
|
|
4
4
|
* @param {number[]|ArrayLike<number>|Float32Array} input 6 component vector, [origin_x, origin_y, origin_z, direction_x, direction_y, direction_z]
|
|
5
5
|
* @param {number[]|ArrayLike<number>|Float32Array} m4 4x4 matrix
|
|
6
|
+
* @returns {boolean} false if matrix transformation is impossible, such as when scale of the matrix is 0
|
|
6
7
|
*/
|
|
7
8
|
export function ray3_array_apply_matrix4(output, input, m4) {
|
|
8
9
|
const origin_x = input[0];
|
|
@@ -14,7 +15,13 @@ export function ray3_array_apply_matrix4(output, input, m4) {
|
|
|
14
15
|
const direction_z = input[5];
|
|
15
16
|
|
|
16
17
|
// transform ray to local space (inlined for speed)
|
|
17
|
-
const
|
|
18
|
+
const det = m4[3] * origin_x + m4[7] * origin_y + m4[11] * origin_z + m4[15];
|
|
19
|
+
|
|
20
|
+
if (det === 0) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const inv_w = 1 / det;
|
|
18
25
|
|
|
19
26
|
const out_origin_x = (m4[0] * origin_x + m4[4] * origin_y + m4[8] * origin_z + m4[12]) * inv_w;
|
|
20
27
|
const out_origin_y = (m4[1] * origin_x + m4[5] * origin_y + m4[9] * origin_z + m4[13]) * inv_w;
|
|
@@ -26,6 +33,11 @@ export function ray3_array_apply_matrix4(output, input, m4) {
|
|
|
26
33
|
|
|
27
34
|
// normalize direction
|
|
28
35
|
const out_direction_magnitude = Math.hypot(out_direction_x, out_direction_y, out_direction_z);
|
|
36
|
+
|
|
37
|
+
if (out_direction_magnitude === 0) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
|
|
29
41
|
const out_direction_magnitude_inverse = 1 / out_direction_magnitude;
|
|
30
42
|
|
|
31
43
|
const out_direction_normalized_x = out_direction_x * out_direction_magnitude_inverse;
|
|
@@ -39,4 +51,6 @@ export function ray3_array_apply_matrix4(output, input, m4) {
|
|
|
39
51
|
output[3] = out_direction_normalized_x;
|
|
40
52
|
output[4] = out_direction_normalized_y;
|
|
41
53
|
output[5] = out_direction_normalized_z;
|
|
54
|
+
|
|
55
|
+
return true;
|
|
42
56
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {OrthographicCamera, PerspectiveCamera} from "three";
|
|
2
|
+
import {EntityComponentDataset} from "../../../engine/ecs/EntityComponentDataset";
|
|
3
|
+
import {EntityNode} from "../../../engine/ecs/parent/EntityNode";
|
|
4
|
+
|
|
5
|
+
export class TransformControls extends EntityNode {
|
|
6
|
+
constructor(camera: PerspectiveCamera | OrthographicCamera, domElement: HTMLElement)
|
|
7
|
+
|
|
8
|
+
build(ecd: EntityComponentDataset): void
|
|
9
|
+
|
|
10
|
+
destroy(): void
|
|
11
|
+
|
|
12
|
+
attach(entity: number): void
|
|
13
|
+
|
|
14
|
+
detach(): void
|
|
15
|
+
}
|