@woosh/meep-engine 2.56.0 → 2.57.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/editor/ecs/component/editors/ColorEditor.js +1 -1
- package/editor/ecs/component/editors/ImagePathEditor.js +2 -2
- package/editor/ecs/component/editors/{LargeStrongEditor.js → LargeStringEditor.js} +1 -1
- package/editor/tools/GridPaintTool.js +3 -3
- package/editor/tools/TopDownCameraControlTool.js +1 -1
- package/editor/tools/TransformTool.js +1 -1
- package/editor/tools/engine/Tool.js +9 -23
- package/editor/tools/engine/ToolEngine.js +5 -7
- package/editor/tools/paint/TerrainHeightPaintTool.js +2 -2
- package/editor/tools/paint/TerrainPaintTool.js +2 -2
- package/editor/tools/paint/TerrainTexturePaintTool.js +2 -2
- package/package.json +1 -1
- package/src/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.js +1 -1
- package/src/core/bvh2/traversal/ThreeClippingPlaneComputingBVHVisitor.js +1 -1
- package/src/core/bvh2/traversal/__process_point_if_within_planes.js +1 -1
- package/src/core/cache/LoadingCache.js +3 -2
- package/src/core/collection/array/arraySetSortingDiff.spec.js +12 -12
- package/src/core/collection/array/weightedRandomFromArray.js +2 -2
- package/src/core/color/Color.js +6 -6
- package/src/core/color/YCbCr/YCbCr.spec.js +16 -0
- package/src/core/color/{YCbCr_to_rgb_uint24.js → YCbCr/YCbCr_to_rgb_uint24.js} +6 -6
- package/src/core/color/YCbCr/rgb_to_YCbCr_uint24.js +16 -0
- package/src/core/color/{hex2rgb.js → hex/hex2rgb.js} +1 -1
- package/src/core/color/{rgb2hex.js → hex/rgb2hex.js} +1 -1
- package/src/core/color/{hsv2rgb.js → hsv/hsv2rgb.js} +3 -3
- package/src/core/color/hsv/rgb2hsv.js +49 -0
- package/src/core/color/{kelvin_to_rgb.js → kelvin/kelvin_to_rgb.js} +1 -1
- package/src/core/color/{kelvin_to_rgb.spec.js → kelvin/kelvin_to_rgb.spec.js} +2 -2
- package/src/core/color/{prototype_kelvin_to_rgb.js → kelvin/prototype_kelvin_to_rgb.js} +5 -5
- package/src/core/color/{rgb_to_kelvin.spec.js → kelvin/rgb_to_kelvin.spec.js} +1 -1
- package/src/core/color/{parseColor.js → parse_color.js} +4 -4
- package/src/core/color/parse_color.spec.js +18 -0
- package/src/core/color/rgb2uint24.js +3 -3
- package/src/core/color/sRGB/sRGB.spec.js +16 -0
- package/src/core/color/xyz/XYZ.spec.js +16 -0
- package/src/core/color/xyz/rgb_to_xyz.js +15 -0
- package/src/core/color/xyz/xyz_to_rgb.js +14 -0
- package/src/core/events/signal/Signal.js +5 -0
- package/src/core/events/signal/{signalAggregateByTimeWindow.js → signal_aggregate_by_time_window.js} +1 -1
- package/src/core/events/signal/{SignalUtils.js → signal_filter.js} +1 -2
- package/src/core/geom/2d/spline_bezier2_2d.js +26 -0
- package/src/core/geom/2d/spline_bezier2_2d.spec.js +16 -0
- package/src/core/geom/3d/SurfacePoint3.js +1 -1
- package/src/core/geom/3d/aabb/aabb3_compute_plane_side.js +1 -1
- package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.js +1 -1
- package/src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.js +1 -1
- package/src/core/geom/3d/compute_circle_bounding_box.js +1 -1
- package/src/core/geom/3d/cone/computeConeBoundingBox.js +1 -1
- package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +1 -1
- package/src/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +1 -1
- package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.js +1 -1
- package/src/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +1 -1
- package/src/core/geom/3d/normal/spherical/sphere_map_transform.js +1 -1
- package/src/core/geom/3d/plane/is_point_within_planes.js +1 -1
- package/src/core/geom/3d/plane/lerp_planes_to_array.js +1 -1
- package/src/core/geom/3d/plane/plane3_compute_convex_3_plane_intersection.js +1 -1
- package/src/core/geom/3d/plane/plane3_compute_line_segment_intersection.js +1 -1
- package/src/core/geom/3d/plane/plane3_compute_ray_intersection.js +1 -1
- package/src/core/geom/3d/plane/plane3_lerp.js +2 -2
- package/src/core/geom/3d/plane/plane3_projectPoint.js +1 -1
- package/src/core/geom/3d/plane/plane3_slerp.js +3 -3
- package/src/core/geom/3d/ray/ray_computeNearestPointToPoint.js +1 -1
- package/src/core/geom/3d/ray/ray_distance_to_point.js +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.js +3 -3
- package/src/core/geom/3d/shape/UnitCubeShape3D.js +1 -1
- package/src/core/geom/3d/shape/UnitSphereShape3D.js +1 -1
- package/src/core/geom/3d/sphere/sphere_intersects_ray.js +1 -1
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +6 -0
- package/src/core/geom/3d/tetrahedra/compute_bounding_simplex_3d.js +1 -1
- package/src/core/geom/3d/tetrahedra/compute_bounding_simplex_3d.spec.js +1 -1
- package/src/core/geom/3d/tetrahedra/compute_circumsphere.js +1 -1
- package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.js +1 -0
- package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.spec.js +10 -2
- package/src/core/geom/3d/topology/bounds/computeTriangleClusterNormalBoundingCone.js +1 -1
- package/src/core/geom/3d/topology/samples/sampleFloodFill.js +1 -1
- package/src/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +1 -1
- package/src/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +1 -1
- package/src/core/geom/3d/topology/simplify/tm_edge_collapse_is_degenerate_flip.js +2 -2
- package/src/core/geom/3d/topology/struct/TopoVertex.js +1 -1
- package/src/core/geom/3d/topology/util/compute_face_connection_weight.js +2 -2
- package/src/core/geom/3d/triangle/computeTrianglePlaneSide.js +1 -1
- package/src/core/geom/3d/triangle/computeTriangleRayIntersection.js +1 -1
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.js +1 -1
- package/src/core/geom/3d/v3_compute_triangle_normal.js +1 -1
- package/src/core/geom/Quaternion.js +1 -1
- package/src/core/geom/Vector3.js +7 -7
- package/src/core/geom/Vector3.spec.js +68 -1
- package/src/core/geom/mat2/m2_add.js +17 -0
- package/src/core/geom/mat2/m2_determinant.js +8 -0
- package/src/core/geom/mat2/m2_multiply.js +17 -0
- package/src/core/geom/mat2/m2_multiply_scalar.js +18 -0
- package/src/core/geom/mat2/m2_multiply_transposed.js +18 -0
- package/src/core/geom/mat2/m2_sub_transposed.js +17 -0
- package/src/{view → core/geom/mat3}/m3_cm_compose_transform.js +0 -29
- package/src/core/geom/mat3/m3_cm_extract_rotation.js +8 -0
- package/src/core/geom/mat3/m3_cm_from_translation.js +19 -0
- package/src/{view/multiplyMatrices3.js → core/geom/mat3/m3_multiply.js} +2 -2
- package/src/{view → core/geom/mat3}/m3_rm_compose_transform.js +0 -9
- package/src/core/geom/mat3/m3_rm_extract_scale.js +7 -0
- package/src/core/geom/{3d/vector/allocate_v3.js → vec3/v3_allocate.js} +1 -1
- package/src/core/geom/{v3_angle_between.js → vec3/v3_angle_between.js} +1 -1
- package/src/core/geom/vec3/v3_dot_array_array.js +20 -0
- package/src/core/geom/{v3_lerp.js → vec3/v3_lerp.js} +1 -1
- package/src/core/graph/SquareMatrix.js +26 -3
- package/src/core/graph/SquareMatrix.spec.js +52 -2
- package/src/core/math/clamp01.js +1 -0
- package/src/core/math/fract.js +3 -1
- package/src/core/math/inverseLerp.js +7 -5
- package/src/core/math/lerp.js +5 -5
- package/src/core/math/physics/spring/computeHookeForce.js +9 -0
- package/src/core/math/remap.js +19 -0
- package/src/core/math/remap.spec.js +15 -0
- package/src/core/math/smoothStep.spec.js +16 -0
- package/src/core/math/spline/spline_bezier2.js +13 -0
- package/src/core/math/spline/spline_bezier2.spec.js +13 -0
- package/src/core/model/object/compareValues.js +2 -2
- package/src/core/model/object/read_property.js +10 -2
- package/src/core/model/object/write_property.js +3 -23
- package/src/core/model/object/write_property.spec.js +26 -0
- package/src/core/primitives/numbers/number_pretty_print.spec.js +19 -0
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +2 -2
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +2 -2
- package/src/engine/ecs/systems/SteeringSystem.js +1 -1
- package/src/engine/ecs/terrain/ecs/splat/SplatMapOptimizerDebugger.js +1 -1
- package/src/engine/graphics/ecs/camera/Camera.js +1 -1
- package/src/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
- package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +3 -11
- package/src/engine/graphics/ecs/highlight/Highlight.js +20 -102
- package/src/engine/graphics/ecs/mesh/Mesh.js +12 -18
- package/src/engine/graphics/ecs/mesh/MeshSystem.js +41 -26
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +1 -1
- package/src/engine/graphics/ecs/path/tube/build/TubePathBuilder.js +1 -1
- package/src/engine/graphics/ecs/path/tube/build/makeTubeGeometry.js +1 -1
- package/src/engine/graphics/ecs/path/tube/build/make_cap.js +3 -3
- package/src/engine/graphics/ecs/path/tube/build/make_ring_vertices.js +1 -1
- package/src/engine/graphics/geometry/MikkT/InitTriInfo.js +5 -6
- package/src/engine/graphics/geometry/MikkT/MikkTSpace.js +3 -3
- package/src/engine/graphics/geometry/MikkT/NormalizeSafe.js +1 -2
- package/src/engine/graphics/geometry/MikkT/STSpace.js +3 -3
- package/src/engine/graphics/geometry/MikkT/v3_scale_dot_sub_normalize.js +2 -2
- package/src/engine/graphics/geometry/bvh/buffered/BVHGeometryRaycaster.js +1 -1
- package/src/engine/graphics/geometry/clipping/ClippedGeometry.js +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +102 -95
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.spec.js +25 -0
- package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +0 -35
- package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +39 -2
- package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +22 -6
- package/src/engine/graphics/render/forward_plus/LightManager.js +1 -1
- package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +2 -2
- package/src/engine/graphics/render/forward_plus/prototype/prototypeLightManager.js +3 -3
- package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +1 -1
- package/src/engine/graphics/render/layers/RenderLayerUtils.js +1 -1
- package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +3 -2
- package/src/engine/graphics/sh3/LightProbeVolume.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/PathTracer.js +2 -2
- package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +2 -2
- package/src/engine/graphics/sh3/path_tracer/random_in_hemisphere.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/ray_reflect.js +1 -1
- package/src/engine/graphics/sh3/sky/hosek/data.js +3744 -0
- package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js +10 -3786
- package/src/engine/graphics/texture/atlas/AbstractTextureAtlas.js +1 -1
- package/src/engine/graphics/texture/atlas/AtlasPatch.js +0 -1
- package/src/engine/graphics/texture/atlas/AtlasPatchFlag.js +8 -1
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.js +25 -0
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.spec.js +54 -0
- package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +101 -160
- package/src/engine/graphics/texture/atlas/TextureAtlas.js +18 -1
- package/src/engine/graphics/texture/sampler/sampler2d_ensure_uint8_RGBA.js +22 -0
- package/src/engine/graphics/util/projectSphere.js +1 -1
- package/src/engine/navigation/ecs/components/Path.js +1 -1
- package/src/engine/options/OptionGroup.js +10 -0
- package/src/engine/physics/mls-mpm/MLS_MPM.js +11 -106
- package/src/engine/reference/v2/Reference.js +6 -2
- package/src/engine/sound/ecs/emitter/SoundEmitter.js +7 -7
- package/src/engine/sound/ecs/emitter/SoundTrack.js +6 -6
- package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +1 -1
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +2 -4
- package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.js +2 -2
- package/src/generation/theme/ThemeEngine.js +2 -2
- package/src/generation/theme/ThemeEngine.spec.js +7 -0
- package/src/view/View.js +21 -13
- package/src/view/elements/ColorPickerView.js +2 -2
- package/src/view/minimap/gl/MarkerGL.js +20 -18
- package/src/view/minimap/gl/MinimapMarkersGL.js +2 -1
- package/editor/tools/FoliagePaintTool.js +0 -168
- package/editor/tools/engine/ToolStateMachine.js +0 -53
- package/src/core/NumberFormat.js +0 -4
- package/src/core/color/rgb2hsv.js +0 -47
- package/src/core/color/rgb_to_YCbCr_uint24.js +0 -16
- package/src/core/fsm/StateMachine.js +0 -440
- package/src/core/fsm/Transition.js +0 -65
- package/src/core/geom/Bezier.js +0 -24
- package/src/core/geom/Bezier.spec.js +0 -16
- package/src/core/math/spline/quadraticCurve.js +0 -11
- package/src/core/math/spline/quadraticCurve.spec.js +0 -13
- package/src/core/primitives/numbers/compareNumbers.js +0 -9
- package/src/engine/graphics/ecs/decal/Decal.js +0 -10
- package/src/engine/graphics/ecs/decal/DecalSystem.js +0 -99
- package/src/engine/graphics/ecs/decal/threejs/DecalGeometry.js +0 -298
- package/src/engine/graphics/ecs/trail/Trail.js +0 -83
- package/src/engine/graphics/ecs/trail/TrailMaterial.js +0 -67
- package/src/engine/graphics/ecs/trail/TrailMaterial2.js +0 -73
- package/src/engine/graphics/ecs/trail/TrailSystem.js +0 -162
- package/src/engine/graphics/ecs/water2/NodeWaterShader1.js +0 -213
- package/src/engine/graphics/ecs/water2/shader/JBWaterShader.js +0 -315
- package/src/engine/graphics/geometry/MikkT/Length.js +0 -10
- package/src/engine/graphics/texture/ImageLoader.js +0 -33
- package/src/engine/graphics/three/DDSLoader.js +0 -286
- package/src/engine/graphics/three/Water2.js +0 -343
- package/src/engine/physics/spring/computeHookeForce.js +0 -9
- package/src/engine/reference/v1/ReferenceManager.js +0 -124
- /package/src/core/color/{hex2rgb.spec.js → hex/hex2rgb.spec.js} +0 -0
- /package/src/core/color/{rgb2hex.spec.js → hex/rgb2hex.spec.js} +0 -0
- /package/src/core/color/{hsv2rgb.spec.js → hsv/hsv2rgb.spec.js} +0 -0
- /package/src/core/color/{rgb_to_kelvin.js → kelvin/rgb_to_kelvin.js} +0 -0
- /package/src/core/color/{linear_to_sRGB.js → sRGB/linear_to_sRGB.js} +0 -0
- /package/src/core/color/{sRGB_to_linear.js → sRGB/sRGB_to_linear.js} +0 -0
- /package/src/core/geom/{m3_determinant.js → mat3/m3_determinant.js} +0 -0
- /package/src/core/geom/{v3_distance.js → vec3/v3_distance.js} +0 -0
- /package/src/core/geom/{v3_distance_above_plane.js → vec3/v3_distance_above_plane.js} +0 -0
- /package/src/core/geom/{v3_distance_above_plane.spec.js → vec3/v3_distance_above_plane.spec.js} +0 -0
- /package/src/core/geom/{v3_distance_sqr.d.ts → vec3/v3_distance_sqr.d.ts} +0 -0
- /package/src/core/geom/{v3_distance_sqr.js → vec3/v3_distance_sqr.js} +0 -0
- /package/src/core/geom/{v3_dot.js → vec3/v3_dot.js} +0 -0
- /package/src/core/geom/{v3_length.js → vec3/v3_length.js} +0 -0
- /package/src/core/geom/{v3_length_sqr.js → vec3/v3_length_sqr.js} +0 -0
- /package/src/core/geom/{v3_slerp.js → vec3/v3_slerp.js} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { vec3 } from "gl-matrix";
|
|
2
|
-
import {
|
|
2
|
+
import { v3_allocate } from "../../../../core/geom/vec3/v3_allocate.js";
|
|
3
3
|
|
|
4
4
|
export class STSpace {
|
|
5
5
|
constructor() {
|
|
@@ -7,12 +7,12 @@ export class STSpace {
|
|
|
7
7
|
*
|
|
8
8
|
* @type {vec3|Float32Array}
|
|
9
9
|
*/
|
|
10
|
-
this.vOs =
|
|
10
|
+
this.vOs = v3_allocate();
|
|
11
11
|
/**
|
|
12
12
|
*
|
|
13
13
|
* @type {vec3|Float32Array}
|
|
14
14
|
*/
|
|
15
|
-
this.vOt =
|
|
15
|
+
this.vOt = v3_allocate();
|
|
16
16
|
|
|
17
17
|
this.fMagS = 0;
|
|
18
18
|
this.fMagT = 0;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { vec3 } from "gl-matrix";
|
|
2
|
-
import { v3_length } from "../../../../core/geom/v3_length.js";
|
|
3
|
-
import { v3_dot } from "../../../../core/geom/v3_dot.js";
|
|
2
|
+
import { v3_length } from "../../../../core/geom/vec3/v3_length.js";
|
|
3
|
+
import { v3_dot } from "../../../../core/geom/vec3/v3_dot.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* executes following formula: v1 - v0*( dot(v0,v1) )
|
|
@@ -4,7 +4,7 @@ import { Vector3 as ThreeVector3 } from 'three';
|
|
|
4
4
|
import { rayTriangleIntersection } from "../../../../../core/geom/3d/triangle/rayTriangleIntersection.js";
|
|
5
5
|
import { SurfacePoint3 } from "../../../../../core/geom/3d/SurfacePoint3.js";
|
|
6
6
|
import { assert } from "../../../../../core/assert.js";
|
|
7
|
-
import { v3_length } from "../../../../../core/geom/v3_length.js";
|
|
7
|
+
import { v3_length } from "../../../../../core/geom/vec3/v3_length.js";
|
|
8
8
|
import { ray3_array_apply_matrix4 } from "../../../../../core/geom/3d/ray/ray3_array_apply_matrix4.js";
|
|
9
9
|
import { mat4 } from "gl-matrix";
|
|
10
10
|
import { ray3_array_compose } from "../../../../../core/geom/3d/ray/ray3_array_compose.js";
|
|
@@ -3,7 +3,7 @@ import List from "../../../../../../core/collection/list/List.js";
|
|
|
3
3
|
import { lerp } from "../../../../../../core/math/lerp.js";
|
|
4
4
|
import { max2 } from "../../../../../../core/math/max2.js";
|
|
5
5
|
import { min2 } from "../../../../../../core/math/min2.js";
|
|
6
|
-
import { Box3, BufferGeometry, Frustum,
|
|
6
|
+
import { Box3, BufferGeometry, Frustum, Points, PointsMaterial } from 'three';
|
|
7
7
|
import { ParticlePool } from "./ParticlePool.js";
|
|
8
8
|
import { ParticleParameter } from "../parameter/ParticleParameter.js";
|
|
9
9
|
import { ParameterSet } from "../parameter/ParameterSet.js";
|
|
@@ -28,13 +28,13 @@ import {
|
|
|
28
28
|
PARTICLE_ATTRIBUTE_UV,
|
|
29
29
|
PARTICLE_ATTRIBUTE_VELOCITY
|
|
30
30
|
} from "./PARTICLE_ATTRIBUTES.js";
|
|
31
|
-
import { composeMatrix4 } from "../../../../util/composeMatrix4.js";
|
|
32
31
|
import { update_parameters } from "../simulator/update_parameters.js";
|
|
33
|
-
import { distance_to_camera } from "./distance_to_camera.js";
|
|
34
32
|
import { computeEmissionFunction } from "./computeEmissionFunction.js";
|
|
35
33
|
import { PARTICULAR_PARTICLE_SPECIFICATION } from "./PARTICULAR_PARTICLE_SPECIFICATION.js";
|
|
36
34
|
import { computeHashIntegerArray } from "../../../../../../core/collection/array/computeHashIntegerArray.js";
|
|
37
35
|
import { frustum_from_camera } from "../../../../ecs/camera/frustum_from_camera.js";
|
|
36
|
+
import { v3_dot_array_array } from "../../../../../../core/geom/vec3/v3_dot_array_array.js";
|
|
37
|
+
import { compose_matrix4_array } from "../../../../../../core/geom/3d/compose_matrix4_array.js";
|
|
38
38
|
|
|
39
39
|
const EMPTY_GEOMETRY = new BufferGeometry();
|
|
40
40
|
|
|
@@ -53,6 +53,8 @@ const SERIALIZABLE_FLAGS = ParticleEmitterFlag.PreWarm
|
|
|
53
53
|
*/
|
|
54
54
|
const corners = new Float64Array(24);
|
|
55
55
|
|
|
56
|
+
const scratch_near_plane_normal = new Float32Array(3);
|
|
57
|
+
|
|
56
58
|
/**
|
|
57
59
|
*
|
|
58
60
|
* @type {number[]}
|
|
@@ -81,16 +83,16 @@ function generateStandardParameterSet(parameters) {
|
|
|
81
83
|
}
|
|
82
84
|
|
|
83
85
|
|
|
84
|
-
const
|
|
86
|
+
const UINT16_MAX = 65535; // = 2^16 - 1
|
|
85
87
|
|
|
86
88
|
/**
|
|
87
89
|
*
|
|
88
|
-
* @param {AtlasPatch}
|
|
90
|
+
* @param {AtlasPatch} patch
|
|
89
91
|
* @param {ParticlePool} particles
|
|
90
92
|
* @param {number} ref
|
|
91
93
|
*/
|
|
92
|
-
function write_particle_patch_uv(
|
|
93
|
-
const uv =
|
|
94
|
+
function write_particle_patch_uv(patch, particles, ref) {
|
|
95
|
+
const uv = patch.uv;
|
|
94
96
|
|
|
95
97
|
const uv_position = uv.position;
|
|
96
98
|
|
|
@@ -105,96 +107,101 @@ function write_particle_patch_uv(atlasPatch, particles, ref) {
|
|
|
105
107
|
particles.writeAttributeVector4(
|
|
106
108
|
ref,
|
|
107
109
|
PARTICLE_ATTRIBUTE_UV,
|
|
108
|
-
u0 *
|
|
110
|
+
u0 * UINT16_MAX, v0 * UINT16_MAX, u1 * UINT16_MAX, v1 * UINT16_MAX
|
|
109
111
|
);
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
export class ParticleEmitter {
|
|
113
|
-
constructor() {
|
|
114
|
-
/**
|
|
115
|
-
* @type {ParameterSet}
|
|
116
|
-
*/
|
|
117
|
-
this.parameters = new ParameterSet();
|
|
118
|
-
generateStandardParameterSet(this.parameters);
|
|
119
115
|
|
|
116
|
+
/**
|
|
117
|
+
* @private
|
|
118
|
+
* @type {List<ParticleLayer>}
|
|
119
|
+
*/
|
|
120
|
+
layers = new List();
|
|
120
121
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
122
|
+
/**
|
|
123
|
+
*
|
|
124
|
+
* @type {Vector3}
|
|
125
|
+
*/
|
|
126
|
+
position = new Vector3(0, 0, 0);
|
|
127
|
+
scale = new Vector3(1, 1, 1);
|
|
128
|
+
rotation = new Quaternion(0, 0, 0, 1);
|
|
126
129
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
this.rotation = new Quaternion(0, 0, 0, 1);
|
|
130
|
+
/**
|
|
131
|
+
*
|
|
132
|
+
* @type {Vector3}
|
|
133
|
+
* @private
|
|
134
|
+
*/
|
|
135
|
+
__lastSpawnPosition = new Vector3(0, 0, 0);
|
|
134
136
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
137
|
+
/**
|
|
138
|
+
* How long has this emitter been sleeping for?
|
|
139
|
+
* This amount of time needs to be simulated when we wake the emitter up, but we can typically do it in a small number of large steps
|
|
140
|
+
* @type {number}
|
|
141
|
+
*/
|
|
142
|
+
sleepTime = 0;
|
|
141
143
|
|
|
142
|
-
|
|
144
|
+
/**
|
|
145
|
+
*
|
|
146
|
+
* @type {BlendingType|number}
|
|
147
|
+
*/
|
|
148
|
+
blendingMode = BlendingType.Normal;
|
|
143
149
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
150
|
+
/**
|
|
151
|
+
*
|
|
152
|
+
* @type {ParticlePool|null}
|
|
153
|
+
*/
|
|
154
|
+
particles = null;
|
|
149
155
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
156
|
+
/**
|
|
157
|
+
*
|
|
158
|
+
* @type {Object3D|null}
|
|
159
|
+
*/
|
|
160
|
+
mesh = null;
|
|
155
161
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
162
|
+
/**
|
|
163
|
+
*
|
|
164
|
+
* @type {LeafNode}
|
|
165
|
+
*/
|
|
166
|
+
bvhLeaf = new LeafNode(this, 0, 0, 0, 0, 0, 0);
|
|
161
167
|
|
|
168
|
+
/**
|
|
169
|
+
*
|
|
170
|
+
* @type {AABB3}
|
|
171
|
+
*/
|
|
172
|
+
particleBounds = new AABB3(Infinity, Infinity, Infinity, -Infinity, -Infinity, -Infinity);
|
|
162
173
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
174
|
+
/**
|
|
175
|
+
*
|
|
176
|
+
* @type {AABB3}
|
|
177
|
+
*/
|
|
178
|
+
emissionBounds = new AABB3(0, 0, 0, 0, 0, 0);
|
|
168
179
|
|
|
169
180
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
181
|
+
/**
|
|
182
|
+
* Bit Field of {@link ParticleEmitterFlag}
|
|
183
|
+
* @type {number}
|
|
184
|
+
*/
|
|
185
|
+
flags = ParticleEmitterFlag.DepthSorting | ParticleEmitterFlag.HashNeedUpdate | ParticleEmitterFlag.Emitting;
|
|
175
186
|
|
|
187
|
+
/**
|
|
188
|
+
*
|
|
189
|
+
* @type {number}
|
|
190
|
+
* @private
|
|
191
|
+
*/
|
|
192
|
+
__hash = 0;
|
|
193
|
+
|
|
194
|
+
constructor() {
|
|
176
195
|
/**
|
|
177
|
-
*
|
|
178
|
-
* @type {AABB3}
|
|
196
|
+
* @type {ParameterSet}
|
|
179
197
|
*/
|
|
180
|
-
this.
|
|
198
|
+
this.parameters = new ParameterSet();
|
|
199
|
+
generateStandardParameterSet(this.parameters);
|
|
200
|
+
|
|
181
201
|
|
|
182
202
|
this.position.onChanged.add(this.updateTransform, this);
|
|
183
203
|
this.scale.onChanged.add(this.updateTransform, this);
|
|
184
204
|
this.rotation.onChanged.add(this.updateTransform, this);
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* Bit Field of {@link ParticleEmitterFlag}
|
|
188
|
-
* @type {number}
|
|
189
|
-
*/
|
|
190
|
-
this.flags = ParticleEmitterFlag.DepthSorting | ParticleEmitterFlag.HashNeedUpdate | ParticleEmitterFlag.Emitting;
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
*
|
|
194
|
-
* @type {number}
|
|
195
|
-
* @private
|
|
196
|
-
*/
|
|
197
|
-
this.__hash = 0;
|
|
198
205
|
}
|
|
199
206
|
|
|
200
207
|
updateTransform() {
|
|
@@ -442,9 +449,7 @@ export class ParticleEmitter {
|
|
|
442
449
|
const rotation = this.rotation;
|
|
443
450
|
const scale = this.scale;
|
|
444
451
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
const m4 = matrix4.elements;
|
|
452
|
+
compose_matrix4_array(matrix4, position, rotation, scale);
|
|
448
453
|
|
|
449
454
|
for (let i = 0; i < numLayers; i++) {
|
|
450
455
|
const particleLayer = layers.get(i);
|
|
@@ -463,9 +468,9 @@ export class ParticleEmitter {
|
|
|
463
468
|
const z = corners[j + 2];
|
|
464
469
|
|
|
465
470
|
//apply matrix transform
|
|
466
|
-
const _x =
|
|
467
|
-
const _y =
|
|
468
|
-
const _z =
|
|
471
|
+
const _x = matrix4[0] * x + matrix4[4] * y + matrix4[8] * z + matrix4[12];
|
|
472
|
+
const _y = matrix4[1] * x + matrix4[5] * y + matrix4[9] * z + matrix4[13];
|
|
473
|
+
const _z = matrix4[2] * x + matrix4[6] * y + matrix4[10] * z + matrix4[14];
|
|
469
474
|
|
|
470
475
|
|
|
471
476
|
//update bounds
|
|
@@ -479,7 +484,7 @@ export class ParticleEmitter {
|
|
|
479
484
|
}
|
|
480
485
|
}
|
|
481
486
|
|
|
482
|
-
this.
|
|
487
|
+
this.emissionBounds.setBounds(
|
|
483
488
|
bounds_x0, bounds_y0, bounds_z0,
|
|
484
489
|
bounds_x1, bounds_y1, bounds_z1
|
|
485
490
|
);
|
|
@@ -534,7 +539,7 @@ export class ParticleEmitter {
|
|
|
534
539
|
this.computeParticleBounds();
|
|
535
540
|
}
|
|
536
541
|
|
|
537
|
-
const ebb = this.
|
|
542
|
+
const ebb = this.emissionBounds;
|
|
538
543
|
const pbb = this.particleBounds;
|
|
539
544
|
|
|
540
545
|
const bounds_x0 = min2(ebb.x0, pbb.x0);
|
|
@@ -732,6 +737,7 @@ export class ParticleEmitter {
|
|
|
732
737
|
assert.notNull(camera, 'camera');
|
|
733
738
|
|
|
734
739
|
//sort particles by distance from camera to ensure proper rendering order
|
|
740
|
+
// NOTE we don't use full distance calculation, but DOT product instead, as the final component is always the same and we only care about relative distance for comparison
|
|
735
741
|
|
|
736
742
|
/**
|
|
737
743
|
*
|
|
@@ -748,10 +754,11 @@ export class ParticleEmitter {
|
|
|
748
754
|
frustum_from_camera(camera, frustum);
|
|
749
755
|
const nearPlane = frustum.planes[0];
|
|
750
756
|
const nearPlaneNormal = nearPlane.normal;
|
|
757
|
+
nearPlaneNormal.toArray(scratch_near_plane_normal);
|
|
751
758
|
|
|
752
759
|
//Bind attribute array directly for faster access
|
|
753
760
|
const positionAttribute = particles.attributes[PARTICLE_ATTRIBUTE_POSITION];
|
|
754
|
-
const
|
|
761
|
+
const position_array = positionAttribute.array;
|
|
755
762
|
|
|
756
763
|
|
|
757
764
|
if (particleCount <= 1) {
|
|
@@ -777,18 +784,18 @@ export class ParticleEmitter {
|
|
|
777
784
|
i = left;
|
|
778
785
|
j = right;
|
|
779
786
|
|
|
780
|
-
const
|
|
787
|
+
const pivot_index = (left + right) >> 1;
|
|
781
788
|
|
|
782
|
-
const pivot =
|
|
789
|
+
const pivot = v3_dot_array_array(position_array, pivot_index * 3, scratch_near_plane_normal, 0);
|
|
783
790
|
|
|
784
791
|
/* partition */
|
|
785
792
|
while (i <= j) {
|
|
786
793
|
|
|
787
|
-
while (
|
|
794
|
+
while (v3_dot_array_array(position_array, i * 3, scratch_near_plane_normal, 0) > pivot) {
|
|
788
795
|
i++;
|
|
789
796
|
}
|
|
790
797
|
|
|
791
|
-
while (
|
|
798
|
+
while (v3_dot_array_array(position_array, j * 3, scratch_near_plane_normal, 0) < pivot) {
|
|
792
799
|
j--;
|
|
793
800
|
}
|
|
794
801
|
|
|
@@ -912,7 +919,7 @@ export class ParticleEmitter {
|
|
|
912
919
|
const emitter_position = this.position;
|
|
913
920
|
const last_spawn_position = this.__lastSpawnPosition;
|
|
914
921
|
|
|
915
|
-
|
|
922
|
+
compose_matrix4_array(matrix4, emitter_position, this.rotation, this.scale);
|
|
916
923
|
|
|
917
924
|
let time = -layer.timeSinceLastEmission;
|
|
918
925
|
|
|
@@ -935,13 +942,13 @@ export class ParticleEmitter {
|
|
|
935
942
|
|
|
936
943
|
if (this.getFlag(ParticleEmitterFlag.PositionChanged)) {
|
|
937
944
|
//compute position in between
|
|
938
|
-
matrix4
|
|
939
|
-
matrix4
|
|
940
|
-
matrix4
|
|
945
|
+
matrix4[12] = lerp(emitter_position.x, last_spawn_position.x, f);
|
|
946
|
+
matrix4[13] = lerp(emitter_position.y, last_spawn_position.y, f);
|
|
947
|
+
matrix4[14] = lerp(emitter_position.z, last_spawn_position.z, f);
|
|
941
948
|
}
|
|
942
949
|
|
|
943
950
|
//apply emitter transform
|
|
944
|
-
v3position.
|
|
951
|
+
v3position.applyMatrix4(matrix4);
|
|
945
952
|
|
|
946
953
|
|
|
947
954
|
//randomize initial age across time delta
|
|
@@ -1032,7 +1039,7 @@ export class ParticleEmitter {
|
|
|
1032
1039
|
const emissionFunction = computeEmissionFunction(layer.emissionFrom, layer.emissionShape);
|
|
1033
1040
|
|
|
1034
1041
|
//compute transform matrix of the emitter
|
|
1035
|
-
|
|
1042
|
+
compose_matrix4_array(matrix4, this.position, this.rotation, this.scale);
|
|
1036
1043
|
|
|
1037
1044
|
//pre-grow particle pool
|
|
1038
1045
|
particles.growCapacity(particles.capacity + count);
|
|
@@ -1052,7 +1059,7 @@ export class ParticleEmitter {
|
|
|
1052
1059
|
v3position.add(layer.position);
|
|
1053
1060
|
|
|
1054
1061
|
//apply emitter transform
|
|
1055
|
-
v3position.
|
|
1062
|
+
v3position.applyMatrix4(matrix4);
|
|
1056
1063
|
|
|
1057
1064
|
|
|
1058
1065
|
//randomize initial age across time delta
|
|
@@ -1212,7 +1219,7 @@ ParticleEmitter.Attributes = {
|
|
|
1212
1219
|
ParticleEmitter.SERIALIZABLE_FLAGS = SERIALIZABLE_FLAGS;
|
|
1213
1220
|
|
|
1214
1221
|
|
|
1215
|
-
const matrix4 = new
|
|
1222
|
+
const matrix4 = new Float32Array(16);
|
|
1216
1223
|
|
|
1217
1224
|
const defaultPointsMaterial = new PointsMaterial({ color: 0xFFFFFF });
|
|
1218
1225
|
|
|
@@ -73,3 +73,28 @@ test('BinaryBuffer serialization consistency', () => {
|
|
|
73
73
|
expect(actual.particleVelocityDirection.roughlyEquals(expected.particleVelocityDirection)).toBe(true);
|
|
74
74
|
expect(actual.particleSpeed.equals(expected.particleSpeed)).toBe(true);
|
|
75
75
|
});
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
test("hash - basics", () => {
|
|
79
|
+
const layer = new ParticleLayer();
|
|
80
|
+
|
|
81
|
+
const hash = layer.hash();
|
|
82
|
+
|
|
83
|
+
expect(layer.hash()).toEqual(hash); // consistency
|
|
84
|
+
expect(typeof hash).toBe("number");
|
|
85
|
+
expect(Number.isInteger(hash)).toBe(true);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
test("equals - basics", () => {
|
|
89
|
+
const a = new ParticleLayer();
|
|
90
|
+
|
|
91
|
+
expect(a.equals(a)).toBe(true);
|
|
92
|
+
|
|
93
|
+
const b = new ParticleLayer();
|
|
94
|
+
|
|
95
|
+
expect(a.equals(b)).toBe(true);
|
|
96
|
+
|
|
97
|
+
b.emissionRate++;
|
|
98
|
+
|
|
99
|
+
expect(a.equals(b)).toBe(false);
|
|
100
|
+
});
|
|
@@ -231,41 +231,6 @@ export class ParticlePool {
|
|
|
231
231
|
}
|
|
232
232
|
}
|
|
233
233
|
|
|
234
|
-
/**
|
|
235
|
-
*
|
|
236
|
-
* @param {AttributeSpec} spec
|
|
237
|
-
* @return {number}
|
|
238
|
-
* @private
|
|
239
|
-
*/
|
|
240
|
-
__compute_attribute_byte_size(spec) {
|
|
241
|
-
|
|
242
|
-
const item_size = spec.itemSize;
|
|
243
|
-
|
|
244
|
-
const TypedArrayConstructor = compute_typed_array_constructor_from_data_type(spec.type);
|
|
245
|
-
|
|
246
|
-
const element_byte_size = TypedArrayConstructor.BYTES_PER_ELEMENT;
|
|
247
|
-
|
|
248
|
-
return item_size * element_byte_size * this.capacity;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
*
|
|
253
|
-
* @return {number}
|
|
254
|
-
* @private
|
|
255
|
-
*/
|
|
256
|
-
__compute_attribute_byte_size_total() {
|
|
257
|
-
|
|
258
|
-
const spec_attributes = this.spec.attributes;
|
|
259
|
-
const l = spec_attributes.length;
|
|
260
|
-
|
|
261
|
-
let r = 0;
|
|
262
|
-
for (let i = 0; i < l; i++) {
|
|
263
|
-
r += this.__compute_attribute_byte_size(spec_attributes[i]);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
return r;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
234
|
build() {
|
|
270
235
|
const geometry = new BufferGeometry();
|
|
271
236
|
geometry.dynamic = true;
|
|
@@ -10,8 +10,8 @@ import { AttributeSpec } from "../../../../geometry/AttributeSpec.js";
|
|
|
10
10
|
function samplePool() {
|
|
11
11
|
const specification = new VertexDataSpec();
|
|
12
12
|
|
|
13
|
-
specification.add(AttributeSpec.fromJSON({name:'a', type:BinaryDataType.Float32, itemSize:1}));
|
|
14
|
-
specification.add(AttributeSpec.fromJSON({name:'b', type:BinaryDataType.Float32, itemSize:4}));
|
|
13
|
+
specification.add(AttributeSpec.fromJSON({ name: 'a', type: BinaryDataType.Float32, itemSize: 1 }));
|
|
14
|
+
specification.add(AttributeSpec.fromJSON({ name: 'b', type: BinaryDataType.Float32, itemSize: 4 }));
|
|
15
15
|
|
|
16
16
|
const pool = new ParticlePool(specification);
|
|
17
17
|
|
|
@@ -186,3 +186,40 @@ test('read/write scalar attribute', () => {
|
|
|
186
186
|
|
|
187
187
|
expect(pool.readAttributeScalar(1, 0)).toBe(42);
|
|
188
188
|
});
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
test("update on empty pool", () => {
|
|
192
|
+
|
|
193
|
+
const pool = samplePool();
|
|
194
|
+
|
|
195
|
+
expect(pool.size()).toBe(0);
|
|
196
|
+
|
|
197
|
+
pool.update();
|
|
198
|
+
|
|
199
|
+
expect(pool.size()).toBe(0);
|
|
200
|
+
|
|
201
|
+
pool.update();
|
|
202
|
+
|
|
203
|
+
expect(pool.size()).toBe(0);
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
test("swap", () => {
|
|
207
|
+
|
|
208
|
+
const pool = samplePool();
|
|
209
|
+
|
|
210
|
+
populatePool(pool, 2);
|
|
211
|
+
|
|
212
|
+
pool.writeAttributeScalar(0, 0, 17);
|
|
213
|
+
pool.writeAttributeScalar(1, 0, 23);
|
|
214
|
+
|
|
215
|
+
pool.swap(0, 1);
|
|
216
|
+
|
|
217
|
+
expect(pool.readAttributeScalar(0, 0)).toBe(23);
|
|
218
|
+
expect(pool.readAttributeScalar(1, 0)).toBe(17);
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
test("calling dispose on newly created instance should not throw", () => {
|
|
222
|
+
const pool = samplePool();
|
|
223
|
+
|
|
224
|
+
pool.dispose();
|
|
225
|
+
});
|
|
@@ -88,6 +88,12 @@ function buildDataTexture(
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
export class ShaderManager {
|
|
91
|
+
/**
|
|
92
|
+
*
|
|
93
|
+
* @type {Map<ParticleLayer, Reference<AtlasPatch>>}
|
|
94
|
+
*/
|
|
95
|
+
#sprite_references = new Map();
|
|
96
|
+
|
|
91
97
|
/**
|
|
92
98
|
*
|
|
93
99
|
* @param {AssetManager} assetManager
|
|
@@ -107,7 +113,6 @@ export class ShaderManager {
|
|
|
107
113
|
* @type {ManagedAtlas}
|
|
108
114
|
*/
|
|
109
115
|
this.spriteAtlas = new ManagedAtlas(assetManager);
|
|
110
|
-
this.spriteAtlas.autoUpdate = false;
|
|
111
116
|
|
|
112
117
|
/**
|
|
113
118
|
*
|
|
@@ -275,9 +280,12 @@ export class ShaderManager {
|
|
|
275
280
|
|
|
276
281
|
const patchPromise = spriteAtlas.acquire(layer.imageURL);
|
|
277
282
|
|
|
278
|
-
patchPromise.then(
|
|
279
|
-
|
|
280
|
-
|
|
283
|
+
patchPromise.then(ref => {
|
|
284
|
+
this.#sprite_references.set(layer, ref);
|
|
285
|
+
layer.setAtlasPatch(ref.getValue());
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
patchPromise.catch((e) => {
|
|
281
289
|
console.warn(`Failed to load sprite '${layer.imageURL}':`, e);
|
|
282
290
|
});
|
|
283
291
|
}
|
|
@@ -349,7 +357,7 @@ export class ShaderManager {
|
|
|
349
357
|
const entry = this.materialMap.get(emitter);
|
|
350
358
|
|
|
351
359
|
if (entry === undefined) {
|
|
352
|
-
console.error(`Attempted to
|
|
360
|
+
console.error(`Attempted to deregister emitter that was not registered (not found in materialMap). Request ignored.`, emitter);
|
|
353
361
|
return;
|
|
354
362
|
}
|
|
355
363
|
|
|
@@ -363,7 +371,15 @@ export class ShaderManager {
|
|
|
363
371
|
const layer_count = particle_layers.length;
|
|
364
372
|
for (let i = 0; i < layer_count; i++) {
|
|
365
373
|
const layer = particle_layers.get(i);
|
|
366
|
-
|
|
374
|
+
|
|
375
|
+
// TODO deal with the case where we remove the layer before sprite is loaded
|
|
376
|
+
const ref = this.#sprite_references.get(layer);
|
|
377
|
+
|
|
378
|
+
if (ref !== undefined) {
|
|
379
|
+
ref.release();
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
layer.setAtlasPatch(null); // clear patch
|
|
367
383
|
}
|
|
368
384
|
|
|
369
385
|
if (entry.count <= 0) {
|
|
@@ -37,7 +37,7 @@ import { writeSample2DDataToDataTexture } from "../../texture/sampler/writeSampl
|
|
|
37
37
|
import { Decal } from "./model/Decal.js";
|
|
38
38
|
import { ReferencedTextureAtlas } from "../../texture/atlas/ReferencedTextureAtlas.js";
|
|
39
39
|
import { v3_morton_encode_transformed } from "../../../../core/geom/3d/morton/v3_morton_encode_transformed.js";
|
|
40
|
-
import { v3_distance } from "../../../../core/geom/v3_distance.js";
|
|
40
|
+
import { v3_distance } from "../../../../core/geom/vec3/v3_distance.js";
|
|
41
41
|
import { array_copy } from "../../../../core/collection/array/array_copy.js";
|
|
42
42
|
import { arrayQuickSort } from "../../../../core/collection/array/arrayQuickSort.js";
|
|
43
43
|
import { frustum_from_camera } from "../../ecs/camera/frustum_from_camera.js";
|
|
@@ -62,7 +62,7 @@ import { OrbitingBehavior } from "../../../../../../../model/game/util/behavior/
|
|
|
62
62
|
import { BehaviorComponent } from "../../../../intelligence/behavior/ecs/BehaviorComponent.js";
|
|
63
63
|
import { Light } from "../../../ecs/light/Light.js";
|
|
64
64
|
import { LightType } from "../../../ecs/light/LightType.js";
|
|
65
|
-
import {
|
|
65
|
+
import { parse_color } from "../../../../../core/color/parse_color.js";
|
|
66
66
|
import Renderable from "../../../../ecs/renderable/Renderable.js";
|
|
67
67
|
import { makeHelperSphereGeometry } from "../../../../../../editor/process/symbolic/makeHelperSphereGeometry.js";
|
|
68
68
|
import TopDownCameraController from "../../../ecs/camera/topdown/TopDownCameraController.js";
|
|
@@ -197,7 +197,7 @@ function makeLight(position, radius, color, intensity = 1) {
|
|
|
197
197
|
light.color.fromUint(color);
|
|
198
198
|
} else {
|
|
199
199
|
|
|
200
|
-
const c =
|
|
200
|
+
const c = parse_color(color);
|
|
201
201
|
|
|
202
202
|
light.color.setRGB(c[0] / 255, c[1] / 255, c[2] / 255);
|
|
203
203
|
}
|
|
@@ -25,7 +25,7 @@ import { MouseEvents } from "../../../../input/devices/events/MouseEvents.js";
|
|
|
25
25
|
import { RingBuffer } from "../../../../../core/collection/RingBuffer.js";
|
|
26
26
|
import { query_bvh_frustum_from_objects } from "../query/query_bvh_frustum_from_objects.js";
|
|
27
27
|
import { FPlusDebugMaterial } from "../materials/FPlusDebugMaterial.js";
|
|
28
|
-
import {
|
|
28
|
+
import { parse_color } from "../../../../../core/color/parse_color.js";
|
|
29
29
|
import { buildLightClusterWidget } from "../debug/buildLightClusterWidget.js";
|
|
30
30
|
import domify from "../../../../../view/DOM.js";
|
|
31
31
|
import { createScreenGrid } from "../debug/createScreenGrid.js";
|
|
@@ -237,7 +237,7 @@ function addSpotLight(position, direction, color, distance = 1, angle = 1, penum
|
|
|
237
237
|
light.color.fromUint(color);
|
|
238
238
|
} else {
|
|
239
239
|
|
|
240
|
-
const c =
|
|
240
|
+
const c = parse_color(color);
|
|
241
241
|
|
|
242
242
|
light.color.setRGB(c[0] / 255, c[1] / 255, c[2] / 255);
|
|
243
243
|
}
|
|
@@ -281,7 +281,7 @@ function addPointLight({
|
|
|
281
281
|
light.color.fromUint(color);
|
|
282
282
|
} else {
|
|
283
283
|
|
|
284
|
-
const c =
|
|
284
|
+
const c = parse_color(color);
|
|
285
285
|
|
|
286
286
|
light.color.setRGB(c[0] / 255, c[1] / 255, c[2] / 255);
|
|
287
287
|
}
|
package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { v3_distance_sqr } from "../../../../../core/geom/v3_distance_sqr.js";
|
|
1
|
+
import { v3_distance_sqr } from "../../../../../core/geom/vec3/v3_distance_sqr.js";
|
|
2
2
|
import { biplanar_edge_mapping, triplanar_corner_mapping } from "./cube_mapping.js";
|
|
3
3
|
import {
|
|
4
4
|
line3_computeSegmentPointDistance_sqr
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { v3_distance_above_plane } from "../../../../core/geom/v3_distance_above_plane.js";
|
|
1
|
+
import { v3_distance_above_plane } from "../../../../core/geom/vec3/v3_distance_above_plane.js";
|
|
2
2
|
import {
|
|
3
3
|
plane3_three_compute_convex_3_plane_intersection
|
|
4
4
|
} from "../../../../core/geom/3d/plane/plane3_three_compute_convex_3_plane_intersection.js";
|