@babylonjs/core 9.10.1 → 9.12.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/Actions/actionManager.d.ts +1 -1
- package/Actions/actionManager.js +8 -5
- package/Actions/actionManager.js.map +1 -1
- package/Animations/animatable.core.d.ts +1 -1
- package/Animations/animatable.core.js +2 -2
- package/Animations/animatable.core.js.map +1 -1
- package/Animations/animationPropertiesOverride.js +1 -1
- package/Animations/animationPropertiesOverride.js.map +1 -1
- package/Animations/animatorAvatar.d.ts +2 -2
- package/Animations/animatorAvatar.js +3 -3
- package/Animations/animatorAvatar.js.map +1 -1
- package/Animations/pathCursor.d.ts +1 -1
- package/Animations/pathCursor.js +1 -1
- package/Animations/pathCursor.js.map +1 -1
- package/Animations/runtimeAnimation.d.ts +1 -1
- package/Animations/runtimeAnimation.js +2 -2
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/analyser.js +1 -1
- package/Audio/analyser.js.map +1 -1
- package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.js +1 -1
- package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.js.map +1 -1
- package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.d.ts +2 -0
- package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.d.ts +13 -3
- package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.js +16 -0
- package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.d.ts +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.d.ts +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/audioAnalyzer.d.ts +4 -0
- package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js +22 -0
- package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js.map +1 -1
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.d.ts +1 -1
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js +1 -1
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js.map +1 -1
- package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.d.ts +6 -0
- package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js +22 -5
- package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js.map +1 -1
- package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js +1 -1
- package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js.map +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.js +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/BakedVertexAnimation/vertexAnimationBaker.js +1 -1
- package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -1
- package/Behaviors/Cameras/bouncingBehavior.js +1 -1
- package/Behaviors/Cameras/bouncingBehavior.js.map +1 -1
- package/Behaviors/Cameras/framingBehavior.d.ts +1 -1
- package/Behaviors/Cameras/framingBehavior.js +2 -2
- package/Behaviors/Cameras/framingBehavior.js.map +1 -1
- package/Behaviors/Cameras/interpolatingBehavior.d.ts +13 -1
- package/Behaviors/Cameras/interpolatingBehavior.js +13 -1
- package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -1
- package/Behaviors/Meshes/attachToBoxBehavior.js +1 -1
- package/Behaviors/Meshes/attachToBoxBehavior.js.map +1 -1
- package/Behaviors/Meshes/baseSixDofDragBehavior.d.ts +3 -3
- package/Behaviors/Meshes/baseSixDofDragBehavior.js +4 -4
- package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +1 -1
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/handConstraintBehavior.js +2 -2
- package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
- package/Behaviors/Meshes/multiPointerScaleBehavior.js +1 -1
- package/Behaviors/Meshes/multiPointerScaleBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.d.ts +3 -3
- package/Behaviors/Meshes/pointerDragBehavior.js +5 -5
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Behaviors/Meshes/sixDofDragBehavior.d.ts +1 -1
- package/Behaviors/Meshes/sixDofDragBehavior.js +2 -2
- package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
- package/Behaviors/Meshes/surfaceMagnetismBehavior.js +1 -1
- package/Behaviors/Meshes/surfaceMagnetismBehavior.js.map +1 -1
- package/Bones/boneIKController.d.ts +1 -1
- package/Bones/boneIKController.js +1 -1
- package/Bones/boneIKController.js.map +1 -1
- package/Bones/boneLookController.d.ts +1 -1
- package/Bones/boneLookController.js +1 -1
- package/Bones/boneLookController.js.map +1 -1
- package/Bones/skeleton.d.ts +2 -2
- package/Bones/skeleton.functions.d.ts +1 -1
- package/Bones/skeleton.functions.js +3 -3
- package/Bones/skeleton.functions.js.map +1 -1
- package/Bones/skeleton.js +3 -4
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/buffer.align.pure.js +6 -0
- package/Buffers/buffer.align.pure.js.map +1 -1
- package/Buffers/buffer.nonFloatVertexBuffers.js +2 -1
- package/Buffers/buffer.nonFloatVertexBuffers.js.map +1 -1
- package/Buffers/buffer.pure.d.ts +8 -0
- package/Buffers/buffer.pure.js +31 -2
- package/Buffers/buffer.pure.js.map +1 -1
- package/Buffers/bufferUtils.js +17 -5
- package/Buffers/bufferUtils.js.map +1 -1
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js +1 -1
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -2
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.js +2 -2
- package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraMouseInput.js +2 -2
- package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.js +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraGamepadInput.js +1 -1
- package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +2 -2
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.js +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraTouchInput.js +2 -2
- package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraKeyboardInput.js +1 -1
- package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
- package/Cameras/Limits/geospatialLimits.d.ts +1 -1
- package/Cameras/Limits/geospatialLimits.js +1 -1
- package/Cameras/Limits/geospatialLimits.js.map +1 -1
- package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js +2 -2
- package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js.map +1 -1
- package/Cameras/RigModes/stereoscopicRigMode.d.ts +1 -1
- package/Cameras/RigModes/stereoscopicRigMode.js +3 -3
- package/Cameras/RigModes/stereoscopicRigMode.js.map +1 -1
- package/Cameras/RigModes/vrRigMode.js +2 -2
- package/Cameras/RigModes/vrRigMode.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +3 -3
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +5 -5
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrCameraMetrics.d.ts +1 -1
- package/Cameras/VR/vrCameraMetrics.js +1 -1
- package/Cameras/VR/vrCameraMetrics.js.map +1 -1
- package/Cameras/cameraInputsManager.d.ts +1 -1
- package/Cameras/cameraInputsManager.js +1 -1
- package/Cameras/cameraInputsManager.js.map +1 -1
- package/Collisions/collider.d.ts +1 -1
- package/Collisions/collider.js +1 -1
- package/Collisions/collider.js.map +1 -1
- package/Collisions/gpuPicker.d.ts +1 -1
- package/Collisions/gpuPicker.js +5 -5
- package/Collisions/gpuPicker.js.map +1 -1
- package/Collisions/meshCollisionData.d.ts +1 -1
- package/Collisions/meshCollisionData.js +1 -1
- package/Collisions/meshCollisionData.js.map +1 -1
- package/Collisions/pickingInfo.d.ts +1 -1
- package/Collisions/pickingInfo.js +2 -2
- package/Collisions/pickingInfo.js.map +1 -1
- package/Compute/computeEffect.d.ts +6 -0
- package/Compute/computeEffect.js +3 -0
- package/Compute/computeEffect.js.map +1 -1
- package/Compute/computeShader.pure.d.ts +4 -0
- package/Compute/computeShader.pure.js +1 -0
- package/Compute/computeShader.pure.js.map +1 -1
- package/Culling/Octrees/octreeBlock.d.ts +1 -1
- package/Culling/Octrees/octreeBlock.js +1 -1
- package/Culling/Octrees/octreeBlock.js.map +1 -1
- package/Culling/boundingBox.d.ts +1 -1
- package/Culling/boundingBox.js +1 -1
- package/Culling/boundingBox.js.map +1 -1
- package/Culling/boundingInfo.d.ts +1 -1
- package/Culling/boundingInfo.js +1 -1
- package/Culling/boundingInfo.js.map +1 -1
- package/Culling/boundingSphere.d.ts +1 -1
- package/Culling/boundingSphere.js +1 -1
- package/Culling/boundingSphere.js.map +1 -1
- package/Culling/ray.core.d.ts +1 -1
- package/Culling/ray.core.js +1 -1
- package/Culling/ray.core.js.map +1 -1
- package/Debug/axesViewer.d.ts +1 -1
- package/Debug/axesViewer.js +3 -3
- package/Debug/axesViewer.js.map +1 -1
- package/Debug/boneAxesViewer.d.ts +1 -1
- package/Debug/boneAxesViewer.js +1 -1
- package/Debug/boneAxesViewer.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.d.ts +1 -1
- package/Debug/directionalLightFrustumViewer.js +6 -6
- package/Debug/directionalLightFrustumViewer.js.map +1 -1
- package/Debug/rayHelper.d.ts +1 -1
- package/Debug/rayHelper.js +2 -2
- package/Debug/rayHelper.js.map +1 -1
- package/Debug/skeletonViewer.d.ts +2 -2
- package/Debug/skeletonViewer.js +10 -10
- package/Debug/skeletonViewer.js.map +1 -1
- package/DeviceInput/internalDeviceSourceManager.d.ts +1 -1
- package/DeviceInput/internalDeviceSourceManager.js +0 -1
- package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
- package/DeviceInput/webDeviceInputSystem.js +1 -1
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.views.d.ts +1 -1
- package/Engines/Extensions/engine.views.js +1 -1
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Native/nativeHelpers.js +4 -1
- package/Engines/Native/nativeHelpers.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +10 -1
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.pure.js +154 -2
- package/Engines/WebGPU/Extensions/engine.computeShader.pure.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +11 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuComputeContext.d.ts +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +7 -1
- package/Engines/abstractEngine.pure.js +34 -4
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +4 -0
- package/Engines/constants.js +4 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.pure.d.ts +0 -7
- package/Engines/engine.pure.js +0 -34
- package/Engines/engine.pure.js.map +1 -1
- package/Engines/engineFactory.d.ts +2 -2
- package/Engines/engineFactory.js +3 -3
- package/Engines/engineFactory.js.map +1 -1
- package/Engines/thinNativeEngine.pure.js +15 -8
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Events/pointerEvents.d.ts +1 -1
- package/Events/pointerEvents.js +1 -1
- package/Events/pointerEvents.js.map +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphCodeExecutionBlock.js +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphCodeExecutionBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.d.ts +1 -1
- package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js +1 -1
- package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.js +1 -1
- package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.d.ts +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js +3 -3
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js.map +1 -1
- package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +1 -1
- package/FlowGraph/CustomTypes/flowGraphMatrix.js +1 -1
- package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
- package/FlowGraph/flowGraphBlock.d.ts +1 -1
- package/FlowGraph/flowGraphBlock.js +1 -1
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphExecutionBlock.d.ts +1 -1
- package/FlowGraph/flowGraphExecutionBlock.js +1 -1
- package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
- package/FlowGraph/flowGraphMath.d.ts +1 -1
- package/FlowGraph/flowGraphMath.js +1 -1
- package/FlowGraph/flowGraphMath.js.map +1 -1
- package/FlowGraph/flowGraphParser.js +1 -1
- package/FlowGraph/flowGraphParser.js.map +1 -1
- package/FlowGraph/flowGraphPathConverterComponent.d.ts +1 -1
- package/FlowGraph/flowGraphPathConverterComponent.js +2 -2
- package/FlowGraph/flowGraphPathConverterComponent.js.map +1 -1
- package/FlowGraph/flowGraphValidator.js.map +1 -1
- package/FlowGraph/serialization.js +4 -4
- package/FlowGraph/serialization.js.map +1 -1
- package/FlowGraph/utils.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.d.ts +2 -2
- package/FrameGraph/Node/nodeRenderGraph.js +7 -7
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.d.ts +30 -0
- package/FrameGraph/Tasks/Layers/baseLayerTask.js +28 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/computeShaderTask.d.ts +2 -2
- package/FrameGraph/Tasks/Misc/computeShaderTask.js +2 -2
- package/FrameGraph/Tasks/Misc/computeShaderTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.d.ts +1 -1
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +2 -2
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/blurTask.d.ts +7 -0
- package/FrameGraph/Tasks/PostProcesses/blurTask.js +8 -1
- package/FrameGraph/Tasks/PostProcesses/blurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +2 -2
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +3 -3
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +2 -2
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +6 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +14 -5
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js +2 -2
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js +2 -2
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +7 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +7 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.js +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.js +1 -1
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.d.ts +1 -1
- package/FrameGraph/frameGraphTextureManager.js +1 -1
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/Gamepads/gamepadManager.js +1 -1
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Gizmos/axisDragGizmo.d.ts +5 -5
- package/Gizmos/axisDragGizmo.js +6 -6
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.d.ts +4 -4
- package/Gizmos/axisScaleGizmo.js +6 -6
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.d.ts +5 -5
- package/Gizmos/boundingBoxGizmo.js +7 -7
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.d.ts +3 -3
- package/Gizmos/cameraGizmo.js +7 -7
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/gizmo.d.ts +2 -2
- package/Gizmos/gizmo.js +3 -3
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.d.ts +2 -2
- package/Gizmos/gizmoManager.js +2 -2
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/lightGizmo.d.ts +4 -4
- package/Gizmos/lightGizmo.js +11 -11
- package/Gizmos/lightGizmo.js.map +1 -1
- package/Gizmos/planeDragGizmo.d.ts +4 -4
- package/Gizmos/planeDragGizmo.js +5 -5
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.d.ts +1 -1
- package/Gizmos/positionGizmo.js +2 -2
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.d.ts +3 -3
- package/Gizmos/rotationGizmo.js +3 -3
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.d.ts +2 -2
- package/Gizmos/scaleGizmo.js +4 -4
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Gizmos/spatialAudioGizmo.d.ts +2 -2
- package/Gizmos/spatialAudioGizmo.js +6 -6
- package/Gizmos/spatialAudioGizmo.js.map +1 -1
- package/Helpers/environmentHelper.d.ts +6 -6
- package/Helpers/environmentHelper.js +12 -12
- package/Helpers/environmentHelper.js.map +1 -1
- package/Helpers/materialConversionHelper.d.ts +1 -1
- package/Helpers/materialConversionHelper.js +1 -1
- package/Helpers/materialConversionHelper.js.map +1 -1
- package/Helpers/photoDome.d.ts +1 -1
- package/Helpers/photoDome.js +1 -1
- package/Helpers/photoDome.js.map +1 -1
- package/Helpers/textureDome.d.ts +4 -4
- package/Helpers/textureDome.js +6 -6
- package/Helpers/textureDome.js.map +1 -1
- package/Helpers/videoDome.d.ts +1 -1
- package/Helpers/videoDome.js +2 -2
- package/Helpers/videoDome.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +1 -1
- package/Inputs/scene.inputManager.js +1 -1
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Instrumentation/sceneInstrumentation.js +1 -1
- package/Instrumentation/sceneInstrumentation.js.map +1 -1
- package/Layers/effectLayer.d.ts +1 -1
- package/Layers/effectLayer.js +3 -3
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/layer.d.ts +2 -2
- package/Layers/layer.js +4 -4
- package/Layers/layer.js.map +1 -1
- package/Layers/thinEffectLayer.d.ts +2 -2
- package/Layers/thinEffectLayer.js +3 -3
- package/Layers/thinEffectLayer.js.map +1 -1
- package/Layers/thinGlowLayer.d.ts +1 -1
- package/Layers/thinGlowLayer.js +3 -3
- package/Layers/thinGlowLayer.js.map +1 -1
- package/Layers/thinHighlightLayer.d.ts +1 -1
- package/Layers/thinHighlightLayer.js +3 -3
- package/Layers/thinHighlightLayer.js.map +1 -1
- package/Layers/thinSelectionOutlineLayer.d.ts +1 -1
- package/Layers/thinSelectionOutlineLayer.js +3 -3
- package/Layers/thinSelectionOutlineLayer.js.map +1 -1
- package/Legacy/legacy.js +12 -1
- package/Legacy/legacy.js.map +1 -1
- package/LensFlares/lensFlare.d.ts +2 -2
- package/LensFlares/lensFlare.js +3 -3
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.d.ts +1 -1
- package/LensFlares/lensFlareSystem.js +6 -6
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/LTC/ltcTextureTool.js +1 -1
- package/Lights/LTC/ltcTextureTool.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.d.ts +1 -285
- package/Lights/Shadows/cascadedShadowGenerator.js +3 -857
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.d.ts +290 -0
- package/Lights/Shadows/cascadedShadowGenerator.pure.js +868 -0
- package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -0
- package/Lights/Shadows/pure.d.ts +1 -0
- package/Lights/Shadows/pure.js +1 -0
- package/Lights/Shadows/pure.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +3 -3
- package/Lights/Shadows/shadowGenerator.js +7 -7
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/areaLight.d.ts +1 -1
- package/Lights/areaLight.js +0 -1
- package/Lights/areaLight.js.map +1 -1
- package/Lights/light.d.ts +2 -2
- package/Lights/light.js +2 -2
- package/Lights/light.js.map +1 -1
- package/Lights/shadowLight.d.ts +1 -1
- package/Lights/shadowLight.js +1 -1
- package/Lights/shadowLight.js.map +1 -1
- package/Loading/sceneLoader.d.ts +2 -2
- package/Loading/sceneLoader.js +3 -3
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/GreasedLine/greasedLineMaterialDefaults.d.ts +1 -1
- package/Materials/GreasedLine/greasedLineMaterialDefaults.js +1 -1
- package/Materials/GreasedLine/greasedLineMaterialDefaults.js.map +1 -1
- package/Materials/GreasedLine/greasedLineSimpleMaterial.d.ts +3 -3
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js +3 -3
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +6 -6
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
- package/Materials/Node/nodeMaterial.pure.d.ts +12 -0
- package/Materials/Node/nodeMaterial.pure.js +68 -13
- package/Materials/Node/nodeMaterial.pure.js.map +1 -1
- package/Materials/Node/nodeMaterialDefault.js +14 -14
- package/Materials/Node/nodeMaterialDefault.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.js +19 -4
- package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +40 -2
- package/Materials/PBR/pbrAnisotropicConfiguration.js +41 -3
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.d.ts +5 -1
- package/Materials/PBR/pbrBRDFConfiguration.js +5 -1
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +2 -2
- package/Materials/PBR/pbrBaseSimpleMaterial.js +2 -2
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.d.ts +42 -2
- package/Materials/PBR/pbrClearCoatConfiguration.js +42 -2
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.d.ts +38 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js +38 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrMaterial.pure.d.ts +6 -0
- package/Materials/PBR/pbrMaterial.pure.js +8 -0
- package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.d.ts +41 -2
- package/Materials/PBR/pbrSheenConfiguration.js +41 -2
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +41 -2
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +42 -3
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/Filtering/hdrFiltering.js +1 -1
- package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +1 -1
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +2 -2
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
- package/Materials/Textures/Loaders/EXR/exrLoader.core.d.ts +1 -1
- package/Materials/Textures/Loaders/EXR/exrLoader.core.js +5 -109
- package/Materials/Textures/Loaders/EXR/exrLoader.core.js.map +1 -1
- package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js +1 -1
- package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js.map +1 -1
- package/Materials/Textures/Loaders/basisTextureLoader.js +2 -2
- package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.js +3 -1
- package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +11 -2
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
- package/Materials/Textures/Packer/packer.d.ts +1 -1
- package/Materials/Textures/Packer/packer.js +6 -6
- package/Materials/Textures/Packer/packer.js.map +1 -1
- package/Materials/Textures/Procedurals/customProceduralTexture.d.ts +2 -2
- package/Materials/Textures/Procedurals/customProceduralTexture.js +4 -4
- package/Materials/Textures/Procedurals/customProceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/noiseProceduralTexture.pure.js +17 -5
- package/Materials/Textures/Procedurals/noiseProceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js +4 -1
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js +1 -1
- package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js.map +1 -1
- package/Materials/Textures/prePassRenderTarget.d.ts +1 -1
- package/Materials/Textures/prePassRenderTarget.js +1 -1
- package/Materials/Textures/prePassRenderTarget.js.map +1 -1
- package/Materials/Textures/rawCubeTexture.d.ts +1 -1
- package/Materials/Textures/rawCubeTexture.js +2 -2
- package/Materials/Textures/rawCubeTexture.js.map +1 -1
- package/Materials/Textures/rawTexture.d.ts +1 -1
- package/Materials/Textures/rawTexture.js +1 -1
- package/Materials/Textures/rawTexture.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.d.ts +1 -1
- package/Materials/Textures/rawTexture2DArray.js +1 -1
- package/Materials/Textures/rawTexture2DArray.js.map +1 -1
- package/Materials/Textures/rawTexture3D.d.ts +1 -1
- package/Materials/Textures/rawTexture3D.js +1 -1
- package/Materials/Textures/rawTexture3D.js.map +1 -1
- package/Materials/Textures/refractionTexture.d.ts +1 -1
- package/Materials/Textures/refractionTexture.js +1 -1
- package/Materials/Textures/refractionTexture.js.map +1 -1
- package/Materials/Textures/textureMerger.d.ts +1 -1
- package/Materials/Textures/textureMerger.js +1 -1
- package/Materials/Textures/textureMerger.js.map +1 -1
- package/Materials/Textures/textureProcessor.d.ts +1 -1
- package/Materials/Textures/textureProcessor.js +2 -2
- package/Materials/Textures/textureProcessor.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.d.ts +4 -4
- package/Materials/Textures/thinRenderTargetTexture.js +2 -2
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/clipPlaneMaterialHelper.js +1 -1
- package/Materials/clipPlaneMaterialHelper.js.map +1 -1
- package/Materials/effect.pure.d.ts +2 -2
- package/Materials/effect.pure.js +12 -6
- package/Materials/effect.pure.js.map +1 -1
- package/Materials/effectRenderer.pure.js +4 -2
- package/Materials/effectRenderer.pure.js.map +1 -1
- package/Materials/floatingOriginMatrixOverrides.d.ts +1 -1
- package/Materials/floatingOriginMatrixOverrides.js +1 -1
- package/Materials/floatingOriginMatrixOverrides.js.map +1 -1
- package/Materials/material.detailMapConfiguration.d.ts +39 -1
- package/Materials/material.detailMapConfiguration.js +39 -1
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/materialHelper.functions.js +45 -1
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.d.ts +1 -1
- package/Materials/materialHelper.geometryrendering.js +1 -1
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/materialPluginFactoryExport.js +2 -2
- package/Materials/materialPluginFactoryExport.js.map +1 -1
- package/Materials/meshDebugPluginMaterial.pure.js +15 -13
- package/Materials/meshDebugPluginMaterial.pure.js.map +1 -1
- package/Materials/pushMaterial.d.ts +7 -1
- package/Materials/pushMaterial.js +7 -1
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/uniformBuffer.js +1 -1
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/math.axis.d.ts +1 -1
- package/Maths/math.axis.js +1 -1
- package/Maths/math.axis.js.map +1 -1
- package/Maths/math.d.ts +2 -2
- package/Maths/math.functions.d.ts +1 -1
- package/Maths/math.functions.js +1 -1
- package/Maths/math.functions.js.map +1 -1
- package/Maths/math.isovector.d.ts +1 -1
- package/Maths/math.isovector.js +1 -1
- package/Maths/math.isovector.js.map +1 -1
- package/Maths/math.js +2 -2
- package/Maths/math.js.map +1 -1
- package/Maths/math.path.d.ts +1 -1
- package/Maths/math.path.js +1 -1
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.plane.d.ts +1 -1
- package/Maths/math.plane.js +1 -1
- package/Maths/math.plane.js.map +1 -1
- package/Maths/math.polar.d.ts +1 -1
- package/Maths/math.polar.js +1 -1
- package/Maths/math.polar.js.map +1 -1
- package/Maths/math.vertexFormat.d.ts +1 -1
- package/Maths/math.vertexFormat.js +1 -1
- package/Maths/math.vertexFormat.js.map +1 -1
- package/Maths/pure.d.ts +1 -0
- package/Maths/pure.js +1 -0
- package/Maths/pure.js.map +1 -1
- package/Meshes/Builders/geodesicBuilder.js +1 -1
- package/Meshes/Builders/geodesicBuilder.js.map +1 -1
- package/Meshes/Builders/goldbergBuilder.d.ts +1 -1
- package/Meshes/Builders/goldbergBuilder.js +4 -4
- package/Meshes/Builders/goldbergBuilder.js.map +1 -1
- package/Meshes/Builders/greasedLineBuilder.d.ts +4 -4
- package/Meshes/Builders/greasedLineBuilder.js +5 -5
- package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
- package/Meshes/Builders/textBuilder.d.ts +2 -2
- package/Meshes/Builders/textBuilder.js +4 -4
- package/Meshes/Builders/textBuilder.js.map +1 -1
- package/Meshes/Builders/tiledBoxBuilder.d.ts +3 -3
- package/Meshes/Builders/tiledBoxBuilder.js +3 -3
- package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.d.ts +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.js +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
- package/Meshes/Compression/dracoCodec.js +1 -1
- package/Meshes/Compression/dracoCodec.js.map +1 -1
- package/Meshes/Compression/dracoDecoder.js +1 -1
- package/Meshes/Compression/dracoDecoder.js.map +1 -1
- package/Meshes/Compression/dracoEncoder.d.ts +1 -1
- package/Meshes/Compression/dracoEncoder.js +2 -2
- package/Meshes/Compression/dracoEncoder.js.map +1 -1
- package/Meshes/Compression/meshoptCompression.js +1 -1
- package/Meshes/Compression/meshoptCompression.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +64 -3
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineBaseMesh.d.ts +2 -2
- package/Meshes/GreasedLine/greasedLineBaseMesh.js +3 -3
- package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
- package/Meshes/Node/nodeGeometry.d.ts +2 -2
- package/Meshes/Node/nodeGeometry.js +4 -4
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Meshes/Node/nodeGeometryBuildState.d.ts +1 -1
- package/Meshes/Node/nodeGeometryBuildState.js +1 -1
- package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
- package/Meshes/abstractMesh.hotSpot.d.ts +1 -1
- package/Meshes/abstractMesh.hotSpot.js +2 -2
- package/Meshes/abstractMesh.hotSpot.js.map +1 -1
- package/Meshes/abstractMesh.pure.js +2 -13
- package/Meshes/abstractMesh.pure.js.map +1 -1
- package/Meshes/buffer.d.ts +1 -1
- package/Meshes/buffer.js +1 -1
- package/Meshes/buffer.js.map +1 -1
- package/Meshes/csg.d.ts +3 -3
- package/Meshes/csg.js +4 -4
- package/Meshes/csg.js.map +1 -1
- package/Meshes/csg2.d.ts +1 -1
- package/Meshes/csg2.js +38 -11
- package/Meshes/csg2.js.map +1 -1
- package/Meshes/geodesicMesh.d.ts +1 -1
- package/Meshes/geodesicMesh.js +1 -1
- package/Meshes/geodesicMesh.js.map +1 -1
- package/Meshes/geometry.d.ts +2 -2
- package/Meshes/geometry.js +4 -4
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/lattice.d.ts +1 -1
- package/Meshes/lattice.js +1 -1
- package/Meshes/lattice.js.map +1 -1
- package/Meshes/lattice.material.d.ts +1 -1
- package/Meshes/lattice.material.js +1 -1
- package/Meshes/lattice.material.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +2 -2
- package/Meshes/mesh.vertexData.js +3 -4
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/mesh.vertexData.subdivide.js +1 -1
- package/Meshes/mesh.vertexData.subdivide.js.map +1 -1
- package/Meshes/meshBuilder.d.ts +18 -18
- package/Meshes/meshBuilder.js +18 -18
- package/Meshes/meshBuilder.js.map +1 -1
- package/Meshes/meshSimplification.d.ts +1 -1
- package/Meshes/meshSimplification.js +4 -4
- package/Meshes/meshSimplification.js.map +1 -1
- package/Meshes/meshUVSpaceRenderer.d.ts +1 -1
- package/Meshes/meshUVSpaceRenderer.js +0 -1
- package/Meshes/meshUVSpaceRenderer.js.map +1 -1
- package/Meshes/meshUtils.d.ts +1 -1
- package/Meshes/meshUtils.js +2 -2
- package/Meshes/meshUtils.js.map +1 -1
- package/Meshes/polygonMesh.d.ts +2 -2
- package/Meshes/polygonMesh.js +3 -3
- package/Meshes/polygonMesh.js.map +1 -1
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +2 -2
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
- package/Misc/HighDynamicRange/panoramaToCubemap.js +1 -1
- package/Misc/HighDynamicRange/panoramaToCubemap.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/areaLightsTextureTools.d.ts +1 -1
- package/Misc/areaLightsTextureTools.js +3 -3
- package/Misc/areaLightsTextureTools.js.map +1 -1
- package/Misc/assetsManager.d.ts +4 -4
- package/Misc/assetsManager.js +5 -5
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/basisWorker.js +1 -1
- package/Misc/basisWorker.js.map +1 -1
- package/Misc/brdfTextureTools.js +1 -1
- package/Misc/brdfTextureTools.js.map +1 -1
- package/Misc/copyTextureToTexture.d.ts +1 -1
- package/Misc/copyTextureToTexture.js +1 -1
- package/Misc/copyTextureToTexture.js.map +1 -1
- package/Misc/decorators.serialization.js +2 -2
- package/Misc/decorators.serialization.js.map +1 -1
- package/Misc/depthReducer.d.ts +2 -2
- package/Misc/depthReducer.js +2 -2
- package/Misc/depthReducer.js.map +1 -1
- package/Misc/gradients.d.ts +1 -1
- package/Misc/gradients.js +1 -1
- package/Misc/gradients.js.map +1 -1
- package/Misc/greasedLineTools.d.ts +1 -1
- package/Misc/greasedLineTools.js +3 -3
- package/Misc/greasedLineTools.js.map +1 -1
- package/Misc/halfFloat.d.ts +17 -0
- package/Misc/halfFloat.js +131 -0
- package/Misc/halfFloat.js.map +1 -0
- package/Misc/khronosTextureContainer2.js +1 -1
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/meshExploder.js +1 -1
- package/Misc/meshExploder.js.map +1 -1
- package/Misc/pivotTools.js +1 -1
- package/Misc/pivotTools.js.map +1 -1
- package/Misc/rgbdTextureTools.js +1 -1
- package/Misc/rgbdTextureTools.js.map +1 -1
- package/Misc/sceneOptimizer.js +1 -1
- package/Misc/sceneOptimizer.js.map +1 -1
- package/Misc/sceneRecorder.js +7 -7
- package/Misc/sceneRecorder.js.map +1 -1
- package/Misc/sceneSerializer.js +3 -3
- package/Misc/sceneSerializer.js.map +1 -1
- package/Misc/snapshotRenderingHelper.js +1 -1
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/Misc/textureTools.d.ts +3 -13
- package/Misc/textureTools.js +6 -64
- package/Misc/textureTools.js.map +1 -1
- package/Misc/thinMinMaxReducer.d.ts +1 -1
- package/Misc/thinMinMaxReducer.js +1 -1
- package/Misc/thinMinMaxReducer.js.map +1 -1
- package/Misc/tools.internals.js +1 -1
- package/Misc/tools.internals.js.map +1 -1
- package/Misc/tools.pure.js +11 -4
- package/Misc/tools.pure.js.map +1 -1
- package/Misc/trajectoryClassifier.d.ts +1 -1
- package/Misc/trajectoryClassifier.js +1 -1
- package/Misc/trajectoryClassifier.js.map +1 -1
- package/Misc/videoRecorder.js +1 -1
- package/Misc/videoRecorder.js.map +1 -1
- package/Misc/virtualJoystick.d.ts +1 -1
- package/Misc/virtualJoystick.js +1 -1
- package/Misc/virtualJoystick.js.map +1 -1
- package/Morph/morphTarget.js +1 -1
- package/Morph/morphTarget.js.map +1 -1
- package/Navigation/Plugins/recastJSPlugin.d.ts +1 -1
- package/Navigation/Plugins/recastJSPlugin.js +2 -2
- package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
- package/Particles/EmitterTypes/boxParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/boxParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/boxParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/customParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/customParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/customParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/cylinderParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/cylinderParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/cylinderParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/hemisphericParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/hemisphericParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/hemisphericParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js +2 -2
- package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/pointParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/pointParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/pointParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/sphereParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/sphereParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/sphereParticleEmitter.js.map +1 -1
- package/Particles/Node/nodeParticleBuildState.d.ts +4 -4
- package/Particles/Node/nodeParticleBuildState.js +2 -2
- package/Particles/Node/nodeParticleBuildState.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.d.ts +2 -2
- package/Particles/Node/nodeParticleSystemSet.helper.js +31 -31
- package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.js +8 -8
- package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
- package/Particles/attractor.d.ts +1 -1
- package/Particles/attractor.js +1 -1
- package/Particles/attractor.js.map +1 -1
- package/Particles/computeShaderParticleSystem.pure.js +5 -1
- package/Particles/computeShaderParticleSystem.pure.js.map +1 -1
- package/Particles/flowMap.d.ts +7 -1
- package/Particles/flowMap.js +7 -1
- package/Particles/flowMap.js.map +1 -1
- package/Particles/gpuParticleSystem.pure.d.ts +1 -0
- package/Particles/gpuParticleSystem.pure.js +17 -1
- package/Particles/gpuParticleSystem.pure.js.map +1 -1
- package/Particles/particle.d.ts +2 -2
- package/Particles/particle.js +2 -2
- package/Particles/particle.js.map +1 -1
- package/Particles/particleHelper.js +5 -5
- package/Particles/particleHelper.js.map +1 -1
- package/Particles/particleSystem.functions.d.ts +1 -1
- package/Particles/particleSystem.functions.js +1 -1
- package/Particles/particleSystem.functions.js.map +1 -1
- package/Particles/particleSystemSet.d.ts +1 -1
- package/Particles/particleSystemSet.js +5 -5
- package/Particles/particleSystemSet.js.map +1 -1
- package/Particles/pointsCloudSystem.d.ts +1 -1
- package/Particles/pointsCloudSystem.js +6 -6
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticle.d.ts +2 -2
- package/Particles/solidParticle.js +3 -3
- package/Particles/solidParticle.js.map +1 -1
- package/Particles/solidParticleSystem.d.ts +4 -4
- package/Particles/solidParticleSystem.js +7 -7
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/subEmitter.js +1 -1
- package/Particles/subEmitter.js.map +1 -1
- package/Particles/thinParticleSystem.function.js +2 -2
- package/Particles/thinParticleSystem.function.js.map +1 -1
- package/Physics/Plugins/cannonJSPlugin.d.ts +1 -1
- package/Physics/Plugins/cannonJSPlugin.js +1 -1
- package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
- package/Physics/castingResult.d.ts +1 -1
- package/Physics/castingResult.js +1 -1
- package/Physics/castingResult.js.map +1 -1
- package/Physics/physicsHelper.d.ts +1 -1
- package/Physics/physicsHelper.js +4 -4
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/physicsImpostor.d.ts +1 -1
- package/Physics/physicsImpostor.js +1 -1
- package/Physics/physicsImpostor.js.map +1 -1
- package/Physics/physicsRaycastResult.d.ts +1 -1
- package/Physics/physicsRaycastResult.js +1 -1
- package/Physics/physicsRaycastResult.js.map +1 -1
- package/Physics/v1/Plugins/ammoJSPlugin.d.ts +2 -2
- package/Physics/v1/Plugins/ammoJSPlugin.js +5 -5
- package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/v1/Plugins/oimoJSPlugin.d.ts +2 -2
- package/Physics/v1/Plugins/oimoJSPlugin.js +2 -2
- package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -1
- package/Physics/v1/physicsEngine.d.ts +1 -1
- package/Physics/v1/physicsEngine.js +1 -1
- package/Physics/v1/physicsEngine.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.d.ts +14 -2
- package/Physics/v2/Plugins/havokPlugin.js +45 -7
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/Physics/v2/characterController.d.ts +1 -1
- package/Physics/v2/characterController.js +2 -2
- package/Physics/v2/characterController.js.map +1 -1
- package/Physics/v2/physicsAggregate.d.ts +3 -3
- package/Physics/v2/physicsAggregate.js +10 -6
- package/Physics/v2/physicsAggregate.js.map +1 -1
- package/Physics/v2/physicsBody.d.ts +1 -1
- package/Physics/v2/physicsBody.js +1 -1
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/physicsEngine.d.ts +1 -1
- package/Physics/v2/physicsEngine.js +1 -1
- package/Physics/v2/physicsEngine.js.map +1 -1
- package/Physics/v2/physicsShape.d.ts +1 -1
- package/Physics/v2/physicsShape.js +1 -1
- package/Physics/v2/physicsShape.js.map +1 -1
- package/Physics/v2/ragdoll.d.ts +2 -2
- package/Physics/v2/ragdoll.js +2 -2
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.d.ts +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js +8 -6
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +3 -2
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/bloomEffect.d.ts +1 -1
- package/PostProcesses/bloomEffect.js +4 -4
- package/PostProcesses/bloomEffect.js.map +1 -1
- package/PostProcesses/depthOfFieldEffect.d.ts +1 -1
- package/PostProcesses/depthOfFieldEffect.js +3 -3
- package/PostProcesses/depthOfFieldEffect.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.d.ts +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/highlightsPostProcess.d.ts +1 -1
- package/PostProcesses/highlightsPostProcess.js +1 -1
- package/PostProcesses/highlightsPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.d.ts +1 -1
- package/PostProcesses/imageProcessingPostProcess.js +1 -1
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/postProcessManager.d.ts +3 -0
- package/PostProcesses/postProcessManager.js +4 -1
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/PostProcesses/subSurfaceScatteringPostProcess.pure.d.ts +1 -0
- package/PostProcesses/subSurfaceScatteringPostProcess.pure.js +10 -0
- package/PostProcesses/subSurfaceScatteringPostProcess.pure.js.map +1 -1
- package/PostProcesses/thinAnaglyphPostProcess.d.ts +1 -1
- package/PostProcesses/thinAnaglyphPostProcess.js +1 -1
- package/PostProcesses/thinAnaglyphPostProcess.js.map +1 -1
- package/PostProcesses/thinBlackAndWhitePostProcess.d.ts +1 -1
- package/PostProcesses/thinBlackAndWhitePostProcess.js +1 -1
- package/PostProcesses/thinBlackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/thinBloomEffect.js +1 -1
- package/PostProcesses/thinBloomEffect.js.map +1 -1
- package/PostProcesses/thinBloomMergePostProcess.d.ts +1 -1
- package/PostProcesses/thinBloomMergePostProcess.js +1 -1
- package/PostProcesses/thinBloomMergePostProcess.js.map +1 -1
- package/PostProcesses/thinBlurPostProcess.d.ts +1 -1
- package/PostProcesses/thinBlurPostProcess.js +1 -1
- package/PostProcesses/thinBlurPostProcess.js.map +1 -1
- package/PostProcesses/thinChromaticAberrationPostProcess.d.ts +2 -2
- package/PostProcesses/thinChromaticAberrationPostProcess.js +2 -2
- package/PostProcesses/thinChromaticAberrationPostProcess.js.map +1 -1
- package/PostProcesses/thinCircleOfConfusionPostProcess.d.ts +1 -1
- package/PostProcesses/thinCircleOfConfusionPostProcess.js +1 -1
- package/PostProcesses/thinCircleOfConfusionPostProcess.js.map +1 -1
- package/PostProcesses/thinColorCorrectionPostProcess.d.ts +1 -1
- package/PostProcesses/thinColorCorrectionPostProcess.js +2 -2
- package/PostProcesses/thinColorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/thinConvolutionPostProcess.d.ts +1 -1
- package/PostProcesses/thinConvolutionPostProcess.js +1 -1
- package/PostProcesses/thinConvolutionPostProcess.js.map +1 -1
- package/PostProcesses/thinCustomPostProcess.d.ts +1 -1
- package/PostProcesses/thinCustomPostProcess.js +1 -1
- package/PostProcesses/thinCustomPostProcess.js.map +1 -1
- package/PostProcesses/thinDepthOfFieldEffect.d.ts +3 -0
- package/PostProcesses/thinDepthOfFieldEffect.js +4 -1
- package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
- package/PostProcesses/thinDepthOfFieldMergePostProcess.d.ts +1 -1
- package/PostProcesses/thinDepthOfFieldMergePostProcess.js +1 -1
- package/PostProcesses/thinDepthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/thinExtractHighlightsPostProcess.d.ts +1 -1
- package/PostProcesses/thinExtractHighlightsPostProcess.js +1 -1
- package/PostProcesses/thinExtractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/thinFXAAPostProcess.d.ts +2 -2
- package/PostProcesses/thinFXAAPostProcess.js +2 -2
- package/PostProcesses/thinFXAAPostProcess.js.map +1 -1
- package/PostProcesses/thinFilterPostProcess.d.ts +2 -2
- package/PostProcesses/thinFilterPostProcess.js +2 -2
- package/PostProcesses/thinFilterPostProcess.js.map +1 -1
- package/PostProcesses/thinGrainPostProcess.d.ts +1 -1
- package/PostProcesses/thinGrainPostProcess.js +1 -1
- package/PostProcesses/thinGrainPostProcess.js.map +1 -1
- package/PostProcesses/thinImageProcessingPostProcess.d.ts +2 -2
- package/PostProcesses/thinImageProcessingPostProcess.js +2 -2
- package/PostProcesses/thinImageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/thinMotionBlurPostProcess.d.ts +1 -1
- package/PostProcesses/thinMotionBlurPostProcess.js +2 -2
- package/PostProcesses/thinMotionBlurPostProcess.js.map +1 -1
- package/PostProcesses/thinPassPostProcess.d.ts +1 -1
- package/PostProcesses/thinPassPostProcess.js +1 -1
- package/PostProcesses/thinPassPostProcess.js.map +1 -1
- package/PostProcesses/thinSSAO2BlurPostProcess.d.ts +1 -1
- package/PostProcesses/thinSSAO2BlurPostProcess.js +1 -1
- package/PostProcesses/thinSSAO2BlurPostProcess.js.map +1 -1
- package/PostProcesses/thinSSAO2CombinePostProcess.d.ts +1 -1
- package/PostProcesses/thinSSAO2CombinePostProcess.js +2 -2
- package/PostProcesses/thinSSAO2CombinePostProcess.js.map +1 -1
- package/PostProcesses/thinSSAO2PostProcess.d.ts +7 -2
- package/PostProcesses/thinSSAO2PostProcess.js +36 -4
- package/PostProcesses/thinSSAO2PostProcess.js.map +1 -1
- package/PostProcesses/thinSSRBlurCombinerPostProcess.d.ts +1 -1
- package/PostProcesses/thinSSRBlurCombinerPostProcess.js +2 -2
- package/PostProcesses/thinSSRBlurCombinerPostProcess.js.map +1 -1
- package/PostProcesses/thinSSRBlurPostProcess.d.ts +2 -2
- package/PostProcesses/thinSSRBlurPostProcess.js +2 -2
- package/PostProcesses/thinSSRBlurPostProcess.js.map +1 -1
- package/PostProcesses/thinSSRPostProcess.d.ts +1 -1
- package/PostProcesses/thinSSRPostProcess.js +2 -2
- package/PostProcesses/thinSSRPostProcess.js.map +1 -1
- package/PostProcesses/thinScreenSpaceCurvaturePostProcess.d.ts +1 -1
- package/PostProcesses/thinScreenSpaceCurvaturePostProcess.js +1 -1
- package/PostProcesses/thinScreenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/thinSharpenPostProcess.d.ts +1 -1
- package/PostProcesses/thinSharpenPostProcess.js +1 -1
- package/PostProcesses/thinSharpenPostProcess.js.map +1 -1
- package/PostProcesses/thinTAAPostProcess.d.ts +3 -3
- package/PostProcesses/thinTAAPostProcess.js +4 -4
- package/PostProcesses/thinTAAPostProcess.js.map +1 -1
- package/PostProcesses/thinTonemapPostProcess.d.ts +1 -1
- package/PostProcesses/thinTonemapPostProcess.js +1 -1
- package/PostProcesses/thinTonemapPostProcess.js.map +1 -1
- package/PostProcesses/vrDistortionCorrectionPostProcess.d.ts +1 -1
- package/PostProcesses/vrDistortionCorrectionPostProcess.js +3 -3
- package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.d.ts +2 -2
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +4 -4
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.d.ts +2 -2
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js +4 -4
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +3 -3
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +4 -4
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +1 -1
- package/Rendering/depthPeelingRenderer.js +2 -2
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +2 -2
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +3 -3
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -3
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTextures.d.ts +2 -2
- package/Rendering/fluidRenderer/fluidRenderingTextures.js +3 -3
- package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
- package/Rendering/iblCdfGenerator.d.ts +3 -3
- package/Rendering/iblCdfGenerator.js +5 -5
- package/Rendering/iblCdfGenerator.js.map +1 -1
- package/Rendering/renderingGroup.js +1 -1
- package/Rendering/renderingGroup.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.d.ts +2 -2
- package/Rendering/subSurfaceConfiguration.js +2 -2
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Rendering/utilityLayerRenderer.d.ts +2 -2
- package/Rendering/utilityLayerRenderer.js +4 -4
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/ssao2.fragment.js +10 -2
- package/Shaders/ssao2.fragment.js.map +1 -1
- package/ShadersWGSL/gpuRenderParticles.fragment.d.ts +5 -0
- package/ShadersWGSL/gpuRenderParticles.fragment.js +50 -0
- package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -0
- package/ShadersWGSL/gpuRenderParticles.vertex.d.ts +5 -0
- package/ShadersWGSL/gpuRenderParticles.vertex.js +120 -0
- package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -0
- package/ShadersWGSL/noise.fragment.d.ts +5 -0
- package/ShadersWGSL/noise.fragment.js +18 -0
- package/ShadersWGSL/noise.fragment.js.map +1 -0
- package/ShadersWGSL/ssao2.fragment.js +10 -2
- package/ShadersWGSL/ssao2.fragment.js.map +1 -1
- package/SmartAssets/smartAssetSerializer.js +1 -1
- package/SmartAssets/smartAssetSerializer.js.map +1 -1
- package/Sprites/sprite.d.ts +2 -2
- package/Sprites/sprite.js +2 -2
- package/Sprites/sprite.js.map +1 -1
- package/Sprites/spriteManager.d.ts +2 -2
- package/Sprites/spriteManager.js +4 -5
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spritePackedManager.js +1 -1
- package/Sprites/spritePackedManager.js.map +1 -1
- package/Sprites/spriteRenderer.js +2 -2
- package/Sprites/spriteRenderer.js.map +1 -1
- package/XR/features/WebXRHitTestLegacy.d.ts +1 -1
- package/XR/features/WebXRHitTestLegacy.js +2 -2
- package/XR/features/WebXRHitTestLegacy.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.js +2 -2
- package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
- package/XR/motionController/webXRGenericMotionController.js +2 -2
- package/XR/motionController/webXRGenericMotionController.js.map +1 -1
- package/XR/motionController/webXRProfiledMotionController.js +4 -4
- package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
- package/XR/webXRCamera.d.ts +3 -3
- package/XR/webXRCamera.js +4 -4
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRDefaultExperience.d.ts +4 -4
- package/XR/webXRDefaultExperience.js +4 -4
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXREnterExitUI.js +1 -1
- package/XR/webXREnterExitUI.js.map +1 -1
- package/XR/webXRExperienceHelper.js +2 -2
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRFeaturesManager.d.ts +47 -0
- package/XR/webXRFeaturesManager.js +1 -1
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/XR/webXRInput.js +1 -1
- package/XR/webXRInput.js.map +1 -1
- package/XR/webXRInputSource.js +4 -4
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRManagedOutputCanvas.js +1 -1
- package/XR/webXRManagedOutputCanvas.js.map +1 -1
- package/XR/webXRRenderTargetTextureProvider.d.ts +1 -1
- package/XR/webXRRenderTargetTextureProvider.js +1 -1
- package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
- package/assetContainer.d.ts +4 -4
- package/assetContainer.js +6 -6
- package/assetContainer.js.map +1 -1
- package/node.d.ts +1 -1
- package/node.js +6 -2
- package/node.js.map +1 -1
- package/package.json +44 -174
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pointsCloudSystem.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/pointsCloudSystem.ts"],"names":[],"mappings":"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,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBAC/I,sBAAsB,CAAC,CAAC,CAAC;wBACrB,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBAC/I,sBAAsB,CAAC,CAAC,CAAC;wBACrB,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBAC/I,sBAAsB,CAAC,CAAC,CAAC;wBACrB,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBAC/I,sBAAsB,CAAC,CAAC,CAAC;wBACrB,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBAChJ,sBAAsB,CAAC,CAAC,CAAC;wBACrB,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBAChJ,sBAAsB,CAAC,CAAC,CAAC;wBACrB,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,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","sourcesContent":["import { type IndicesArray, type FloatArray } from \"../types\";\r\nimport { Color4, Color3 } from \"../Maths/math\";\r\nimport { Vector2, Vector3, Vector4, TmpVectors, Matrix } from \"../Maths/math.vector\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { VertexData } from \"../Meshes/mesh.vertexData\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { type Scene, type IDisposable } from \"../scene\";\r\nimport { CloudPoint, PointsGroup } from \"./cloudPoint\";\r\nimport { Ray } from \"../Culling/ray\";\r\nimport { type PickingInfo } from \"../Collisions/pickingInfo\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport { BaseTexture } from \"./../Materials/Textures/baseTexture\";\r\nimport { RandomRange } from \"../Maths/math.scalar.functions\";\r\nimport { type Material } from \"../Materials/material\";\r\n\r\n/** Defines the 4 color options */\r\nexport const enum PointColor {\r\n /** color value */\r\n Color = 2,\r\n /** uv value */\r\n UV = 1,\r\n /** random value */\r\n Random = 0,\r\n /** stated value */\r\n Stated = 3,\r\n}\r\n\r\n/**\r\n * The PointCloudSystem (PCS) is a single updatable mesh. The points corresponding to the vertices of this big mesh.\r\n * As it is just a mesh, the PointCloudSystem has all the same properties as any other BJS mesh : not more, not less. It can be scaled, rotated, translated, enlighted, textured, moved, etc.\r\n\r\n * The PointCloudSystem is also a particle system, with each point being a particle. It provides some methods to manage the particles.\r\n * However it is behavior agnostic. This means it has no emitter, no particle physics, no particle recycler. You have to implement your own behavior.\r\n *\r\n * Full documentation here : TO BE ENTERED\r\n */\r\nexport class PointsCloudSystem implements IDisposable {\r\n /**\r\n * The PCS array of cloud point objects. Just access each particle as with any classic array.\r\n * Example : var p = SPS.particles[i];\r\n */\r\n public particles: CloudPoint[] = new Array<CloudPoint>();\r\n /**\r\n * The PCS total number of particles. Read only. Use PCS.counter instead if you need to set your own value.\r\n */\r\n public nbParticles: number = 0;\r\n /**\r\n * This a counter for your own usage. It's not set by any SPS functions.\r\n */\r\n public counter: number = 0;\r\n /**\r\n * The PCS name. This name is also given to the underlying mesh.\r\n */\r\n public name: string;\r\n /**\r\n * The PCS mesh. It's a standard BJS Mesh, so all the methods from the Mesh class are available.\r\n */\r\n public mesh?: Mesh;\r\n /**\r\n * This empty object is intended to store some PCS specific or temporary values in order to lower the Garbage Collector activity.\r\n * Please read :\r\n */\r\n public vars: any = {};\r\n /**\r\n * @internal\r\n */\r\n public _size: number; //size of each point particle\r\n\r\n private _scene: Scene;\r\n private _promises: Array<Promise<any>> = [];\r\n private _positions: number[] = new Array<number>();\r\n private _indices: number[] = new Array<number>();\r\n private _normals: number[] = new Array<number>();\r\n private _colors: number[] = new Array<number>();\r\n private _uvs: number[] = new Array<number>();\r\n private _indices32: IndicesArray; // used as depth sorted array if depth sort enabled, else used as typed indices\r\n private _positions32: Float32Array; // updated positions for the VBO\r\n private _colors32: Float32Array;\r\n private _uvs32: Float32Array;\r\n private _updatable: boolean = true;\r\n private _isVisibilityBoxLocked = false;\r\n private _alwaysVisible: boolean = false;\r\n private _groups: number[] = new Array<number>(); //start indices for each group of particles\r\n private _groupCounter: number = 0;\r\n private _computeParticleColor: boolean = true;\r\n private _computeParticleTexture: boolean = true;\r\n private _computeParticleRotation: boolean = true;\r\n private _computeBoundingBox: boolean = false;\r\n private _isReady: boolean = false;\r\n\r\n /**\r\n * Gets the particle positions computed by the Point Cloud System\r\n */\r\n public get positions(): Float32Array {\r\n return this._positions32;\r\n }\r\n\r\n /**\r\n * Gets the particle colors computed by the Point Cloud System\r\n */\r\n public get colors(): Float32Array {\r\n return this._colors32;\r\n }\r\n\r\n /**\r\n * Gets the particle uvs computed by the Point Cloud System\r\n */\r\n public get uvs(): Float32Array {\r\n return this._uvs32;\r\n }\r\n\r\n /**\r\n * Creates a PCS (Points Cloud System) object\r\n * @param name (String) is the PCS name, this will be the underlying mesh name\r\n * @param pointSize (number) is the size for each point. Has no effect on a WebGPU engine.\r\n * @param scene (Scene) is the scene in which the PCS is added\r\n * @param options defines the options of the PCS e.g.\r\n * * updatable (optional boolean, default true) : if the PCS must be updatable or immutable\r\n */\r\n constructor(name: string, pointSize: number, scene: Scene, options?: { updatable?: boolean }) {\r\n this.name = name;\r\n this._size = pointSize;\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n if (options && options.updatable !== undefined) {\r\n this._updatable = options.updatable;\r\n } else {\r\n this._updatable = true;\r\n }\r\n }\r\n\r\n /**\r\n * Builds the PCS underlying mesh. Returns a standard Mesh.\r\n * If no points were added to the PCS, the returned mesh is just a single point.\r\n * @param material The material to use to render the mesh. If not provided, will create a default one\r\n * @returns a promise for the created mesh\r\n */\r\n public async buildMeshAsync(material?: Material): Promise<Mesh> {\r\n await Promise.all(this._promises);\r\n this._isReady = true;\r\n return await this._buildMeshAsync(material);\r\n }\r\n\r\n private async _buildMeshAsync(material?: Material): Promise<Mesh> {\r\n if (this.nbParticles === 0) {\r\n this.addPoints(1);\r\n }\r\n\r\n this._positions32 = new Float32Array(this._positions);\r\n this._uvs32 = new Float32Array(this._uvs);\r\n this._colors32 = new Float32Array(this._colors);\r\n\r\n const vertexData = new VertexData();\r\n vertexData.set(this._positions32, VertexBuffer.PositionKind);\r\n\r\n if (this._uvs32.length > 0) {\r\n vertexData.set(this._uvs32, VertexBuffer.UVKind);\r\n }\r\n let ec = 0; //emissive color value 0 for UVs, 1 for color\r\n if (this._colors32.length > 0) {\r\n ec = 1;\r\n vertexData.set(this._colors32, VertexBuffer.ColorKind);\r\n }\r\n const mesh = new Mesh(this.name, this._scene);\r\n vertexData.applyToMesh(mesh, this._updatable);\r\n this.mesh = mesh;\r\n\r\n // free memory\r\n (<any>this._positions) = null;\r\n (<any>this._uvs) = null;\r\n (<any>this._colors) = null;\r\n\r\n if (!this._updatable) {\r\n this.particles.length = 0;\r\n }\r\n\r\n let mat = material;\r\n\r\n if (!mat) {\r\n mat = new StandardMaterial(\"point cloud material\", this._scene);\r\n (<StandardMaterial>mat).emissiveColor = new Color3(ec, ec, ec);\r\n (<StandardMaterial>mat).disableLighting = true;\r\n (<StandardMaterial>mat).pointsCloud = true;\r\n (<StandardMaterial>mat).pointSize = this._size;\r\n }\r\n mesh.material = mat;\r\n\r\n return mesh;\r\n }\r\n\r\n // adds a new particle object in the particles array\r\n private _addParticle(idx: number, group: PointsGroup, groupId: number, idxInGroup: number): CloudPoint {\r\n const cp = new CloudPoint(idx, group, groupId, idxInGroup, this);\r\n this.particles.push(cp);\r\n return cp;\r\n }\r\n\r\n private _randomUnitVector(particle: CloudPoint): void {\r\n particle.position = new Vector3(Math.random(), Math.random(), Math.random());\r\n particle.color = new Color4(1, 1, 1, 1);\r\n }\r\n\r\n private _getColorIndicesForCoord(pointsGroup: PointsGroup, x: number, y: number, width: number): Color4 {\r\n const imageData = <Uint8Array>pointsGroup._groupImageData;\r\n const color = y * (width * 4) + x * 4;\r\n const colorIndices = [color, color + 1, color + 2, color + 3];\r\n const redIndex = colorIndices[0];\r\n const greenIndex = colorIndices[1];\r\n const blueIndex = colorIndices[2];\r\n const alphaIndex = colorIndices[3];\r\n const redForCoord = imageData[redIndex];\r\n const greenForCoord = imageData[greenIndex];\r\n const blueForCoord = imageData[blueIndex];\r\n const alphaForCoord = imageData[alphaIndex];\r\n return new Color4(redForCoord / 255, greenForCoord / 255, blueForCoord / 255, alphaForCoord);\r\n }\r\n\r\n private _setPointsColorOrUV(\r\n mesh: Mesh,\r\n pointsGroup: PointsGroup,\r\n isVolume: boolean,\r\n colorFromTexture?: boolean,\r\n hasTexture?: boolean,\r\n color?: Color4,\r\n range?: number,\r\n uvSetIndex?: number\r\n ): void {\r\n uvSetIndex = uvSetIndex ?? 0;\r\n\r\n if (isVolume) {\r\n mesh.updateFacetData();\r\n }\r\n\r\n const boundInfo = mesh.getBoundingInfo();\r\n const diameter = 2 * boundInfo.boundingSphere.radius;\r\n\r\n let meshPos = <FloatArray>mesh.getVerticesData(VertexBuffer.PositionKind);\r\n const meshInd = <IndicesArray>mesh.getIndices();\r\n const meshUV = <FloatArray>mesh.getVerticesData(VertexBuffer.UVKind + (uvSetIndex ? uvSetIndex + 1 : \"\"));\r\n const meshCol = <FloatArray>mesh.getVerticesData(VertexBuffer.ColorKind);\r\n\r\n const place = Vector3.Zero();\r\n mesh.computeWorldMatrix();\r\n const meshMatrix: Matrix = mesh.getWorldMatrix();\r\n if (!meshMatrix.isIdentity()) {\r\n meshPos = meshPos.slice(0);\r\n for (let p = 0; p < meshPos.length / 3; p++) {\r\n Vector3.TransformCoordinatesFromFloatsToRef(meshPos[3 * p], meshPos[3 * p + 1], meshPos[3 * p + 2], meshMatrix, place);\r\n meshPos[3 * p] = place.x;\r\n meshPos[3 * p + 1] = place.y;\r\n meshPos[3 * p + 2] = place.z;\r\n }\r\n }\r\n\r\n let idxPoints: number;\r\n\r\n let id0: number;\r\n let id1: number;\r\n let id2: number;\r\n let v0X: number;\r\n let v0Y: number;\r\n let v0Z: number;\r\n let v1X: number;\r\n let v1Y: number;\r\n let v1Z: number;\r\n let v2X: number;\r\n let v2Y: number;\r\n let v2Z: number;\r\n const vertex0 = Vector3.Zero();\r\n const vertex1 = Vector3.Zero();\r\n const vertex2 = Vector3.Zero();\r\n const vec0 = Vector3.Zero();\r\n const vec1 = Vector3.Zero();\r\n\r\n let uv0X: number;\r\n let uv0Y: number;\r\n let uv1X: number;\r\n let uv1Y: number;\r\n let uv2X: number;\r\n let uv2Y: number;\r\n const uv0 = Vector2.Zero();\r\n const uv1 = Vector2.Zero();\r\n const uv2 = Vector2.Zero();\r\n const uvec0 = Vector2.Zero();\r\n const uvec1 = Vector2.Zero();\r\n\r\n let col0X: number;\r\n let col0Y: number;\r\n let col0Z: number;\r\n let col0A: number;\r\n let col1X: number;\r\n let col1Y: number;\r\n let col1Z: number;\r\n let col1A: number;\r\n let col2X: number;\r\n let col2Y: number;\r\n let col2Z: number;\r\n let col2A: number;\r\n const col0 = Vector4.Zero();\r\n const col1 = Vector4.Zero();\r\n const col2 = Vector4.Zero();\r\n const colvec0 = Vector4.Zero();\r\n const colvec1 = Vector4.Zero();\r\n\r\n let lamda: number;\r\n let mu: number;\r\n range = range ? range : 0;\r\n\r\n let facetPoint: Vector3;\r\n let uvPoint: Vector2;\r\n let colPoint: Vector4 = new Vector4(0, 0, 0, 1);\r\n\r\n let norm: Vector3;\r\n let tang: Vector3;\r\n let biNorm: Vector3;\r\n let angle: number;\r\n let facetPlaneVec: Vector3;\r\n\r\n let gap: number;\r\n let distance: number;\r\n const ray = new Ray(Vector3.Zero(), new Vector3(1, 0, 0));\r\n let pickInfo: PickingInfo;\r\n let direction: Vector3;\r\n\r\n for (let index = 0; index < meshInd.length / 3; index++) {\r\n id0 = meshInd[3 * index];\r\n id1 = meshInd[3 * index + 1];\r\n id2 = meshInd[3 * index + 2];\r\n v0X = meshPos[3 * id0];\r\n v0Y = meshPos[3 * id0 + 1];\r\n v0Z = meshPos[3 * id0 + 2];\r\n v1X = meshPos[3 * id1];\r\n v1Y = meshPos[3 * id1 + 1];\r\n v1Z = meshPos[3 * id1 + 2];\r\n v2X = meshPos[3 * id2];\r\n v2Y = meshPos[3 * id2 + 1];\r\n v2Z = meshPos[3 * id2 + 2];\r\n vertex0.set(v0X, v0Y, v0Z);\r\n vertex1.set(v1X, v1Y, v1Z);\r\n vertex2.set(v2X, v2Y, v2Z);\r\n vertex1.subtractToRef(vertex0, vec0);\r\n vertex2.subtractToRef(vertex1, vec1);\r\n\r\n if (meshUV) {\r\n uv0X = meshUV[2 * id0];\r\n uv0Y = meshUV[2 * id0 + 1];\r\n uv1X = meshUV[2 * id1];\r\n uv1Y = meshUV[2 * id1 + 1];\r\n uv2X = meshUV[2 * id2];\r\n uv2Y = meshUV[2 * id2 + 1];\r\n uv0.set(uv0X, uv0Y);\r\n uv1.set(uv1X, uv1Y);\r\n uv2.set(uv2X, uv2Y);\r\n uv1.subtractToRef(uv0, uvec0);\r\n uv2.subtractToRef(uv1, uvec1);\r\n }\r\n\r\n if (meshCol && colorFromTexture) {\r\n col0X = meshCol[4 * id0];\r\n col0Y = meshCol[4 * id0 + 1];\r\n col0Z = meshCol[4 * id0 + 2];\r\n col0A = meshCol[4 * id0 + 3];\r\n col1X = meshCol[4 * id1];\r\n col1Y = meshCol[4 * id1 + 1];\r\n col1Z = meshCol[4 * id1 + 2];\r\n col1A = meshCol[4 * id1 + 3];\r\n col2X = meshCol[4 * id2];\r\n col2Y = meshCol[4 * id2 + 1];\r\n col2Z = meshCol[4 * id2 + 2];\r\n col2A = meshCol[4 * id2 + 3];\r\n col0.set(col0X, col0Y, col0Z, col0A);\r\n col1.set(col1X, col1Y, col1Z, col1A);\r\n col2.set(col2X, col2Y, col2Z, col2A);\r\n col1.subtractToRef(col0, colvec0);\r\n col2.subtractToRef(col1, colvec1);\r\n }\r\n\r\n let width: number;\r\n let height: number;\r\n let deltaS: number;\r\n let deltaV: number;\r\n let h: number;\r\n let s: number;\r\n let v: number;\r\n let hsvCol: Color3;\r\n const statedColor: Color3 = new Color3(0, 0, 0);\r\n const colPoint3: Color3 = new Color3(0, 0, 0);\r\n let pointColors: Color4;\r\n let particle: CloudPoint;\r\n\r\n for (let i = 0; i < pointsGroup._groupDensity[index]; i++) {\r\n idxPoints = this.particles.length;\r\n this._addParticle(idxPoints, pointsGroup, this._groupCounter, index + i);\r\n particle = this.particles[idxPoints];\r\n //form a point inside the facet v0, v1, v2;\r\n lamda = Math.sqrt(RandomRange(0, 1));\r\n mu = RandomRange(0, 1);\r\n facetPoint = vertex0.add(vec0.scale(lamda)).add(vec1.scale(lamda * mu));\r\n if (isVolume) {\r\n norm = mesh.getFacetNormal(index).normalize().scale(-1);\r\n tang = vec0.clone().normalize();\r\n biNorm = Vector3.Cross(norm, tang);\r\n angle = RandomRange(0, 2 * Math.PI);\r\n facetPlaneVec = tang.scale(Math.cos(angle)).add(biNorm.scale(Math.sin(angle)));\r\n angle = RandomRange(0.1, Math.PI / 2);\r\n direction = facetPlaneVec.scale(Math.cos(angle)).add(norm.scale(Math.sin(angle)));\r\n\r\n ray.origin = facetPoint.add(direction.scale(0.00001));\r\n ray.direction = direction;\r\n ray.length = diameter;\r\n pickInfo = ray.intersectsMesh(mesh);\r\n if (pickInfo.hit) {\r\n distance = pickInfo.pickedPoint!.subtract(facetPoint).length();\r\n gap = RandomRange(0, 1) * distance;\r\n facetPoint.addInPlace(direction.scale(gap));\r\n }\r\n }\r\n particle.position = facetPoint.clone();\r\n this._positions.push(particle.position.x, particle.position.y, particle.position.z);\r\n if (colorFromTexture !== undefined) {\r\n if (meshUV) {\r\n uvPoint = uv0.add(uvec0.scale(lamda)).add(uvec1.scale(lamda * mu));\r\n if (colorFromTexture) {\r\n //Set particle color to texture color\r\n if (hasTexture && pointsGroup._groupImageData !== null) {\r\n width = pointsGroup._groupImgWidth;\r\n height = pointsGroup._groupImgHeight;\r\n pointColors = this._getColorIndicesForCoord(pointsGroup, Math.round(uvPoint.x * width), Math.round(uvPoint.y * height), width);\r\n particle.color = pointColors;\r\n this._colors.push(pointColors.r, pointColors.g, pointColors.b, pointColors.a);\r\n } else {\r\n if (meshCol) {\r\n //failure in texture and colors available\r\n colPoint = col0.add(colvec0.scale(lamda)).add(colvec1.scale(lamda * mu));\r\n particle.color = new Color4(colPoint.x, colPoint.y, colPoint.z, colPoint.w);\r\n this._colors.push(colPoint.x, colPoint.y, colPoint.z, colPoint.w);\r\n } else {\r\n colPoint = col0.set(Math.random(), Math.random(), Math.random(), 1);\r\n particle.color = new Color4(colPoint.x, colPoint.y, colPoint.z, colPoint.w);\r\n this._colors.push(colPoint.x, colPoint.y, colPoint.z, colPoint.w);\r\n }\r\n }\r\n } else {\r\n //Set particle uv based on a mesh uv\r\n particle.uv = uvPoint.clone();\r\n this._uvs.push(particle.uv.x, particle.uv.y);\r\n }\r\n }\r\n } else {\r\n if (color) {\r\n statedColor.set(color.r, color.g, color.b);\r\n deltaS = RandomRange(-range, range);\r\n deltaV = RandomRange(-range, range);\r\n hsvCol = statedColor.toHSV();\r\n h = hsvCol.r;\r\n s = hsvCol.g + deltaS;\r\n v = hsvCol.b + deltaV;\r\n if (s < 0) {\r\n s = 0;\r\n }\r\n if (s > 1) {\r\n s = 1;\r\n }\r\n if (v < 0) {\r\n v = 0;\r\n }\r\n if (v > 1) {\r\n v = 1;\r\n }\r\n Color3.HSVtoRGBToRef(h, s, v, colPoint3);\r\n colPoint.set(colPoint3.r, colPoint3.g, colPoint3.b, 1);\r\n } else {\r\n colPoint = col0.set(Math.random(), Math.random(), Math.random(), 1);\r\n }\r\n particle.color = new Color4(colPoint.x, colPoint.y, colPoint.z, colPoint.w);\r\n this._colors.push(colPoint.x, colPoint.y, colPoint.z, colPoint.w);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // stores mesh texture in dynamic texture for color pixel retrieval\r\n // when pointColor type is color for surface points\r\n private _colorFromTexture(mesh: Mesh, pointsGroup: PointsGroup, isVolume: boolean): void {\r\n if (mesh.material === null) {\r\n Logger.Warn(mesh.name + \"has no material.\");\r\n pointsGroup._groupImageData = null;\r\n this._setPointsColorOrUV(mesh, pointsGroup, isVolume, true, false);\r\n return;\r\n }\r\n\r\n const mat = mesh.material;\r\n const textureList: BaseTexture[] = mat.getActiveTextures();\r\n if (textureList.length === 0) {\r\n Logger.Warn(mesh.name + \"has no usable texture.\");\r\n pointsGroup._groupImageData = null;\r\n this._setPointsColorOrUV(mesh, pointsGroup, isVolume, true, false);\r\n return;\r\n }\r\n\r\n const clone = mesh.clone();\r\n clone.setEnabled(false);\r\n this._promises.push(\r\n new Promise((resolve: (_: void) => void) => {\r\n BaseTexture.WhenAllReady(textureList, () => {\r\n let n = pointsGroup._textureNb;\r\n if (n < 0) {\r\n n = 0;\r\n }\r\n if (n > textureList.length - 1) {\r\n n = textureList.length - 1;\r\n }\r\n const finalize = () => {\r\n pointsGroup._groupImgWidth = textureList[n].getSize().width;\r\n pointsGroup._groupImgHeight = textureList[n].getSize().height;\r\n this._setPointsColorOrUV(clone, pointsGroup, isVolume, true, true, undefined, undefined, textureList[n].coordinatesIndex);\r\n clone.dispose();\r\n resolve();\r\n };\r\n pointsGroup._groupImageData = null;\r\n const dataPromise = textureList[n].readPixels();\r\n if (!dataPromise) {\r\n finalize();\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n dataPromise.then((data) => {\r\n pointsGroup._groupImageData = data;\r\n finalize();\r\n });\r\n }\r\n });\r\n })\r\n );\r\n }\r\n\r\n // calculates the point density per facet of a mesh for surface points\r\n private _calculateDensity(nbPoints: number, positions: FloatArray, indices: IndicesArray): number[] {\r\n let id0: number;\r\n let id1: number;\r\n let id2: number;\r\n let v0X: number;\r\n let v0Y: number;\r\n let v0Z: number;\r\n let v1X: number;\r\n let v1Y: number;\r\n let v1Z: number;\r\n let v2X: number;\r\n let v2Y: number;\r\n let v2Z: number;\r\n const vertex0 = Vector3.Zero();\r\n const vertex1 = Vector3.Zero();\r\n const vertex2 = Vector3.Zero();\r\n const vec0 = Vector3.Zero();\r\n const vec1 = Vector3.Zero();\r\n const normal = Vector3.Zero();\r\n\r\n let area: number;\r\n const cumulativeAreas: number[] = [];\r\n let surfaceArea: number = 0;\r\n\r\n const nbFacets = indices.length / 3;\r\n\r\n //surface area\r\n for (let index = 0; index < nbFacets; index++) {\r\n id0 = indices[3 * index];\r\n id1 = indices[3 * index + 1];\r\n id2 = indices[3 * index + 2];\r\n v0X = positions[3 * id0];\r\n v0Y = positions[3 * id0 + 1];\r\n v0Z = positions[3 * id0 + 2];\r\n v1X = positions[3 * id1];\r\n v1Y = positions[3 * id1 + 1];\r\n v1Z = positions[3 * id1 + 2];\r\n v2X = positions[3 * id2];\r\n v2Y = positions[3 * id2 + 1];\r\n v2Z = positions[3 * id2 + 2];\r\n vertex0.set(v0X, v0Y, v0Z);\r\n vertex1.set(v1X, v1Y, v1Z);\r\n vertex2.set(v2X, v2Y, v2Z);\r\n vertex1.subtractToRef(vertex0, vec0);\r\n vertex2.subtractToRef(vertex1, vec1);\r\n Vector3.CrossToRef(vec0, vec1, normal);\r\n area = 0.5 * normal.length();\r\n surfaceArea += area;\r\n cumulativeAreas[index] = surfaceArea;\r\n }\r\n\r\n const density: number[] = new Array<number>(nbFacets);\r\n let remainingPoints = nbPoints;\r\n for (let index = nbFacets - 1; index > 0; index--) {\r\n const cumulativeArea = cumulativeAreas[index];\r\n if (cumulativeArea === 0) {\r\n // avoiding division by 0 upon degenerate triangles\r\n density[index] = 0;\r\n } else {\r\n const area = cumulativeArea - cumulativeAreas[index - 1];\r\n const facetPointsWithFraction = (area / cumulativeArea) * remainingPoints;\r\n const floored = Math.floor(facetPointsWithFraction);\r\n const fraction = facetPointsWithFraction - floored;\r\n const extraPoint = Number(Math.random() < fraction);\r\n const facetPoints = floored + extraPoint;\r\n density[index] = facetPoints;\r\n remainingPoints -= facetPoints;\r\n }\r\n }\r\n density[0] = remainingPoints;\r\n\r\n return density;\r\n }\r\n\r\n /**\r\n * Adds points to the PCS in random positions within a unit sphere\r\n * @param nb (positive integer) the number of particles to be created from this model\r\n * @param pointFunction is an optional javascript function to be called for each particle on PCS creation\r\n * @returns the number of groups in the system\r\n */\r\n public addPoints(nb: number, pointFunction: any = this._randomUnitVector): number {\r\n const pointsGroup = new PointsGroup(this._groupCounter, pointFunction);\r\n let cp: CloudPoint;\r\n\r\n // particles\r\n let idx = this.nbParticles;\r\n for (let i = 0; i < nb; i++) {\r\n cp = this._addParticle(idx, pointsGroup, this._groupCounter, i);\r\n if (pointsGroup && pointsGroup._positionFunction) {\r\n pointsGroup._positionFunction(cp, idx, i);\r\n }\r\n this._positions.push(cp.position.x, cp.position.y, cp.position.z);\r\n if (cp.color) {\r\n this._colors.push(cp.color.r, cp.color.g, cp.color.b, cp.color.a);\r\n }\r\n if (cp.uv) {\r\n this._uvs.push(cp.uv.x, cp.uv.y);\r\n }\r\n idx++;\r\n }\r\n this.nbParticles += nb;\r\n this._groupCounter++;\r\n return this._groupCounter;\r\n }\r\n\r\n /**\r\n * Adds points to the PCS from the surface of the model shape\r\n * @param mesh is any Mesh object that will be used as a surface model for the points\r\n * @param nb (positive integer) the number of particles to be created from this model\r\n * @param colorWith determines whether a point is colored using color (default), uv, random, stated or none (invisible)\r\n * @param color (color4) to be used when colorWith is stated or color (number) when used to specify texture position\r\n * @param range (number from 0 to 1) to determine the variation in shape and tone for a stated color\r\n * @returns the number of groups in the system\r\n */\r\n public addSurfacePoints(mesh: Mesh, nb: number, colorWith?: number, color?: Color4 | number, range?: number): number {\r\n let colored = colorWith ? colorWith : PointColor.Random;\r\n if (isNaN(colored) || colored < 0 || colored > 3) {\r\n colored = PointColor.Random;\r\n }\r\n\r\n const meshPos = <FloatArray>mesh.getVerticesData(VertexBuffer.PositionKind);\r\n const meshInd = <IndicesArray>mesh.getIndices();\r\n\r\n this._groups.push(this._groupCounter);\r\n const pointsGroup = new PointsGroup(this._groupCounter, null);\r\n\r\n pointsGroup._groupDensity = this._calculateDensity(nb, meshPos, meshInd);\r\n if (colored === PointColor.Color) {\r\n pointsGroup._textureNb = <number>color ? <number>color : 0;\r\n } else {\r\n color = <Color4>color ? <Color4>color : new Color4(1, 1, 1, 1);\r\n }\r\n switch (colored) {\r\n case PointColor.Color:\r\n this._colorFromTexture(mesh, pointsGroup, false);\r\n break;\r\n case PointColor.UV:\r\n this._setPointsColorOrUV(mesh, pointsGroup, false, false, false);\r\n break;\r\n case PointColor.Random:\r\n this._setPointsColorOrUV(mesh, pointsGroup, false);\r\n break;\r\n case PointColor.Stated:\r\n this._setPointsColorOrUV(mesh, pointsGroup, false, undefined, undefined, <Color4>color, range);\r\n break;\r\n }\r\n this.nbParticles += nb;\r\n this._groupCounter++;\r\n return this._groupCounter - 1;\r\n }\r\n\r\n /**\r\n * Adds points to the PCS inside the model shape\r\n * @param mesh is any Mesh object that will be used as a surface model for the points\r\n * @param nb (positive integer) the number of particles to be created from this model\r\n * @param colorWith determines whether a point is colored using color (default), uv, random, stated or none (invisible)\r\n * @param color (color4) to be used when colorWith is stated or color (number) when used to specify texture position\r\n * @param range (number from 0 to 1) to determine the variation in shape and tone for a stated color\r\n * @returns the number of groups in the system\r\n */\r\n public addVolumePoints(mesh: Mesh, nb: number, colorWith?: number, color?: Color4 | number, range?: number): number {\r\n let colored = colorWith ? colorWith : PointColor.Random;\r\n if (isNaN(colored) || colored < 0 || colored > 3) {\r\n colored = PointColor.Random;\r\n }\r\n\r\n const meshPos = <FloatArray>mesh.getVerticesData(VertexBuffer.PositionKind);\r\n const meshInd = <IndicesArray>mesh.getIndices();\r\n\r\n this._groups.push(this._groupCounter);\r\n const pointsGroup = new PointsGroup(this._groupCounter, null);\r\n\r\n pointsGroup._groupDensity = this._calculateDensity(nb, meshPos, meshInd);\r\n if (colored === PointColor.Color) {\r\n pointsGroup._textureNb = <number>color ? <number>color : 0;\r\n } else {\r\n color = <Color4>color ? <Color4>color : new Color4(1, 1, 1, 1);\r\n }\r\n switch (colored) {\r\n case PointColor.Color:\r\n this._colorFromTexture(mesh, pointsGroup, true);\r\n break;\r\n case PointColor.UV:\r\n this._setPointsColorOrUV(mesh, pointsGroup, true, false, false);\r\n break;\r\n case PointColor.Random:\r\n this._setPointsColorOrUV(mesh, pointsGroup, true);\r\n break;\r\n case PointColor.Stated:\r\n this._setPointsColorOrUV(mesh, pointsGroup, true, undefined, undefined, <Color4>color, range);\r\n break;\r\n }\r\n this.nbParticles += nb;\r\n this._groupCounter++;\r\n return this._groupCounter - 1;\r\n }\r\n\r\n /**\r\n * Sets all the particles : this method actually really updates the mesh according to the particle positions, rotations, colors, textures, etc.\r\n * This method calls `updateParticle()` for each particle of the SPS.\r\n * For an animated SPS, it is usually called within the render loop.\r\n * @param start The particle index in the particle array where to start to compute the particle property values _(default 0)_\r\n * @param end The particle index in the particle array where to stop to compute the particle property values _(default nbParticle - 1)_\r\n * @param update If the mesh must be finally updated on this call after all the particle computations _(default true)_\r\n * @returns the PCS.\r\n */\r\n public setParticles(start: number = 0, end: number = this.nbParticles - 1, update: boolean = true): PointsCloudSystem {\r\n if (!this._updatable || !this._isReady) {\r\n return this;\r\n }\r\n\r\n // custom beforeUpdate\r\n this.beforeUpdateParticles(start, end, update);\r\n\r\n const rotMatrix = TmpVectors.Matrix[0];\r\n const mesh = this.mesh;\r\n const colors32 = this._colors32;\r\n const positions32 = this._positions32;\r\n const uvs32 = this._uvs32;\r\n\r\n const tempVectors = TmpVectors.Vector3;\r\n const camAxisX = tempVectors[5].copyFromFloats(1.0, 0.0, 0.0);\r\n const camAxisY = tempVectors[6].copyFromFloats(0.0, 1.0, 0.0);\r\n const camAxisZ = tempVectors[7].copyFromFloats(0.0, 0.0, 1.0);\r\n const minimum = tempVectors[8].setAll(Number.MAX_VALUE);\r\n const maximum = tempVectors[9].setAll(-Number.MAX_VALUE);\r\n\r\n Matrix.IdentityToRef(rotMatrix);\r\n let idx: number; // current index of the particle\r\n\r\n if (this.mesh?.isFacetDataEnabled) {\r\n this._computeBoundingBox = true;\r\n }\r\n\r\n end = end >= this.nbParticles ? this.nbParticles - 1 : end;\r\n if (this._computeBoundingBox) {\r\n if (start != 0 || end != this.nbParticles - 1) {\r\n // only some particles are updated, then use the current existing BBox basis. Note : it can only increase.\r\n const boundingInfo = this.mesh?.getBoundingInfo();\r\n if (boundingInfo) {\r\n minimum.copyFrom(boundingInfo.minimum);\r\n maximum.copyFrom(boundingInfo.maximum);\r\n }\r\n }\r\n }\r\n\r\n let pindex: number; //index in positions array\r\n let cindex: number; //index in color array\r\n let uindex: number; //index in uv array\r\n\r\n // particle loop\r\n for (let p = start; p <= end; p++) {\r\n const particle = this.particles[p];\r\n idx = particle.idx;\r\n pindex = 3 * idx;\r\n cindex = 4 * idx;\r\n uindex = 2 * idx;\r\n\r\n // call to custom user function to update the particle properties\r\n this.updateParticle(particle);\r\n\r\n const particleRotationMatrix = particle._rotationMatrix;\r\n const particlePosition = particle.position;\r\n const particleGlobalPosition = particle._globalPosition;\r\n\r\n if (this._computeParticleRotation) {\r\n particle.getRotationMatrix(rotMatrix);\r\n }\r\n\r\n const particleHasParent = particle.parentId !== null;\r\n if (particleHasParent) {\r\n const parent = this.particles[particle.parentId!];\r\n const parentRotationMatrix = parent._rotationMatrix;\r\n const parentGlobalPosition = parent._globalPosition;\r\n\r\n const rotatedY = particlePosition.x * parentRotationMatrix[1] + particlePosition.y * parentRotationMatrix[4] + particlePosition.z * parentRotationMatrix[7];\r\n const rotatedX = particlePosition.x * parentRotationMatrix[0] + particlePosition.y * parentRotationMatrix[3] + particlePosition.z * parentRotationMatrix[6];\r\n const rotatedZ = particlePosition.x * parentRotationMatrix[2] + particlePosition.y * parentRotationMatrix[5] + particlePosition.z * parentRotationMatrix[8];\r\n\r\n particleGlobalPosition.x = parentGlobalPosition.x + rotatedX;\r\n particleGlobalPosition.y = parentGlobalPosition.y + rotatedY;\r\n particleGlobalPosition.z = parentGlobalPosition.z + rotatedZ;\r\n\r\n if (this._computeParticleRotation) {\r\n const rotMatrixValues = rotMatrix.m;\r\n particleRotationMatrix[0] =\r\n rotMatrixValues[0] * parentRotationMatrix[0] + rotMatrixValues[1] * parentRotationMatrix[3] + rotMatrixValues[2] * parentRotationMatrix[6];\r\n particleRotationMatrix[1] =\r\n rotMatrixValues[0] * parentRotationMatrix[1] + rotMatrixValues[1] * parentRotationMatrix[4] + rotMatrixValues[2] * parentRotationMatrix[7];\r\n particleRotationMatrix[2] =\r\n rotMatrixValues[0] * parentRotationMatrix[2] + rotMatrixValues[1] * parentRotationMatrix[5] + rotMatrixValues[2] * parentRotationMatrix[8];\r\n particleRotationMatrix[3] =\r\n rotMatrixValues[4] * parentRotationMatrix[0] + rotMatrixValues[5] * parentRotationMatrix[3] + rotMatrixValues[6] * parentRotationMatrix[6];\r\n particleRotationMatrix[4] =\r\n rotMatrixValues[4] * parentRotationMatrix[1] + rotMatrixValues[5] * parentRotationMatrix[4] + rotMatrixValues[6] * parentRotationMatrix[7];\r\n particleRotationMatrix[5] =\r\n rotMatrixValues[4] * parentRotationMatrix[2] + rotMatrixValues[5] * parentRotationMatrix[5] + rotMatrixValues[6] * parentRotationMatrix[8];\r\n particleRotationMatrix[6] =\r\n rotMatrixValues[8] * parentRotationMatrix[0] + rotMatrixValues[9] * parentRotationMatrix[3] + rotMatrixValues[10] * parentRotationMatrix[6];\r\n particleRotationMatrix[7] =\r\n rotMatrixValues[8] * parentRotationMatrix[1] + rotMatrixValues[9] * parentRotationMatrix[4] + rotMatrixValues[10] * parentRotationMatrix[7];\r\n particleRotationMatrix[8] =\r\n rotMatrixValues[8] * parentRotationMatrix[2] + rotMatrixValues[9] * parentRotationMatrix[5] + rotMatrixValues[10] * parentRotationMatrix[8];\r\n }\r\n } else {\r\n particleGlobalPosition.x = 0;\r\n particleGlobalPosition.y = 0;\r\n particleGlobalPosition.z = 0;\r\n\r\n if (this._computeParticleRotation) {\r\n const rotMatrixValues = rotMatrix.m;\r\n particleRotationMatrix[0] = rotMatrixValues[0];\r\n particleRotationMatrix[1] = rotMatrixValues[1];\r\n particleRotationMatrix[2] = rotMatrixValues[2];\r\n particleRotationMatrix[3] = rotMatrixValues[4];\r\n particleRotationMatrix[4] = rotMatrixValues[5];\r\n particleRotationMatrix[5] = rotMatrixValues[6];\r\n particleRotationMatrix[6] = rotMatrixValues[8];\r\n particleRotationMatrix[7] = rotMatrixValues[9];\r\n particleRotationMatrix[8] = rotMatrixValues[10];\r\n }\r\n }\r\n\r\n const pivotBackTranslation = tempVectors[11];\r\n if (particle.translateFromPivot) {\r\n pivotBackTranslation.setAll(0.0);\r\n } else {\r\n pivotBackTranslation.copyFrom(particle.pivot);\r\n }\r\n\r\n // positions\r\n const tmpVertex = tempVectors[0];\r\n tmpVertex.copyFrom(particle.position);\r\n const vertexX = tmpVertex.x - particle.pivot.x;\r\n const vertexY = tmpVertex.y - particle.pivot.y;\r\n const vertexZ = tmpVertex.z - particle.pivot.z;\r\n\r\n let rotatedX = vertexX * particleRotationMatrix[0] + vertexY * particleRotationMatrix[3] + vertexZ * particleRotationMatrix[6];\r\n let rotatedY = vertexX * particleRotationMatrix[1] + vertexY * particleRotationMatrix[4] + vertexZ * particleRotationMatrix[7];\r\n let rotatedZ = vertexX * particleRotationMatrix[2] + vertexY * particleRotationMatrix[5] + vertexZ * particleRotationMatrix[8];\r\n\r\n rotatedX += pivotBackTranslation.x;\r\n rotatedY += pivotBackTranslation.y;\r\n rotatedZ += pivotBackTranslation.z;\r\n\r\n const px = (positions32[pindex] = particleGlobalPosition.x + camAxisX.x * rotatedX + camAxisY.x * rotatedY + camAxisZ.x * rotatedZ);\r\n const py = (positions32[pindex + 1] = particleGlobalPosition.y + camAxisX.y * rotatedX + camAxisY.y * rotatedY + camAxisZ.y * rotatedZ);\r\n const pz = (positions32[pindex + 2] = particleGlobalPosition.z + camAxisX.z * rotatedX + camAxisY.z * rotatedY + camAxisZ.z * rotatedZ);\r\n\r\n if (this._computeBoundingBox) {\r\n minimum.minimizeInPlaceFromFloats(px, py, pz);\r\n maximum.maximizeInPlaceFromFloats(px, py, pz);\r\n }\r\n\r\n if (this._computeParticleColor && particle.color) {\r\n const color = particle.color;\r\n const colors32 = this._colors32;\r\n colors32[cindex] = color.r;\r\n colors32[cindex + 1] = color.g;\r\n colors32[cindex + 2] = color.b;\r\n colors32[cindex + 3] = color.a;\r\n }\r\n if (this._computeParticleTexture && particle.uv) {\r\n const uv = particle.uv;\r\n const uvs32 = this._uvs32;\r\n uvs32[uindex] = uv.x;\r\n uvs32[uindex + 1] = uv.y;\r\n }\r\n }\r\n\r\n // if the VBO must be updated\r\n if (mesh) {\r\n if (update) {\r\n if (this._computeParticleColor) {\r\n mesh.updateVerticesData(VertexBuffer.ColorKind, colors32, false, false);\r\n }\r\n if (this._computeParticleTexture) {\r\n mesh.updateVerticesData(VertexBuffer.UVKind, uvs32, false, false);\r\n }\r\n mesh.updateVerticesData(VertexBuffer.PositionKind, positions32, false, false);\r\n }\r\n\r\n if (this._computeBoundingBox) {\r\n if (mesh.hasBoundingInfo) {\r\n mesh.getBoundingInfo().reConstruct(minimum, maximum, mesh._worldMatrix);\r\n } else {\r\n mesh.buildBoundingInfo(minimum, maximum, mesh._worldMatrix);\r\n }\r\n }\r\n }\r\n this.afterUpdateParticles(start, end, update);\r\n return this;\r\n }\r\n\r\n /**\r\n * Disposes the PCS.\r\n */\r\n public dispose(): void {\r\n this.mesh?.dispose();\r\n this.vars = null;\r\n // drop references to internal big arrays for the GC\r\n (<any>this._positions) = null;\r\n (<any>this._indices) = null;\r\n (<any>this._normals) = null;\r\n (<any>this._uvs) = null;\r\n (<any>this._colors) = null;\r\n (<any>this._indices32) = null;\r\n (<any>this._positions32) = null;\r\n (<any>this._uvs32) = null;\r\n (<any>this._colors32) = null;\r\n }\r\n\r\n /**\r\n * Visibility helper : Recomputes the visible size according to the mesh bounding box\r\n * doc :\r\n * @returns the PCS.\r\n */\r\n public refreshVisibleSize(): PointsCloudSystem {\r\n if (!this._isVisibilityBoxLocked) {\r\n this.mesh?.refreshBoundingInfo();\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Visibility helper : Sets the size of a visibility box, this sets the underlying mesh bounding box.\r\n * @param size the size (float) of the visibility box\r\n * note : this doesn't lock the PCS mesh bounding box.\r\n * doc :\r\n */\r\n public setVisibilityBox(size: number): void {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n\r\n const vis = size / 2;\r\n this.mesh.buildBoundingInfo(new Vector3(-vis, -vis, -vis), new Vector3(vis, vis, vis));\r\n }\r\n\r\n /**\r\n * Gets whether the PCS is always visible or not\r\n * doc :\r\n */\r\n public get isAlwaysVisible(): boolean {\r\n return this._alwaysVisible;\r\n }\r\n\r\n /**\r\n * Sets the PCS as always visible or not\r\n * doc :\r\n */\r\n public set isAlwaysVisible(val: boolean) {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n\r\n this._alwaysVisible = val;\r\n this.mesh.alwaysSelectAsActiveMesh = val;\r\n }\r\n\r\n /**\r\n * Tells to `setParticles()` to compute the particle rotations or not\r\n * Default value : false. The PCS is faster when it's set to false\r\n * Note : particle rotations are only applied to parent particles\r\n * Note : the particle rotations aren't stored values, so setting `computeParticleRotation` to false will prevents the particle to rotate\r\n */\r\n public set computeParticleRotation(val: boolean) {\r\n this._computeParticleRotation = val;\r\n }\r\n\r\n /**\r\n * Tells to `setParticles()` to compute the particle colors or not.\r\n * Default value : true. The PCS is faster when it's set to false.\r\n * Note : the particle colors are stored values, so setting `computeParticleColor` to false will keep yet the last colors set.\r\n */\r\n public set computeParticleColor(val: boolean) {\r\n this._computeParticleColor = val;\r\n }\r\n\r\n public set computeParticleTexture(val: boolean) {\r\n this._computeParticleTexture = val;\r\n }\r\n /**\r\n * Gets if `setParticles()` computes the particle colors or not.\r\n * Default value : false. The PCS is faster when it's set to false.\r\n * Note : the particle colors are stored values, so setting `computeParticleColor` to false will keep yet the last colors set.\r\n */\r\n public get computeParticleColor(): boolean {\r\n return this._computeParticleColor;\r\n }\r\n /**\r\n * Gets if `setParticles()` computes the particle textures or not.\r\n * Default value : false. The PCS is faster when it's set to false.\r\n * Note : the particle textures are stored values, so setting `computeParticleTexture` to false will keep yet the last colors set.\r\n */\r\n public get computeParticleTexture(): boolean {\r\n return this._computeParticleTexture;\r\n }\r\n /**\r\n * Tells to `setParticles()` to compute or not the mesh bounding box when computing the particle positions.\r\n */\r\n public set computeBoundingBox(val: boolean) {\r\n this._computeBoundingBox = val;\r\n }\r\n /**\r\n * Gets if `setParticles()` computes or not the mesh bounding box when computing the particle positions.\r\n */\r\n public get computeBoundingBox(): boolean {\r\n return this._computeBoundingBox;\r\n }\r\n\r\n // =======================================================================\r\n // Particle behavior logic\r\n // these following methods may be overwritten by users to fit their needs\r\n\r\n /**\r\n * This function does nothing. It may be overwritten to set all the particle first values.\r\n * The PCS doesn't call this function, you may have to call it by your own.\r\n * doc :\r\n */\r\n public initParticles(): void {}\r\n\r\n /**\r\n * This function does nothing. It may be overwritten to recycle a particle\r\n * The PCS doesn't call this function, you can to call it\r\n * doc :\r\n * @param particle The particle to recycle\r\n * @returns the recycled particle\r\n */\r\n public recycleParticle(particle: CloudPoint): CloudPoint {\r\n return particle;\r\n }\r\n\r\n /**\r\n * Updates a particle : this function should be overwritten by the user.\r\n * It is called on each particle by `setParticles()`. This is the place to code each particle behavior.\r\n * doc :\r\n * @example : just set a particle position or velocity and recycle conditions\r\n * @param particle The particle to update\r\n * @returns the updated particle\r\n */\r\n public updateParticle(particle: CloudPoint): CloudPoint {\r\n return particle;\r\n }\r\n\r\n /**\r\n * This will be called before any other treatment by `setParticles()` and will be passed three parameters.\r\n * This does nothing and may be overwritten by the user.\r\n * @param start the particle index in the particle array where to start to iterate, same than the value passed to setParticle()\r\n * @param stop the particle index in the particle array where to stop to iterate, same than the value passed to setParticle()\r\n * @param update the boolean update value actually passed to setParticles()\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public beforeUpdateParticles(start?: number, stop?: number, update?: boolean): void {}\r\n /**\r\n * This will be called by `setParticles()` after all the other treatments and just before the actual mesh update.\r\n * This will be passed three parameters.\r\n * This does nothing and may be overwritten by the user.\r\n * @param start the particle index in the particle array where to start to iterate, same than the value passed to setParticle()\r\n * @param stop the particle index in the particle array where to stop to iterate, same than the value passed to setParticle()\r\n * @param update the boolean update value actually passed to setParticles()\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public afterUpdateParticles(start?: number, stop?: number, update?: boolean): void {}\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"pointsCloudSystem.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/pointsCloudSystem.ts"],"names":[],"mappings":"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,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBAC/I,sBAAsB,CAAC,CAAC,CAAC;wBACrB,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBAC/I,sBAAsB,CAAC,CAAC,CAAC;wBACrB,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBAC/I,sBAAsB,CAAC,CAAC,CAAC;wBACrB,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBAC/I,sBAAsB,CAAC,CAAC,CAAC;wBACrB,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBAChJ,sBAAsB,CAAC,CAAC,CAAC;wBACrB,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBAChJ,sBAAsB,CAAC,CAAC,CAAC;wBACrB,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,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","sourcesContent":["import { type IndicesArray, type FloatArray } from \"../types\";\r\nimport { Color4, Color3 } from \"../Maths/math\";\r\nimport { Vector2, Vector3, Vector4, TmpVectors, Matrix } from \"../Maths/math.vector.pure\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { VertexBuffer } from \"../Buffers/buffer.pure\";\r\nimport { VertexData } from \"../Meshes/mesh.vertexData\";\r\nimport { Mesh } from \"../Meshes/mesh.pure\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { type Scene, type IDisposable } from \"../scene\";\r\nimport { CloudPoint, PointsGroup } from \"./cloudPoint\";\r\nimport { Ray } from \"../Culling/ray.pure\";\r\nimport { type PickingInfo } from \"../Collisions/pickingInfo\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial.pure\";\r\nimport { BaseTexture } from \"./../Materials/Textures/baseTexture.pure\";\r\nimport { RandomRange } from \"../Maths/math.scalar.functions\";\r\nimport { type Material } from \"../Materials/material\";\r\n\r\n/** Defines the 4 color options */\r\nexport const enum PointColor {\r\n /** color value */\r\n Color = 2,\r\n /** uv value */\r\n UV = 1,\r\n /** random value */\r\n Random = 0,\r\n /** stated value */\r\n Stated = 3,\r\n}\r\n\r\n/**\r\n * The PointCloudSystem (PCS) is a single updatable mesh. The points corresponding to the vertices of this big mesh.\r\n * As it is just a mesh, the PointCloudSystem has all the same properties as any other BJS mesh : not more, not less. It can be scaled, rotated, translated, enlighted, textured, moved, etc.\r\n\r\n * The PointCloudSystem is also a particle system, with each point being a particle. It provides some methods to manage the particles.\r\n * However it is behavior agnostic. This means it has no emitter, no particle physics, no particle recycler. You have to implement your own behavior.\r\n *\r\n * Full documentation here : TO BE ENTERED\r\n */\r\nexport class PointsCloudSystem implements IDisposable {\r\n /**\r\n * The PCS array of cloud point objects. Just access each particle as with any classic array.\r\n * Example : var p = SPS.particles[i];\r\n */\r\n public particles: CloudPoint[] = new Array<CloudPoint>();\r\n /**\r\n * The PCS total number of particles. Read only. Use PCS.counter instead if you need to set your own value.\r\n */\r\n public nbParticles: number = 0;\r\n /**\r\n * This a counter for your own usage. It's not set by any SPS functions.\r\n */\r\n public counter: number = 0;\r\n /**\r\n * The PCS name. This name is also given to the underlying mesh.\r\n */\r\n public name: string;\r\n /**\r\n * The PCS mesh. It's a standard BJS Mesh, so all the methods from the Mesh class are available.\r\n */\r\n public mesh?: Mesh;\r\n /**\r\n * This empty object is intended to store some PCS specific or temporary values in order to lower the Garbage Collector activity.\r\n * Please read :\r\n */\r\n public vars: any = {};\r\n /**\r\n * @internal\r\n */\r\n public _size: number; //size of each point particle\r\n\r\n private _scene: Scene;\r\n private _promises: Array<Promise<any>> = [];\r\n private _positions: number[] = new Array<number>();\r\n private _indices: number[] = new Array<number>();\r\n private _normals: number[] = new Array<number>();\r\n private _colors: number[] = new Array<number>();\r\n private _uvs: number[] = new Array<number>();\r\n private _indices32: IndicesArray; // used as depth sorted array if depth sort enabled, else used as typed indices\r\n private _positions32: Float32Array; // updated positions for the VBO\r\n private _colors32: Float32Array;\r\n private _uvs32: Float32Array;\r\n private _updatable: boolean = true;\r\n private _isVisibilityBoxLocked = false;\r\n private _alwaysVisible: boolean = false;\r\n private _groups: number[] = new Array<number>(); //start indices for each group of particles\r\n private _groupCounter: number = 0;\r\n private _computeParticleColor: boolean = true;\r\n private _computeParticleTexture: boolean = true;\r\n private _computeParticleRotation: boolean = true;\r\n private _computeBoundingBox: boolean = false;\r\n private _isReady: boolean = false;\r\n\r\n /**\r\n * Gets the particle positions computed by the Point Cloud System\r\n */\r\n public get positions(): Float32Array {\r\n return this._positions32;\r\n }\r\n\r\n /**\r\n * Gets the particle colors computed by the Point Cloud System\r\n */\r\n public get colors(): Float32Array {\r\n return this._colors32;\r\n }\r\n\r\n /**\r\n * Gets the particle uvs computed by the Point Cloud System\r\n */\r\n public get uvs(): Float32Array {\r\n return this._uvs32;\r\n }\r\n\r\n /**\r\n * Creates a PCS (Points Cloud System) object\r\n * @param name (String) is the PCS name, this will be the underlying mesh name\r\n * @param pointSize (number) is the size for each point. Has no effect on a WebGPU engine.\r\n * @param scene (Scene) is the scene in which the PCS is added\r\n * @param options defines the options of the PCS e.g.\r\n * * updatable (optional boolean, default true) : if the PCS must be updatable or immutable\r\n */\r\n constructor(name: string, pointSize: number, scene: Scene, options?: { updatable?: boolean }) {\r\n this.name = name;\r\n this._size = pointSize;\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n if (options && options.updatable !== undefined) {\r\n this._updatable = options.updatable;\r\n } else {\r\n this._updatable = true;\r\n }\r\n }\r\n\r\n /**\r\n * Builds the PCS underlying mesh. Returns a standard Mesh.\r\n * If no points were added to the PCS, the returned mesh is just a single point.\r\n * @param material The material to use to render the mesh. If not provided, will create a default one\r\n * @returns a promise for the created mesh\r\n */\r\n public async buildMeshAsync(material?: Material): Promise<Mesh> {\r\n await Promise.all(this._promises);\r\n this._isReady = true;\r\n return await this._buildMeshAsync(material);\r\n }\r\n\r\n private async _buildMeshAsync(material?: Material): Promise<Mesh> {\r\n if (this.nbParticles === 0) {\r\n this.addPoints(1);\r\n }\r\n\r\n this._positions32 = new Float32Array(this._positions);\r\n this._uvs32 = new Float32Array(this._uvs);\r\n this._colors32 = new Float32Array(this._colors);\r\n\r\n const vertexData = new VertexData();\r\n vertexData.set(this._positions32, VertexBuffer.PositionKind);\r\n\r\n if (this._uvs32.length > 0) {\r\n vertexData.set(this._uvs32, VertexBuffer.UVKind);\r\n }\r\n let ec = 0; //emissive color value 0 for UVs, 1 for color\r\n if (this._colors32.length > 0) {\r\n ec = 1;\r\n vertexData.set(this._colors32, VertexBuffer.ColorKind);\r\n }\r\n const mesh = new Mesh(this.name, this._scene);\r\n vertexData.applyToMesh(mesh, this._updatable);\r\n this.mesh = mesh;\r\n\r\n // free memory\r\n (<any>this._positions) = null;\r\n (<any>this._uvs) = null;\r\n (<any>this._colors) = null;\r\n\r\n if (!this._updatable) {\r\n this.particles.length = 0;\r\n }\r\n\r\n let mat = material;\r\n\r\n if (!mat) {\r\n mat = new StandardMaterial(\"point cloud material\", this._scene);\r\n (<StandardMaterial>mat).emissiveColor = new Color3(ec, ec, ec);\r\n (<StandardMaterial>mat).disableLighting = true;\r\n (<StandardMaterial>mat).pointsCloud = true;\r\n (<StandardMaterial>mat).pointSize = this._size;\r\n }\r\n mesh.material = mat;\r\n\r\n return mesh;\r\n }\r\n\r\n // adds a new particle object in the particles array\r\n private _addParticle(idx: number, group: PointsGroup, groupId: number, idxInGroup: number): CloudPoint {\r\n const cp = new CloudPoint(idx, group, groupId, idxInGroup, this);\r\n this.particles.push(cp);\r\n return cp;\r\n }\r\n\r\n private _randomUnitVector(particle: CloudPoint): void {\r\n particle.position = new Vector3(Math.random(), Math.random(), Math.random());\r\n particle.color = new Color4(1, 1, 1, 1);\r\n }\r\n\r\n private _getColorIndicesForCoord(pointsGroup: PointsGroup, x: number, y: number, width: number): Color4 {\r\n const imageData = <Uint8Array>pointsGroup._groupImageData;\r\n const color = y * (width * 4) + x * 4;\r\n const colorIndices = [color, color + 1, color + 2, color + 3];\r\n const redIndex = colorIndices[0];\r\n const greenIndex = colorIndices[1];\r\n const blueIndex = colorIndices[2];\r\n const alphaIndex = colorIndices[3];\r\n const redForCoord = imageData[redIndex];\r\n const greenForCoord = imageData[greenIndex];\r\n const blueForCoord = imageData[blueIndex];\r\n const alphaForCoord = imageData[alphaIndex];\r\n return new Color4(redForCoord / 255, greenForCoord / 255, blueForCoord / 255, alphaForCoord);\r\n }\r\n\r\n private _setPointsColorOrUV(\r\n mesh: Mesh,\r\n pointsGroup: PointsGroup,\r\n isVolume: boolean,\r\n colorFromTexture?: boolean,\r\n hasTexture?: boolean,\r\n color?: Color4,\r\n range?: number,\r\n uvSetIndex?: number\r\n ): void {\r\n uvSetIndex = uvSetIndex ?? 0;\r\n\r\n if (isVolume) {\r\n mesh.updateFacetData();\r\n }\r\n\r\n const boundInfo = mesh.getBoundingInfo();\r\n const diameter = 2 * boundInfo.boundingSphere.radius;\r\n\r\n let meshPos = <FloatArray>mesh.getVerticesData(VertexBuffer.PositionKind);\r\n const meshInd = <IndicesArray>mesh.getIndices();\r\n const meshUV = <FloatArray>mesh.getVerticesData(VertexBuffer.UVKind + (uvSetIndex ? uvSetIndex + 1 : \"\"));\r\n const meshCol = <FloatArray>mesh.getVerticesData(VertexBuffer.ColorKind);\r\n\r\n const place = Vector3.Zero();\r\n mesh.computeWorldMatrix();\r\n const meshMatrix: Matrix = mesh.getWorldMatrix();\r\n if (!meshMatrix.isIdentity()) {\r\n meshPos = meshPos.slice(0);\r\n for (let p = 0; p < meshPos.length / 3; p++) {\r\n Vector3.TransformCoordinatesFromFloatsToRef(meshPos[3 * p], meshPos[3 * p + 1], meshPos[3 * p + 2], meshMatrix, place);\r\n meshPos[3 * p] = place.x;\r\n meshPos[3 * p + 1] = place.y;\r\n meshPos[3 * p + 2] = place.z;\r\n }\r\n }\r\n\r\n let idxPoints: number;\r\n\r\n let id0: number;\r\n let id1: number;\r\n let id2: number;\r\n let v0X: number;\r\n let v0Y: number;\r\n let v0Z: number;\r\n let v1X: number;\r\n let v1Y: number;\r\n let v1Z: number;\r\n let v2X: number;\r\n let v2Y: number;\r\n let v2Z: number;\r\n const vertex0 = Vector3.Zero();\r\n const vertex1 = Vector3.Zero();\r\n const vertex2 = Vector3.Zero();\r\n const vec0 = Vector3.Zero();\r\n const vec1 = Vector3.Zero();\r\n\r\n let uv0X: number;\r\n let uv0Y: number;\r\n let uv1X: number;\r\n let uv1Y: number;\r\n let uv2X: number;\r\n let uv2Y: number;\r\n const uv0 = Vector2.Zero();\r\n const uv1 = Vector2.Zero();\r\n const uv2 = Vector2.Zero();\r\n const uvec0 = Vector2.Zero();\r\n const uvec1 = Vector2.Zero();\r\n\r\n let col0X: number;\r\n let col0Y: number;\r\n let col0Z: number;\r\n let col0A: number;\r\n let col1X: number;\r\n let col1Y: number;\r\n let col1Z: number;\r\n let col1A: number;\r\n let col2X: number;\r\n let col2Y: number;\r\n let col2Z: number;\r\n let col2A: number;\r\n const col0 = Vector4.Zero();\r\n const col1 = Vector4.Zero();\r\n const col2 = Vector4.Zero();\r\n const colvec0 = Vector4.Zero();\r\n const colvec1 = Vector4.Zero();\r\n\r\n let lamda: number;\r\n let mu: number;\r\n range = range ? range : 0;\r\n\r\n let facetPoint: Vector3;\r\n let uvPoint: Vector2;\r\n let colPoint: Vector4 = new Vector4(0, 0, 0, 1);\r\n\r\n let norm: Vector3;\r\n let tang: Vector3;\r\n let biNorm: Vector3;\r\n let angle: number;\r\n let facetPlaneVec: Vector3;\r\n\r\n let gap: number;\r\n let distance: number;\r\n const ray = new Ray(Vector3.Zero(), new Vector3(1, 0, 0));\r\n let pickInfo: PickingInfo;\r\n let direction: Vector3;\r\n\r\n for (let index = 0; index < meshInd.length / 3; index++) {\r\n id0 = meshInd[3 * index];\r\n id1 = meshInd[3 * index + 1];\r\n id2 = meshInd[3 * index + 2];\r\n v0X = meshPos[3 * id0];\r\n v0Y = meshPos[3 * id0 + 1];\r\n v0Z = meshPos[3 * id0 + 2];\r\n v1X = meshPos[3 * id1];\r\n v1Y = meshPos[3 * id1 + 1];\r\n v1Z = meshPos[3 * id1 + 2];\r\n v2X = meshPos[3 * id2];\r\n v2Y = meshPos[3 * id2 + 1];\r\n v2Z = meshPos[3 * id2 + 2];\r\n vertex0.set(v0X, v0Y, v0Z);\r\n vertex1.set(v1X, v1Y, v1Z);\r\n vertex2.set(v2X, v2Y, v2Z);\r\n vertex1.subtractToRef(vertex0, vec0);\r\n vertex2.subtractToRef(vertex1, vec1);\r\n\r\n if (meshUV) {\r\n uv0X = meshUV[2 * id0];\r\n uv0Y = meshUV[2 * id0 + 1];\r\n uv1X = meshUV[2 * id1];\r\n uv1Y = meshUV[2 * id1 + 1];\r\n uv2X = meshUV[2 * id2];\r\n uv2Y = meshUV[2 * id2 + 1];\r\n uv0.set(uv0X, uv0Y);\r\n uv1.set(uv1X, uv1Y);\r\n uv2.set(uv2X, uv2Y);\r\n uv1.subtractToRef(uv0, uvec0);\r\n uv2.subtractToRef(uv1, uvec1);\r\n }\r\n\r\n if (meshCol && colorFromTexture) {\r\n col0X = meshCol[4 * id0];\r\n col0Y = meshCol[4 * id0 + 1];\r\n col0Z = meshCol[4 * id0 + 2];\r\n col0A = meshCol[4 * id0 + 3];\r\n col1X = meshCol[4 * id1];\r\n col1Y = meshCol[4 * id1 + 1];\r\n col1Z = meshCol[4 * id1 + 2];\r\n col1A = meshCol[4 * id1 + 3];\r\n col2X = meshCol[4 * id2];\r\n col2Y = meshCol[4 * id2 + 1];\r\n col2Z = meshCol[4 * id2 + 2];\r\n col2A = meshCol[4 * id2 + 3];\r\n col0.set(col0X, col0Y, col0Z, col0A);\r\n col1.set(col1X, col1Y, col1Z, col1A);\r\n col2.set(col2X, col2Y, col2Z, col2A);\r\n col1.subtractToRef(col0, colvec0);\r\n col2.subtractToRef(col1, colvec1);\r\n }\r\n\r\n let width: number;\r\n let height: number;\r\n let deltaS: number;\r\n let deltaV: number;\r\n let h: number;\r\n let s: number;\r\n let v: number;\r\n let hsvCol: Color3;\r\n const statedColor: Color3 = new Color3(0, 0, 0);\r\n const colPoint3: Color3 = new Color3(0, 0, 0);\r\n let pointColors: Color4;\r\n let particle: CloudPoint;\r\n\r\n for (let i = 0; i < pointsGroup._groupDensity[index]; i++) {\r\n idxPoints = this.particles.length;\r\n this._addParticle(idxPoints, pointsGroup, this._groupCounter, index + i);\r\n particle = this.particles[idxPoints];\r\n //form a point inside the facet v0, v1, v2;\r\n lamda = Math.sqrt(RandomRange(0, 1));\r\n mu = RandomRange(0, 1);\r\n facetPoint = vertex0.add(vec0.scale(lamda)).add(vec1.scale(lamda * mu));\r\n if (isVolume) {\r\n norm = mesh.getFacetNormal(index).normalize().scale(-1);\r\n tang = vec0.clone().normalize();\r\n biNorm = Vector3.Cross(norm, tang);\r\n angle = RandomRange(0, 2 * Math.PI);\r\n facetPlaneVec = tang.scale(Math.cos(angle)).add(biNorm.scale(Math.sin(angle)));\r\n angle = RandomRange(0.1, Math.PI / 2);\r\n direction = facetPlaneVec.scale(Math.cos(angle)).add(norm.scale(Math.sin(angle)));\r\n\r\n ray.origin = facetPoint.add(direction.scale(0.00001));\r\n ray.direction = direction;\r\n ray.length = diameter;\r\n pickInfo = ray.intersectsMesh(mesh);\r\n if (pickInfo.hit) {\r\n distance = pickInfo.pickedPoint!.subtract(facetPoint).length();\r\n gap = RandomRange(0, 1) * distance;\r\n facetPoint.addInPlace(direction.scale(gap));\r\n }\r\n }\r\n particle.position = facetPoint.clone();\r\n this._positions.push(particle.position.x, particle.position.y, particle.position.z);\r\n if (colorFromTexture !== undefined) {\r\n if (meshUV) {\r\n uvPoint = uv0.add(uvec0.scale(lamda)).add(uvec1.scale(lamda * mu));\r\n if (colorFromTexture) {\r\n //Set particle color to texture color\r\n if (hasTexture && pointsGroup._groupImageData !== null) {\r\n width = pointsGroup._groupImgWidth;\r\n height = pointsGroup._groupImgHeight;\r\n pointColors = this._getColorIndicesForCoord(pointsGroup, Math.round(uvPoint.x * width), Math.round(uvPoint.y * height), width);\r\n particle.color = pointColors;\r\n this._colors.push(pointColors.r, pointColors.g, pointColors.b, pointColors.a);\r\n } else {\r\n if (meshCol) {\r\n //failure in texture and colors available\r\n colPoint = col0.add(colvec0.scale(lamda)).add(colvec1.scale(lamda * mu));\r\n particle.color = new Color4(colPoint.x, colPoint.y, colPoint.z, colPoint.w);\r\n this._colors.push(colPoint.x, colPoint.y, colPoint.z, colPoint.w);\r\n } else {\r\n colPoint = col0.set(Math.random(), Math.random(), Math.random(), 1);\r\n particle.color = new Color4(colPoint.x, colPoint.y, colPoint.z, colPoint.w);\r\n this._colors.push(colPoint.x, colPoint.y, colPoint.z, colPoint.w);\r\n }\r\n }\r\n } else {\r\n //Set particle uv based on a mesh uv\r\n particle.uv = uvPoint.clone();\r\n this._uvs.push(particle.uv.x, particle.uv.y);\r\n }\r\n }\r\n } else {\r\n if (color) {\r\n statedColor.set(color.r, color.g, color.b);\r\n deltaS = RandomRange(-range, range);\r\n deltaV = RandomRange(-range, range);\r\n hsvCol = statedColor.toHSV();\r\n h = hsvCol.r;\r\n s = hsvCol.g + deltaS;\r\n v = hsvCol.b + deltaV;\r\n if (s < 0) {\r\n s = 0;\r\n }\r\n if (s > 1) {\r\n s = 1;\r\n }\r\n if (v < 0) {\r\n v = 0;\r\n }\r\n if (v > 1) {\r\n v = 1;\r\n }\r\n Color3.HSVtoRGBToRef(h, s, v, colPoint3);\r\n colPoint.set(colPoint3.r, colPoint3.g, colPoint3.b, 1);\r\n } else {\r\n colPoint = col0.set(Math.random(), Math.random(), Math.random(), 1);\r\n }\r\n particle.color = new Color4(colPoint.x, colPoint.y, colPoint.z, colPoint.w);\r\n this._colors.push(colPoint.x, colPoint.y, colPoint.z, colPoint.w);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // stores mesh texture in dynamic texture for color pixel retrieval\r\n // when pointColor type is color for surface points\r\n private _colorFromTexture(mesh: Mesh, pointsGroup: PointsGroup, isVolume: boolean): void {\r\n if (mesh.material === null) {\r\n Logger.Warn(mesh.name + \"has no material.\");\r\n pointsGroup._groupImageData = null;\r\n this._setPointsColorOrUV(mesh, pointsGroup, isVolume, true, false);\r\n return;\r\n }\r\n\r\n const mat = mesh.material;\r\n const textureList: BaseTexture[] = mat.getActiveTextures();\r\n if (textureList.length === 0) {\r\n Logger.Warn(mesh.name + \"has no usable texture.\");\r\n pointsGroup._groupImageData = null;\r\n this._setPointsColorOrUV(mesh, pointsGroup, isVolume, true, false);\r\n return;\r\n }\r\n\r\n const clone = mesh.clone();\r\n clone.setEnabled(false);\r\n this._promises.push(\r\n new Promise((resolve: (_: void) => void) => {\r\n BaseTexture.WhenAllReady(textureList, () => {\r\n let n = pointsGroup._textureNb;\r\n if (n < 0) {\r\n n = 0;\r\n }\r\n if (n > textureList.length - 1) {\r\n n = textureList.length - 1;\r\n }\r\n const finalize = () => {\r\n pointsGroup._groupImgWidth = textureList[n].getSize().width;\r\n pointsGroup._groupImgHeight = textureList[n].getSize().height;\r\n this._setPointsColorOrUV(clone, pointsGroup, isVolume, true, true, undefined, undefined, textureList[n].coordinatesIndex);\r\n clone.dispose();\r\n resolve();\r\n };\r\n pointsGroup._groupImageData = null;\r\n const dataPromise = textureList[n].readPixels();\r\n if (!dataPromise) {\r\n finalize();\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n dataPromise.then((data) => {\r\n pointsGroup._groupImageData = data;\r\n finalize();\r\n });\r\n }\r\n });\r\n })\r\n );\r\n }\r\n\r\n // calculates the point density per facet of a mesh for surface points\r\n private _calculateDensity(nbPoints: number, positions: FloatArray, indices: IndicesArray): number[] {\r\n let id0: number;\r\n let id1: number;\r\n let id2: number;\r\n let v0X: number;\r\n let v0Y: number;\r\n let v0Z: number;\r\n let v1X: number;\r\n let v1Y: number;\r\n let v1Z: number;\r\n let v2X: number;\r\n let v2Y: number;\r\n let v2Z: number;\r\n const vertex0 = Vector3.Zero();\r\n const vertex1 = Vector3.Zero();\r\n const vertex2 = Vector3.Zero();\r\n const vec0 = Vector3.Zero();\r\n const vec1 = Vector3.Zero();\r\n const normal = Vector3.Zero();\r\n\r\n let area: number;\r\n const cumulativeAreas: number[] = [];\r\n let surfaceArea: number = 0;\r\n\r\n const nbFacets = indices.length / 3;\r\n\r\n //surface area\r\n for (let index = 0; index < nbFacets; index++) {\r\n id0 = indices[3 * index];\r\n id1 = indices[3 * index + 1];\r\n id2 = indices[3 * index + 2];\r\n v0X = positions[3 * id0];\r\n v0Y = positions[3 * id0 + 1];\r\n v0Z = positions[3 * id0 + 2];\r\n v1X = positions[3 * id1];\r\n v1Y = positions[3 * id1 + 1];\r\n v1Z = positions[3 * id1 + 2];\r\n v2X = positions[3 * id2];\r\n v2Y = positions[3 * id2 + 1];\r\n v2Z = positions[3 * id2 + 2];\r\n vertex0.set(v0X, v0Y, v0Z);\r\n vertex1.set(v1X, v1Y, v1Z);\r\n vertex2.set(v2X, v2Y, v2Z);\r\n vertex1.subtractToRef(vertex0, vec0);\r\n vertex2.subtractToRef(vertex1, vec1);\r\n Vector3.CrossToRef(vec0, vec1, normal);\r\n area = 0.5 * normal.length();\r\n surfaceArea += area;\r\n cumulativeAreas[index] = surfaceArea;\r\n }\r\n\r\n const density: number[] = new Array<number>(nbFacets);\r\n let remainingPoints = nbPoints;\r\n for (let index = nbFacets - 1; index > 0; index--) {\r\n const cumulativeArea = cumulativeAreas[index];\r\n if (cumulativeArea === 0) {\r\n // avoiding division by 0 upon degenerate triangles\r\n density[index] = 0;\r\n } else {\r\n const area = cumulativeArea - cumulativeAreas[index - 1];\r\n const facetPointsWithFraction = (area / cumulativeArea) * remainingPoints;\r\n const floored = Math.floor(facetPointsWithFraction);\r\n const fraction = facetPointsWithFraction - floored;\r\n const extraPoint = Number(Math.random() < fraction);\r\n const facetPoints = floored + extraPoint;\r\n density[index] = facetPoints;\r\n remainingPoints -= facetPoints;\r\n }\r\n }\r\n density[0] = remainingPoints;\r\n\r\n return density;\r\n }\r\n\r\n /**\r\n * Adds points to the PCS in random positions within a unit sphere\r\n * @param nb (positive integer) the number of particles to be created from this model\r\n * @param pointFunction is an optional javascript function to be called for each particle on PCS creation\r\n * @returns the number of groups in the system\r\n */\r\n public addPoints(nb: number, pointFunction: any = this._randomUnitVector): number {\r\n const pointsGroup = new PointsGroup(this._groupCounter, pointFunction);\r\n let cp: CloudPoint;\r\n\r\n // particles\r\n let idx = this.nbParticles;\r\n for (let i = 0; i < nb; i++) {\r\n cp = this._addParticle(idx, pointsGroup, this._groupCounter, i);\r\n if (pointsGroup && pointsGroup._positionFunction) {\r\n pointsGroup._positionFunction(cp, idx, i);\r\n }\r\n this._positions.push(cp.position.x, cp.position.y, cp.position.z);\r\n if (cp.color) {\r\n this._colors.push(cp.color.r, cp.color.g, cp.color.b, cp.color.a);\r\n }\r\n if (cp.uv) {\r\n this._uvs.push(cp.uv.x, cp.uv.y);\r\n }\r\n idx++;\r\n }\r\n this.nbParticles += nb;\r\n this._groupCounter++;\r\n return this._groupCounter;\r\n }\r\n\r\n /**\r\n * Adds points to the PCS from the surface of the model shape\r\n * @param mesh is any Mesh object that will be used as a surface model for the points\r\n * @param nb (positive integer) the number of particles to be created from this model\r\n * @param colorWith determines whether a point is colored using color (default), uv, random, stated or none (invisible)\r\n * @param color (color4) to be used when colorWith is stated or color (number) when used to specify texture position\r\n * @param range (number from 0 to 1) to determine the variation in shape and tone for a stated color\r\n * @returns the number of groups in the system\r\n */\r\n public addSurfacePoints(mesh: Mesh, nb: number, colorWith?: number, color?: Color4 | number, range?: number): number {\r\n let colored = colorWith ? colorWith : PointColor.Random;\r\n if (isNaN(colored) || colored < 0 || colored > 3) {\r\n colored = PointColor.Random;\r\n }\r\n\r\n const meshPos = <FloatArray>mesh.getVerticesData(VertexBuffer.PositionKind);\r\n const meshInd = <IndicesArray>mesh.getIndices();\r\n\r\n this._groups.push(this._groupCounter);\r\n const pointsGroup = new PointsGroup(this._groupCounter, null);\r\n\r\n pointsGroup._groupDensity = this._calculateDensity(nb, meshPos, meshInd);\r\n if (colored === PointColor.Color) {\r\n pointsGroup._textureNb = <number>color ? <number>color : 0;\r\n } else {\r\n color = <Color4>color ? <Color4>color : new Color4(1, 1, 1, 1);\r\n }\r\n switch (colored) {\r\n case PointColor.Color:\r\n this._colorFromTexture(mesh, pointsGroup, false);\r\n break;\r\n case PointColor.UV:\r\n this._setPointsColorOrUV(mesh, pointsGroup, false, false, false);\r\n break;\r\n case PointColor.Random:\r\n this._setPointsColorOrUV(mesh, pointsGroup, false);\r\n break;\r\n case PointColor.Stated:\r\n this._setPointsColorOrUV(mesh, pointsGroup, false, undefined, undefined, <Color4>color, range);\r\n break;\r\n }\r\n this.nbParticles += nb;\r\n this._groupCounter++;\r\n return this._groupCounter - 1;\r\n }\r\n\r\n /**\r\n * Adds points to the PCS inside the model shape\r\n * @param mesh is any Mesh object that will be used as a surface model for the points\r\n * @param nb (positive integer) the number of particles to be created from this model\r\n * @param colorWith determines whether a point is colored using color (default), uv, random, stated or none (invisible)\r\n * @param color (color4) to be used when colorWith is stated or color (number) when used to specify texture position\r\n * @param range (number from 0 to 1) to determine the variation in shape and tone for a stated color\r\n * @returns the number of groups in the system\r\n */\r\n public addVolumePoints(mesh: Mesh, nb: number, colorWith?: number, color?: Color4 | number, range?: number): number {\r\n let colored = colorWith ? colorWith : PointColor.Random;\r\n if (isNaN(colored) || colored < 0 || colored > 3) {\r\n colored = PointColor.Random;\r\n }\r\n\r\n const meshPos = <FloatArray>mesh.getVerticesData(VertexBuffer.PositionKind);\r\n const meshInd = <IndicesArray>mesh.getIndices();\r\n\r\n this._groups.push(this._groupCounter);\r\n const pointsGroup = new PointsGroup(this._groupCounter, null);\r\n\r\n pointsGroup._groupDensity = this._calculateDensity(nb, meshPos, meshInd);\r\n if (colored === PointColor.Color) {\r\n pointsGroup._textureNb = <number>color ? <number>color : 0;\r\n } else {\r\n color = <Color4>color ? <Color4>color : new Color4(1, 1, 1, 1);\r\n }\r\n switch (colored) {\r\n case PointColor.Color:\r\n this._colorFromTexture(mesh, pointsGroup, true);\r\n break;\r\n case PointColor.UV:\r\n this._setPointsColorOrUV(mesh, pointsGroup, true, false, false);\r\n break;\r\n case PointColor.Random:\r\n this._setPointsColorOrUV(mesh, pointsGroup, true);\r\n break;\r\n case PointColor.Stated:\r\n this._setPointsColorOrUV(mesh, pointsGroup, true, undefined, undefined, <Color4>color, range);\r\n break;\r\n }\r\n this.nbParticles += nb;\r\n this._groupCounter++;\r\n return this._groupCounter - 1;\r\n }\r\n\r\n /**\r\n * Sets all the particles : this method actually really updates the mesh according to the particle positions, rotations, colors, textures, etc.\r\n * This method calls `updateParticle()` for each particle of the SPS.\r\n * For an animated SPS, it is usually called within the render loop.\r\n * @param start The particle index in the particle array where to start to compute the particle property values _(default 0)_\r\n * @param end The particle index in the particle array where to stop to compute the particle property values _(default nbParticle - 1)_\r\n * @param update If the mesh must be finally updated on this call after all the particle computations _(default true)_\r\n * @returns the PCS.\r\n */\r\n public setParticles(start: number = 0, end: number = this.nbParticles - 1, update: boolean = true): PointsCloudSystem {\r\n if (!this._updatable || !this._isReady) {\r\n return this;\r\n }\r\n\r\n // custom beforeUpdate\r\n this.beforeUpdateParticles(start, end, update);\r\n\r\n const rotMatrix = TmpVectors.Matrix[0];\r\n const mesh = this.mesh;\r\n const colors32 = this._colors32;\r\n const positions32 = this._positions32;\r\n const uvs32 = this._uvs32;\r\n\r\n const tempVectors = TmpVectors.Vector3;\r\n const camAxisX = tempVectors[5].copyFromFloats(1.0, 0.0, 0.0);\r\n const camAxisY = tempVectors[6].copyFromFloats(0.0, 1.0, 0.0);\r\n const camAxisZ = tempVectors[7].copyFromFloats(0.0, 0.0, 1.0);\r\n const minimum = tempVectors[8].setAll(Number.MAX_VALUE);\r\n const maximum = tempVectors[9].setAll(-Number.MAX_VALUE);\r\n\r\n Matrix.IdentityToRef(rotMatrix);\r\n let idx: number; // current index of the particle\r\n\r\n if (this.mesh?.isFacetDataEnabled) {\r\n this._computeBoundingBox = true;\r\n }\r\n\r\n end = end >= this.nbParticles ? this.nbParticles - 1 : end;\r\n if (this._computeBoundingBox) {\r\n if (start != 0 || end != this.nbParticles - 1) {\r\n // only some particles are updated, then use the current existing BBox basis. Note : it can only increase.\r\n const boundingInfo = this.mesh?.getBoundingInfo();\r\n if (boundingInfo) {\r\n minimum.copyFrom(boundingInfo.minimum);\r\n maximum.copyFrom(boundingInfo.maximum);\r\n }\r\n }\r\n }\r\n\r\n let pindex: number; //index in positions array\r\n let cindex: number; //index in color array\r\n let uindex: number; //index in uv array\r\n\r\n // particle loop\r\n for (let p = start; p <= end; p++) {\r\n const particle = this.particles[p];\r\n idx = particle.idx;\r\n pindex = 3 * idx;\r\n cindex = 4 * idx;\r\n uindex = 2 * idx;\r\n\r\n // call to custom user function to update the particle properties\r\n this.updateParticle(particle);\r\n\r\n const particleRotationMatrix = particle._rotationMatrix;\r\n const particlePosition = particle.position;\r\n const particleGlobalPosition = particle._globalPosition;\r\n\r\n if (this._computeParticleRotation) {\r\n particle.getRotationMatrix(rotMatrix);\r\n }\r\n\r\n const particleHasParent = particle.parentId !== null;\r\n if (particleHasParent) {\r\n const parent = this.particles[particle.parentId!];\r\n const parentRotationMatrix = parent._rotationMatrix;\r\n const parentGlobalPosition = parent._globalPosition;\r\n\r\n const rotatedY = particlePosition.x * parentRotationMatrix[1] + particlePosition.y * parentRotationMatrix[4] + particlePosition.z * parentRotationMatrix[7];\r\n const rotatedX = particlePosition.x * parentRotationMatrix[0] + particlePosition.y * parentRotationMatrix[3] + particlePosition.z * parentRotationMatrix[6];\r\n const rotatedZ = particlePosition.x * parentRotationMatrix[2] + particlePosition.y * parentRotationMatrix[5] + particlePosition.z * parentRotationMatrix[8];\r\n\r\n particleGlobalPosition.x = parentGlobalPosition.x + rotatedX;\r\n particleGlobalPosition.y = parentGlobalPosition.y + rotatedY;\r\n particleGlobalPosition.z = parentGlobalPosition.z + rotatedZ;\r\n\r\n if (this._computeParticleRotation) {\r\n const rotMatrixValues = rotMatrix.m;\r\n particleRotationMatrix[0] =\r\n rotMatrixValues[0] * parentRotationMatrix[0] + rotMatrixValues[1] * parentRotationMatrix[3] + rotMatrixValues[2] * parentRotationMatrix[6];\r\n particleRotationMatrix[1] =\r\n rotMatrixValues[0] * parentRotationMatrix[1] + rotMatrixValues[1] * parentRotationMatrix[4] + rotMatrixValues[2] * parentRotationMatrix[7];\r\n particleRotationMatrix[2] =\r\n rotMatrixValues[0] * parentRotationMatrix[2] + rotMatrixValues[1] * parentRotationMatrix[5] + rotMatrixValues[2] * parentRotationMatrix[8];\r\n particleRotationMatrix[3] =\r\n rotMatrixValues[4] * parentRotationMatrix[0] + rotMatrixValues[5] * parentRotationMatrix[3] + rotMatrixValues[6] * parentRotationMatrix[6];\r\n particleRotationMatrix[4] =\r\n rotMatrixValues[4] * parentRotationMatrix[1] + rotMatrixValues[5] * parentRotationMatrix[4] + rotMatrixValues[6] * parentRotationMatrix[7];\r\n particleRotationMatrix[5] =\r\n rotMatrixValues[4] * parentRotationMatrix[2] + rotMatrixValues[5] * parentRotationMatrix[5] + rotMatrixValues[6] * parentRotationMatrix[8];\r\n particleRotationMatrix[6] =\r\n rotMatrixValues[8] * parentRotationMatrix[0] + rotMatrixValues[9] * parentRotationMatrix[3] + rotMatrixValues[10] * parentRotationMatrix[6];\r\n particleRotationMatrix[7] =\r\n rotMatrixValues[8] * parentRotationMatrix[1] + rotMatrixValues[9] * parentRotationMatrix[4] + rotMatrixValues[10] * parentRotationMatrix[7];\r\n particleRotationMatrix[8] =\r\n rotMatrixValues[8] * parentRotationMatrix[2] + rotMatrixValues[9] * parentRotationMatrix[5] + rotMatrixValues[10] * parentRotationMatrix[8];\r\n }\r\n } else {\r\n particleGlobalPosition.x = 0;\r\n particleGlobalPosition.y = 0;\r\n particleGlobalPosition.z = 0;\r\n\r\n if (this._computeParticleRotation) {\r\n const rotMatrixValues = rotMatrix.m;\r\n particleRotationMatrix[0] = rotMatrixValues[0];\r\n particleRotationMatrix[1] = rotMatrixValues[1];\r\n particleRotationMatrix[2] = rotMatrixValues[2];\r\n particleRotationMatrix[3] = rotMatrixValues[4];\r\n particleRotationMatrix[4] = rotMatrixValues[5];\r\n particleRotationMatrix[5] = rotMatrixValues[6];\r\n particleRotationMatrix[6] = rotMatrixValues[8];\r\n particleRotationMatrix[7] = rotMatrixValues[9];\r\n particleRotationMatrix[8] = rotMatrixValues[10];\r\n }\r\n }\r\n\r\n const pivotBackTranslation = tempVectors[11];\r\n if (particle.translateFromPivot) {\r\n pivotBackTranslation.setAll(0.0);\r\n } else {\r\n pivotBackTranslation.copyFrom(particle.pivot);\r\n }\r\n\r\n // positions\r\n const tmpVertex = tempVectors[0];\r\n tmpVertex.copyFrom(particle.position);\r\n const vertexX = tmpVertex.x - particle.pivot.x;\r\n const vertexY = tmpVertex.y - particle.pivot.y;\r\n const vertexZ = tmpVertex.z - particle.pivot.z;\r\n\r\n let rotatedX = vertexX * particleRotationMatrix[0] + vertexY * particleRotationMatrix[3] + vertexZ * particleRotationMatrix[6];\r\n let rotatedY = vertexX * particleRotationMatrix[1] + vertexY * particleRotationMatrix[4] + vertexZ * particleRotationMatrix[7];\r\n let rotatedZ = vertexX * particleRotationMatrix[2] + vertexY * particleRotationMatrix[5] + vertexZ * particleRotationMatrix[8];\r\n\r\n rotatedX += pivotBackTranslation.x;\r\n rotatedY += pivotBackTranslation.y;\r\n rotatedZ += pivotBackTranslation.z;\r\n\r\n const px = (positions32[pindex] = particleGlobalPosition.x + camAxisX.x * rotatedX + camAxisY.x * rotatedY + camAxisZ.x * rotatedZ);\r\n const py = (positions32[pindex + 1] = particleGlobalPosition.y + camAxisX.y * rotatedX + camAxisY.y * rotatedY + camAxisZ.y * rotatedZ);\r\n const pz = (positions32[pindex + 2] = particleGlobalPosition.z + camAxisX.z * rotatedX + camAxisY.z * rotatedY + camAxisZ.z * rotatedZ);\r\n\r\n if (this._computeBoundingBox) {\r\n minimum.minimizeInPlaceFromFloats(px, py, pz);\r\n maximum.maximizeInPlaceFromFloats(px, py, pz);\r\n }\r\n\r\n if (this._computeParticleColor && particle.color) {\r\n const color = particle.color;\r\n const colors32 = this._colors32;\r\n colors32[cindex] = color.r;\r\n colors32[cindex + 1] = color.g;\r\n colors32[cindex + 2] = color.b;\r\n colors32[cindex + 3] = color.a;\r\n }\r\n if (this._computeParticleTexture && particle.uv) {\r\n const uv = particle.uv;\r\n const uvs32 = this._uvs32;\r\n uvs32[uindex] = uv.x;\r\n uvs32[uindex + 1] = uv.y;\r\n }\r\n }\r\n\r\n // if the VBO must be updated\r\n if (mesh) {\r\n if (update) {\r\n if (this._computeParticleColor) {\r\n mesh.updateVerticesData(VertexBuffer.ColorKind, colors32, false, false);\r\n }\r\n if (this._computeParticleTexture) {\r\n mesh.updateVerticesData(VertexBuffer.UVKind, uvs32, false, false);\r\n }\r\n mesh.updateVerticesData(VertexBuffer.PositionKind, positions32, false, false);\r\n }\r\n\r\n if (this._computeBoundingBox) {\r\n if (mesh.hasBoundingInfo) {\r\n mesh.getBoundingInfo().reConstruct(minimum, maximum, mesh._worldMatrix);\r\n } else {\r\n mesh.buildBoundingInfo(minimum, maximum, mesh._worldMatrix);\r\n }\r\n }\r\n }\r\n this.afterUpdateParticles(start, end, update);\r\n return this;\r\n }\r\n\r\n /**\r\n * Disposes the PCS.\r\n */\r\n public dispose(): void {\r\n this.mesh?.dispose();\r\n this.vars = null;\r\n // drop references to internal big arrays for the GC\r\n (<any>this._positions) = null;\r\n (<any>this._indices) = null;\r\n (<any>this._normals) = null;\r\n (<any>this._uvs) = null;\r\n (<any>this._colors) = null;\r\n (<any>this._indices32) = null;\r\n (<any>this._positions32) = null;\r\n (<any>this._uvs32) = null;\r\n (<any>this._colors32) = null;\r\n }\r\n\r\n /**\r\n * Visibility helper : Recomputes the visible size according to the mesh bounding box\r\n * doc :\r\n * @returns the PCS.\r\n */\r\n public refreshVisibleSize(): PointsCloudSystem {\r\n if (!this._isVisibilityBoxLocked) {\r\n this.mesh?.refreshBoundingInfo();\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Visibility helper : Sets the size of a visibility box, this sets the underlying mesh bounding box.\r\n * @param size the size (float) of the visibility box\r\n * note : this doesn't lock the PCS mesh bounding box.\r\n * doc :\r\n */\r\n public setVisibilityBox(size: number): void {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n\r\n const vis = size / 2;\r\n this.mesh.buildBoundingInfo(new Vector3(-vis, -vis, -vis), new Vector3(vis, vis, vis));\r\n }\r\n\r\n /**\r\n * Gets whether the PCS is always visible or not\r\n * doc :\r\n */\r\n public get isAlwaysVisible(): boolean {\r\n return this._alwaysVisible;\r\n }\r\n\r\n /**\r\n * Sets the PCS as always visible or not\r\n * doc :\r\n */\r\n public set isAlwaysVisible(val: boolean) {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n\r\n this._alwaysVisible = val;\r\n this.mesh.alwaysSelectAsActiveMesh = val;\r\n }\r\n\r\n /**\r\n * Tells to `setParticles()` to compute the particle rotations or not\r\n * Default value : false. The PCS is faster when it's set to false\r\n * Note : particle rotations are only applied to parent particles\r\n * Note : the particle rotations aren't stored values, so setting `computeParticleRotation` to false will prevents the particle to rotate\r\n */\r\n public set computeParticleRotation(val: boolean) {\r\n this._computeParticleRotation = val;\r\n }\r\n\r\n /**\r\n * Tells to `setParticles()` to compute the particle colors or not.\r\n * Default value : true. The PCS is faster when it's set to false.\r\n * Note : the particle colors are stored values, so setting `computeParticleColor` to false will keep yet the last colors set.\r\n */\r\n public set computeParticleColor(val: boolean) {\r\n this._computeParticleColor = val;\r\n }\r\n\r\n public set computeParticleTexture(val: boolean) {\r\n this._computeParticleTexture = val;\r\n }\r\n /**\r\n * Gets if `setParticles()` computes the particle colors or not.\r\n * Default value : false. The PCS is faster when it's set to false.\r\n * Note : the particle colors are stored values, so setting `computeParticleColor` to false will keep yet the last colors set.\r\n */\r\n public get computeParticleColor(): boolean {\r\n return this._computeParticleColor;\r\n }\r\n /**\r\n * Gets if `setParticles()` computes the particle textures or not.\r\n * Default value : false. The PCS is faster when it's set to false.\r\n * Note : the particle textures are stored values, so setting `computeParticleTexture` to false will keep yet the last colors set.\r\n */\r\n public get computeParticleTexture(): boolean {\r\n return this._computeParticleTexture;\r\n }\r\n /**\r\n * Tells to `setParticles()` to compute or not the mesh bounding box when computing the particle positions.\r\n */\r\n public set computeBoundingBox(val: boolean) {\r\n this._computeBoundingBox = val;\r\n }\r\n /**\r\n * Gets if `setParticles()` computes or not the mesh bounding box when computing the particle positions.\r\n */\r\n public get computeBoundingBox(): boolean {\r\n return this._computeBoundingBox;\r\n }\r\n\r\n // =======================================================================\r\n // Particle behavior logic\r\n // these following methods may be overwritten by users to fit their needs\r\n\r\n /**\r\n * This function does nothing. It may be overwritten to set all the particle first values.\r\n * The PCS doesn't call this function, you may have to call it by your own.\r\n * doc :\r\n */\r\n public initParticles(): void {}\r\n\r\n /**\r\n * This function does nothing. It may be overwritten to recycle a particle\r\n * The PCS doesn't call this function, you can to call it\r\n * doc :\r\n * @param particle The particle to recycle\r\n * @returns the recycled particle\r\n */\r\n public recycleParticle(particle: CloudPoint): CloudPoint {\r\n return particle;\r\n }\r\n\r\n /**\r\n * Updates a particle : this function should be overwritten by the user.\r\n * It is called on each particle by `setParticles()`. This is the place to code each particle behavior.\r\n * doc :\r\n * @example : just set a particle position or velocity and recycle conditions\r\n * @param particle The particle to update\r\n * @returns the updated particle\r\n */\r\n public updateParticle(particle: CloudPoint): CloudPoint {\r\n return particle;\r\n }\r\n\r\n /**\r\n * This will be called before any other treatment by `setParticles()` and will be passed three parameters.\r\n * This does nothing and may be overwritten by the user.\r\n * @param start the particle index in the particle array where to start to iterate, same than the value passed to setParticle()\r\n * @param stop the particle index in the particle array where to stop to iterate, same than the value passed to setParticle()\r\n * @param update the boolean update value actually passed to setParticles()\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public beforeUpdateParticles(start?: number, stop?: number, update?: boolean): void {}\r\n /**\r\n * This will be called by `setParticles()` after all the other treatments and just before the actual mesh update.\r\n * This will be passed three parameters.\r\n * This does nothing and may be overwritten by the user.\r\n * @param start the particle index in the particle array where to start to iterate, same than the value passed to setParticle()\r\n * @param stop the particle index in the particle array where to stop to iterate, same than the value passed to setParticle()\r\n * @param update the boolean update value actually passed to setParticles()\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public afterUpdateParticles(start?: number, stop?: number, update?: boolean): void {}\r\n}\r\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Nullable } from "../types.js";
|
|
2
|
-
import { type Matrix, Vector3, Quaternion, Vector4, Vector2 } from "../Maths/math.vector.js";
|
|
3
|
-
import { Color4 } from "../Maths/math.color.js";
|
|
2
|
+
import { type Matrix, Vector3, Quaternion, Vector4, Vector2 } from "../Maths/math.vector.pure.js";
|
|
3
|
+
import { Color4 } from "../Maths/math.color.pure.js";
|
|
4
4
|
import { type Mesh } from "../Meshes/mesh.js";
|
|
5
5
|
import { BoundingInfo } from "../Culling/boundingInfo.js";
|
|
6
6
|
import { type SolidParticleSystem } from "./solidParticleSystem.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Vector3, TmpVectors, Quaternion, Vector4, Vector2 } from "../Maths/math.vector.js";
|
|
2
|
-
import { Color4 } from "../Maths/math.color.js";
|
|
1
|
+
import { Vector3, TmpVectors, Quaternion, Vector4, Vector2 } from "../Maths/math.vector.pure.js";
|
|
2
|
+
import { Color4 } from "../Maths/math.color.pure.js";
|
|
3
3
|
import { BoundingInfo } from "../Culling/boundingInfo.js";
|
|
4
4
|
import { BoundingSphere } from "../Culling/boundingSphere.js";
|
|
5
|
-
import { AbstractMesh } from "../Meshes/abstractMesh.js";
|
|
5
|
+
import { AbstractMesh } from "../Meshes/abstractMesh.pure.js";
|
|
6
6
|
/**
|
|
7
7
|
* Represents one particle of a solid particle system.
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solidParticle.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/solidParticle.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"../types\";\r\nimport { type Matrix, Vector3, TmpVectors, Quaternion, Vector4, Vector2 } from \"../Maths/math.vector\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { type Mesh } from \"../Meshes/mesh\";\r\nimport { BoundingInfo } from \"../Culling/boundingInfo\";\r\nimport { BoundingSphere } from \"../Culling/boundingSphere\";\r\nimport { type SolidParticleSystem } from \"./solidParticleSystem\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { type Plane } from \"../Maths/math.plane\";\r\nimport { type Material } from \"../Materials/material\";\r\n/**\r\n * Represents one particle of a solid particle system.\r\n */\r\nexport class SolidParticle {\r\n /**\r\n * particle global index\r\n */\r\n public idx: number = 0;\r\n /**\r\n * particle identifier\r\n */\r\n public id: number = 0;\r\n /**\r\n * The color of the particle\r\n */\r\n public color: Nullable<Color4> = new Color4(1.0, 1.0, 1.0, 1.0);\r\n /**\r\n * The world space position of the particle.\r\n */\r\n public position: Vector3 = Vector3.Zero();\r\n /**\r\n * The world space rotation of the particle. (Not use if rotationQuaternion is set)\r\n */\r\n public rotation: Vector3 = Vector3.Zero();\r\n /**\r\n * The world space rotation quaternion of the particle.\r\n */\r\n public rotationQuaternion: Nullable<Quaternion>;\r\n /**\r\n * The scaling of the particle.\r\n */\r\n public scaling: Vector3 = Vector3.One();\r\n /**\r\n * The uvs of the particle.\r\n */\r\n public uvs: Vector4 = new Vector4(0.0, 0.0, 1.0, 1.0);\r\n /**\r\n * The current speed of the particle.\r\n */\r\n public velocity: Vector3 = Vector3.Zero();\r\n /**\r\n * The pivot point in the particle local space.\r\n */\r\n public pivot: Vector3 = Vector3.Zero();\r\n /**\r\n * Must the particle be translated from its pivot point in its local space ?\r\n * In this case, the pivot point is set at the origin of the particle local space and the particle is translated.\r\n * Default : false\r\n */\r\n public translateFromPivot: boolean = false;\r\n /**\r\n * Is the particle active or not ?\r\n */\r\n public alive: boolean = true;\r\n /**\r\n * Is the particle visible or not ?\r\n */\r\n public isVisible: boolean = true;\r\n /**\r\n * Defines how long will the life of the particle be.\r\n * Set to Infinity for particles that should never die (default behavior for SolidParticleSystem).\r\n */\r\n public lifeTime = Infinity;\r\n /**\r\n * The current age of the particle.\r\n */\r\n public age = 0;\r\n /**\r\n * Index of this particle in the global \"positions\" array (Internal use)\r\n * @internal\r\n */\r\n public _pos: number = 0;\r\n /**\r\n * @internal Index of this particle in the global \"indices\" array (Internal use)\r\n */\r\n public _ind: number = 0;\r\n /**\r\n * @internal ModelShape of this particle (Internal use)\r\n */\r\n public _model: ModelShape;\r\n /**\r\n * ModelShape id of this particle\r\n */\r\n public shapeId: number = 0;\r\n /**\r\n * Index of the particle in its shape id\r\n */\r\n public idxInShape: number = 0;\r\n /**\r\n * @internal Reference to the shape model BoundingInfo object (Internal use)\r\n */\r\n public _modelBoundingInfo: BoundingInfo;\r\n private _boundingInfo: BoundingInfo;\r\n /**\r\n * @internal Reference to the SPS what the particle belongs to (Internal use)\r\n */\r\n public _sps: SolidParticleSystem;\r\n /**\r\n * @internal Still set as invisible in order to skip useless computations (Internal use)\r\n */\r\n public _stillInvisible: boolean = false;\r\n /**\r\n * @internal Last computed particle rotation matrix\r\n */\r\n public _rotationMatrix: number[] = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0];\r\n /**\r\n * Parent particle Id, if any.\r\n * Default null.\r\n */\r\n public parentId: Nullable<number> = null;\r\n /**\r\n * The particle material identifier (integer) when MultiMaterials are enabled in the SPS.\r\n */\r\n public materialIndex: Nullable<number> = null;\r\n /**\r\n * Custom object or properties.\r\n */\r\n public props: Nullable<any> = null;\r\n /**\r\n * The culling strategy to use to check whether the solid particle must be culled or not when using isInFrustum().\r\n * The possible values are :\r\n * - AbstractMesh.CULLINGSTRATEGY_STANDARD\r\n * - AbstractMesh.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY\r\n * - AbstractMesh.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION\r\n * - AbstractMesh.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY\r\n * The default value for solid particles is AbstractMesh.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY\r\n * Please read each static variable documentation in the class AbstractMesh to get details about the culling process.\r\n * */\r\n public cullingStrategy = AbstractMesh.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY;\r\n\r\n /**\r\n * @internal Internal global position in the SPS.\r\n */\r\n public _globalPosition: Vector3 = Vector3.Zero();\r\n\r\n /**\r\n * Particle BoundingInfo object\r\n * @returns a BoundingInfo\r\n */\r\n public getBoundingInfo(): BoundingInfo {\r\n return this._boundingInfo;\r\n }\r\n\r\n /**\r\n * Returns true if there is already a bounding info\r\n */\r\n public get hasBoundingInfo(): boolean {\r\n return this._boundingInfo !== null;\r\n }\r\n\r\n /**\r\n * Creates a Solid Particle object.\r\n * Don't create particles manually, use instead the Solid Particle System internal tools like _addParticle()\r\n * @param particleIndex (integer) is the particle index in the Solid Particle System pool.\r\n * @param particleId (integer) is the particle identifier. Unless some particles are removed from the SPS, it's the same value than the particle idx.\r\n * @param positionIndex (integer) is the starting index of the particle vertices in the SPS \"positions\" array.\r\n * @param indiceIndex (integer) is the starting index of the particle indices in the SPS \"indices\" array.\r\n * @param model (ModelShape) is a reference to the model shape on what the particle is designed.\r\n * @param shapeId (integer) is the model shape identifier in the SPS.\r\n * @param idxInShape (integer) is the index of the particle in the current model (ex: the 10th box of addShape(box, 30))\r\n * @param sps defines the sps it is associated to\r\n * @param modelBoundingInfo is the reference to the model BoundingInfo used for intersection computations.\r\n * @param materialIndex is the particle material identifier (integer) when the MultiMaterials are enabled in the SPS.\r\n */\r\n constructor(\r\n particleIndex: number,\r\n particleId: number,\r\n positionIndex: number,\r\n indiceIndex: number,\r\n model: Nullable<ModelShape>,\r\n shapeId: number,\r\n idxInShape: number,\r\n sps: SolidParticleSystem,\r\n modelBoundingInfo: Nullable<BoundingInfo> = null,\r\n materialIndex: Nullable<number> = null\r\n ) {\r\n this.idx = particleIndex;\r\n this.id = particleId;\r\n this._pos = positionIndex;\r\n this._ind = indiceIndex;\r\n this._model = <ModelShape>model;\r\n this.shapeId = shapeId;\r\n this.idxInShape = idxInShape;\r\n this._sps = sps;\r\n if (modelBoundingInfo) {\r\n this._modelBoundingInfo = modelBoundingInfo;\r\n this._boundingInfo = new BoundingInfo(modelBoundingInfo.minimum, modelBoundingInfo.maximum);\r\n }\r\n if (materialIndex !== null) {\r\n this.materialIndex = materialIndex;\r\n }\r\n }\r\n /**\r\n * Copies the particle property values into the existing target : position, rotation, scaling, uvs, colors, pivot, parent, visibility, alive\r\n * @param target the particle target\r\n * @returns the current particle\r\n */\r\n public copyToRef(target: SolidParticle): SolidParticle {\r\n target.position.copyFrom(this.position);\r\n target.rotation.copyFrom(this.rotation);\r\n if (this.rotationQuaternion) {\r\n if (target.rotationQuaternion) {\r\n target.rotationQuaternion.copyFrom(this.rotationQuaternion);\r\n } else {\r\n target.rotationQuaternion = this.rotationQuaternion.clone();\r\n }\r\n }\r\n target.scaling.copyFrom(this.scaling);\r\n if (this.color) {\r\n if (target.color) {\r\n target.color.copyFrom(this.color);\r\n } else {\r\n target.color = this.color.clone();\r\n }\r\n }\r\n target.uvs.copyFrom(this.uvs);\r\n target.velocity.copyFrom(this.velocity);\r\n target.pivot.copyFrom(this.pivot);\r\n target.translateFromPivot = this.translateFromPivot;\r\n target.alive = this.alive;\r\n target.isVisible = this.isVisible;\r\n target.parentId = this.parentId;\r\n target.cullingStrategy = this.cullingStrategy;\r\n target.lifeTime = this.lifeTime;\r\n target.age = this.age;\r\n if (this.materialIndex !== null) {\r\n target.materialIndex = this.materialIndex;\r\n }\r\n return this;\r\n }\r\n /**\r\n * Legacy support, changed scale to scaling\r\n */\r\n public get scale(): Vector3 {\r\n return this.scaling;\r\n }\r\n\r\n /**\r\n * Legacy support, changed scale to scaling\r\n */\r\n public set scale(scale: Vector3) {\r\n this.scaling = scale;\r\n }\r\n\r\n /**\r\n * Legacy support, changed quaternion to rotationQuaternion\r\n */\r\n public get quaternion(): Nullable<Quaternion> {\r\n return this.rotationQuaternion;\r\n }\r\n\r\n /**\r\n * Legacy support, changed quaternion to rotationQuaternion\r\n */\r\n public set quaternion(q: Nullable<Quaternion>) {\r\n this.rotationQuaternion = q;\r\n }\r\n\r\n /**\r\n * Returns a boolean. True if the particle intersects another particle or another mesh, else false.\r\n * The intersection is computed on the particle bounding sphere and Axis Aligned Bounding Box (AABB)\r\n * @param target is the object (solid particle or mesh) what the intersection is computed against.\r\n * @returns true if it intersects\r\n */\r\n public intersectsMesh(target: Mesh | SolidParticle): boolean {\r\n if (!this._boundingInfo || !target.hasBoundingInfo) {\r\n return false;\r\n }\r\n if (this._sps._bSphereOnly) {\r\n return BoundingSphere.Intersects(this._boundingInfo.boundingSphere, target.getBoundingInfo().boundingSphere);\r\n }\r\n return this._boundingInfo.intersects(target.getBoundingInfo(), false);\r\n }\r\n\r\n /**\r\n * Returns `true` if the solid particle is within the frustum defined by the passed array of planes.\r\n * A particle is in the frustum if its bounding box intersects the frustum\r\n * @param frustumPlanes defines the frustum to test\r\n * @returns true if the particle is in the frustum planes\r\n */\r\n public isInFrustum(frustumPlanes: Plane[]): boolean {\r\n return this._boundingInfo !== null && this._boundingInfo.isInFrustum(frustumPlanes, this.cullingStrategy);\r\n }\r\n\r\n /**\r\n * get the rotation matrix of the particle\r\n * @internal\r\n */\r\n public getRotationMatrix(m: Matrix) {\r\n let quaternion: Quaternion;\r\n if (this.rotationQuaternion) {\r\n quaternion = this.rotationQuaternion;\r\n } else {\r\n quaternion = TmpVectors.Quaternion[0];\r\n const rotation = this.rotation;\r\n Quaternion.RotationYawPitchRollToRef(rotation.y, rotation.x, rotation.z, quaternion);\r\n }\r\n\r\n quaternion.toRotationMatrix(m);\r\n }\r\n}\r\n\r\n/**\r\n * Represents the shape of the model used by one particle of a solid particle system.\r\n * SPS internal tool, don't use it manually.\r\n */\r\nexport class ModelShape {\r\n /**\r\n * Get or set the shapeId\r\n * @deprecated Please use shapeId instead\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public get shapeID(): number {\r\n return this.shapeId;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public set shapeID(shapeID: number) {\r\n this.shapeId = shapeID;\r\n }\r\n /**\r\n * The shape id\r\n * @internal\r\n */\r\n public shapeId: number;\r\n /**\r\n * flat array of model positions (internal use)\r\n * @internal\r\n */\r\n public _shape: Vector3[];\r\n /**\r\n * flat array of model UVs (internal use)\r\n * @internal\r\n */\r\n public _shapeUV: number[];\r\n /**\r\n * color array of the model\r\n * @internal\r\n */\r\n public _shapeColors: number[];\r\n /**\r\n * indices array of the model\r\n * @internal\r\n */\r\n public _indices: number[];\r\n /**\r\n * normals array of the model\r\n * @internal\r\n */\r\n public _normals: number[];\r\n /**\r\n * length of the shape in the model indices array (internal use)\r\n * @internal\r\n */\r\n public _indicesLength: number = 0;\r\n /**\r\n * Custom position function (internal use)\r\n * @internal\r\n */\r\n public _positionFunction: Nullable<(particle: SolidParticle, i: number, s: number) => void>;\r\n /**\r\n * Custom vertex function (internal use)\r\n * @internal\r\n */\r\n public _vertexFunction: Nullable<(particle: SolidParticle, vertex: Vector3, i: number) => void>;\r\n /**\r\n * Model material (internal use)\r\n * @internal\r\n */\r\n public _material: Nullable<Material>;\r\n\r\n /**\r\n * Creates a ModelShape object. This is an internal simplified reference to a mesh used as for a model to replicate particles from by the SPS.\r\n * SPS internal tool, don't use it manually.\r\n * @internal\r\n */\r\n constructor(\r\n id: number,\r\n shape: Vector3[],\r\n indices: number[],\r\n normals: number[],\r\n colors: number[],\r\n shapeUV: number[],\r\n posFunction: Nullable<(particle: SolidParticle, i: number, s: number) => void>,\r\n vtxFunction: Nullable<(particle: SolidParticle, vertex: Vector3, i: number) => void>,\r\n material: Nullable<Material>\r\n ) {\r\n this.shapeId = id;\r\n this._shape = shape;\r\n this._indices = indices;\r\n this._indicesLength = indices.length;\r\n this._shapeUV = shapeUV;\r\n this._shapeColors = colors;\r\n this._normals = normals;\r\n this._positionFunction = posFunction;\r\n this._vertexFunction = vtxFunction;\r\n this._material = material;\r\n }\r\n}\r\n\r\n/**\r\n * Represents a Depth Sorted Particle in the solid particle system.\r\n * @internal\r\n */\r\nexport class DepthSortedParticle {\r\n /**\r\n * Particle index\r\n */\r\n public idx: number = 0;\r\n /**\r\n * Index of the particle in the \"indices\" array\r\n */\r\n public ind: number = 0;\r\n /**\r\n * Length of the particle shape in the \"indices\" array\r\n */\r\n public indicesLength: number = 0;\r\n /**\r\n * Squared distance from the particle to the camera\r\n */\r\n public sqDistance: number = 0.0;\r\n /**\r\n * Material index when used with MultiMaterials\r\n */\r\n public materialIndex: number = 0;\r\n\r\n /**\r\n * Creates a new sorted particle\r\n * @param idx\r\n * @param ind\r\n * @param indLength\r\n * @param materialIndex\r\n */\r\n constructor(idx: number, ind: number, indLength: number, materialIndex: number) {\r\n this.idx = idx;\r\n this.ind = ind;\r\n this.indicesLength = indLength;\r\n this.materialIndex = materialIndex;\r\n }\r\n}\r\n\r\n/**\r\n * Represents a solid particle vertex\r\n */\r\nexport class SolidParticleVertex {\r\n /**\r\n * Vertex position\r\n */\r\n public position: Vector3;\r\n /**\r\n * Vertex color\r\n */\r\n public color: Color4;\r\n /**\r\n * Vertex UV\r\n */\r\n public uv: Vector2;\r\n /**\r\n * Creates a new solid particle vertex\r\n */\r\n constructor() {\r\n this.position = Vector3.Zero();\r\n this.color = new Color4(1.0, 1.0, 1.0, 1.0);\r\n this.uv = Vector2.Zero();\r\n }\r\n // Getters and Setters for back-compatibility\r\n /** Vertex x coordinate */\r\n public get x(): number {\r\n return this.position.x;\r\n }\r\n public set x(val: number) {\r\n this.position.x = val;\r\n }\r\n /** Vertex y coordinate */\r\n public get y(): number {\r\n return this.position.y;\r\n }\r\n public set y(val: number) {\r\n this.position.y = val;\r\n }\r\n /** Vertex z coordinate */\r\n public get z(): number {\r\n return this.position.z;\r\n }\r\n public set z(val: number) {\r\n this.position.z = val;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"solidParticle.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/solidParticle.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"../types\";\r\nimport { type Matrix, Vector3, TmpVectors, Quaternion, Vector4, Vector2 } from \"../Maths/math.vector.pure\";\r\nimport { Color4 } from \"../Maths/math.color.pure\";\r\nimport { type Mesh } from \"../Meshes/mesh\";\r\nimport { BoundingInfo } from \"../Culling/boundingInfo\";\r\nimport { BoundingSphere } from \"../Culling/boundingSphere\";\r\nimport { type SolidParticleSystem } from \"./solidParticleSystem\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh.pure\";\r\nimport { type Plane } from \"../Maths/math.plane\";\r\nimport { type Material } from \"../Materials/material\";\r\n/**\r\n * Represents one particle of a solid particle system.\r\n */\r\nexport class SolidParticle {\r\n /**\r\n * particle global index\r\n */\r\n public idx: number = 0;\r\n /**\r\n * particle identifier\r\n */\r\n public id: number = 0;\r\n /**\r\n * The color of the particle\r\n */\r\n public color: Nullable<Color4> = new Color4(1.0, 1.0, 1.0, 1.0);\r\n /**\r\n * The world space position of the particle.\r\n */\r\n public position: Vector3 = Vector3.Zero();\r\n /**\r\n * The world space rotation of the particle. (Not use if rotationQuaternion is set)\r\n */\r\n public rotation: Vector3 = Vector3.Zero();\r\n /**\r\n * The world space rotation quaternion of the particle.\r\n */\r\n public rotationQuaternion: Nullable<Quaternion>;\r\n /**\r\n * The scaling of the particle.\r\n */\r\n public scaling: Vector3 = Vector3.One();\r\n /**\r\n * The uvs of the particle.\r\n */\r\n public uvs: Vector4 = new Vector4(0.0, 0.0, 1.0, 1.0);\r\n /**\r\n * The current speed of the particle.\r\n */\r\n public velocity: Vector3 = Vector3.Zero();\r\n /**\r\n * The pivot point in the particle local space.\r\n */\r\n public pivot: Vector3 = Vector3.Zero();\r\n /**\r\n * Must the particle be translated from its pivot point in its local space ?\r\n * In this case, the pivot point is set at the origin of the particle local space and the particle is translated.\r\n * Default : false\r\n */\r\n public translateFromPivot: boolean = false;\r\n /**\r\n * Is the particle active or not ?\r\n */\r\n public alive: boolean = true;\r\n /**\r\n * Is the particle visible or not ?\r\n */\r\n public isVisible: boolean = true;\r\n /**\r\n * Defines how long will the life of the particle be.\r\n * Set to Infinity for particles that should never die (default behavior for SolidParticleSystem).\r\n */\r\n public lifeTime = Infinity;\r\n /**\r\n * The current age of the particle.\r\n */\r\n public age = 0;\r\n /**\r\n * Index of this particle in the global \"positions\" array (Internal use)\r\n * @internal\r\n */\r\n public _pos: number = 0;\r\n /**\r\n * @internal Index of this particle in the global \"indices\" array (Internal use)\r\n */\r\n public _ind: number = 0;\r\n /**\r\n * @internal ModelShape of this particle (Internal use)\r\n */\r\n public _model: ModelShape;\r\n /**\r\n * ModelShape id of this particle\r\n */\r\n public shapeId: number = 0;\r\n /**\r\n * Index of the particle in its shape id\r\n */\r\n public idxInShape: number = 0;\r\n /**\r\n * @internal Reference to the shape model BoundingInfo object (Internal use)\r\n */\r\n public _modelBoundingInfo: BoundingInfo;\r\n private _boundingInfo: BoundingInfo;\r\n /**\r\n * @internal Reference to the SPS what the particle belongs to (Internal use)\r\n */\r\n public _sps: SolidParticleSystem;\r\n /**\r\n * @internal Still set as invisible in order to skip useless computations (Internal use)\r\n */\r\n public _stillInvisible: boolean = false;\r\n /**\r\n * @internal Last computed particle rotation matrix\r\n */\r\n public _rotationMatrix: number[] = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0];\r\n /**\r\n * Parent particle Id, if any.\r\n * Default null.\r\n */\r\n public parentId: Nullable<number> = null;\r\n /**\r\n * The particle material identifier (integer) when MultiMaterials are enabled in the SPS.\r\n */\r\n public materialIndex: Nullable<number> = null;\r\n /**\r\n * Custom object or properties.\r\n */\r\n public props: Nullable<any> = null;\r\n /**\r\n * The culling strategy to use to check whether the solid particle must be culled or not when using isInFrustum().\r\n * The possible values are :\r\n * - AbstractMesh.CULLINGSTRATEGY_STANDARD\r\n * - AbstractMesh.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY\r\n * - AbstractMesh.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION\r\n * - AbstractMesh.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY\r\n * The default value for solid particles is AbstractMesh.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY\r\n * Please read each static variable documentation in the class AbstractMesh to get details about the culling process.\r\n * */\r\n public cullingStrategy = AbstractMesh.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY;\r\n\r\n /**\r\n * @internal Internal global position in the SPS.\r\n */\r\n public _globalPosition: Vector3 = Vector3.Zero();\r\n\r\n /**\r\n * Particle BoundingInfo object\r\n * @returns a BoundingInfo\r\n */\r\n public getBoundingInfo(): BoundingInfo {\r\n return this._boundingInfo;\r\n }\r\n\r\n /**\r\n * Returns true if there is already a bounding info\r\n */\r\n public get hasBoundingInfo(): boolean {\r\n return this._boundingInfo !== null;\r\n }\r\n\r\n /**\r\n * Creates a Solid Particle object.\r\n * Don't create particles manually, use instead the Solid Particle System internal tools like _addParticle()\r\n * @param particleIndex (integer) is the particle index in the Solid Particle System pool.\r\n * @param particleId (integer) is the particle identifier. Unless some particles are removed from the SPS, it's the same value than the particle idx.\r\n * @param positionIndex (integer) is the starting index of the particle vertices in the SPS \"positions\" array.\r\n * @param indiceIndex (integer) is the starting index of the particle indices in the SPS \"indices\" array.\r\n * @param model (ModelShape) is a reference to the model shape on what the particle is designed.\r\n * @param shapeId (integer) is the model shape identifier in the SPS.\r\n * @param idxInShape (integer) is the index of the particle in the current model (ex: the 10th box of addShape(box, 30))\r\n * @param sps defines the sps it is associated to\r\n * @param modelBoundingInfo is the reference to the model BoundingInfo used for intersection computations.\r\n * @param materialIndex is the particle material identifier (integer) when the MultiMaterials are enabled in the SPS.\r\n */\r\n constructor(\r\n particleIndex: number,\r\n particleId: number,\r\n positionIndex: number,\r\n indiceIndex: number,\r\n model: Nullable<ModelShape>,\r\n shapeId: number,\r\n idxInShape: number,\r\n sps: SolidParticleSystem,\r\n modelBoundingInfo: Nullable<BoundingInfo> = null,\r\n materialIndex: Nullable<number> = null\r\n ) {\r\n this.idx = particleIndex;\r\n this.id = particleId;\r\n this._pos = positionIndex;\r\n this._ind = indiceIndex;\r\n this._model = <ModelShape>model;\r\n this.shapeId = shapeId;\r\n this.idxInShape = idxInShape;\r\n this._sps = sps;\r\n if (modelBoundingInfo) {\r\n this._modelBoundingInfo = modelBoundingInfo;\r\n this._boundingInfo = new BoundingInfo(modelBoundingInfo.minimum, modelBoundingInfo.maximum);\r\n }\r\n if (materialIndex !== null) {\r\n this.materialIndex = materialIndex;\r\n }\r\n }\r\n /**\r\n * Copies the particle property values into the existing target : position, rotation, scaling, uvs, colors, pivot, parent, visibility, alive\r\n * @param target the particle target\r\n * @returns the current particle\r\n */\r\n public copyToRef(target: SolidParticle): SolidParticle {\r\n target.position.copyFrom(this.position);\r\n target.rotation.copyFrom(this.rotation);\r\n if (this.rotationQuaternion) {\r\n if (target.rotationQuaternion) {\r\n target.rotationQuaternion.copyFrom(this.rotationQuaternion);\r\n } else {\r\n target.rotationQuaternion = this.rotationQuaternion.clone();\r\n }\r\n }\r\n target.scaling.copyFrom(this.scaling);\r\n if (this.color) {\r\n if (target.color) {\r\n target.color.copyFrom(this.color);\r\n } else {\r\n target.color = this.color.clone();\r\n }\r\n }\r\n target.uvs.copyFrom(this.uvs);\r\n target.velocity.copyFrom(this.velocity);\r\n target.pivot.copyFrom(this.pivot);\r\n target.translateFromPivot = this.translateFromPivot;\r\n target.alive = this.alive;\r\n target.isVisible = this.isVisible;\r\n target.parentId = this.parentId;\r\n target.cullingStrategy = this.cullingStrategy;\r\n target.lifeTime = this.lifeTime;\r\n target.age = this.age;\r\n if (this.materialIndex !== null) {\r\n target.materialIndex = this.materialIndex;\r\n }\r\n return this;\r\n }\r\n /**\r\n * Legacy support, changed scale to scaling\r\n */\r\n public get scale(): Vector3 {\r\n return this.scaling;\r\n }\r\n\r\n /**\r\n * Legacy support, changed scale to scaling\r\n */\r\n public set scale(scale: Vector3) {\r\n this.scaling = scale;\r\n }\r\n\r\n /**\r\n * Legacy support, changed quaternion to rotationQuaternion\r\n */\r\n public get quaternion(): Nullable<Quaternion> {\r\n return this.rotationQuaternion;\r\n }\r\n\r\n /**\r\n * Legacy support, changed quaternion to rotationQuaternion\r\n */\r\n public set quaternion(q: Nullable<Quaternion>) {\r\n this.rotationQuaternion = q;\r\n }\r\n\r\n /**\r\n * Returns a boolean. True if the particle intersects another particle or another mesh, else false.\r\n * The intersection is computed on the particle bounding sphere and Axis Aligned Bounding Box (AABB)\r\n * @param target is the object (solid particle or mesh) what the intersection is computed against.\r\n * @returns true if it intersects\r\n */\r\n public intersectsMesh(target: Mesh | SolidParticle): boolean {\r\n if (!this._boundingInfo || !target.hasBoundingInfo) {\r\n return false;\r\n }\r\n if (this._sps._bSphereOnly) {\r\n return BoundingSphere.Intersects(this._boundingInfo.boundingSphere, target.getBoundingInfo().boundingSphere);\r\n }\r\n return this._boundingInfo.intersects(target.getBoundingInfo(), false);\r\n }\r\n\r\n /**\r\n * Returns `true` if the solid particle is within the frustum defined by the passed array of planes.\r\n * A particle is in the frustum if its bounding box intersects the frustum\r\n * @param frustumPlanes defines the frustum to test\r\n * @returns true if the particle is in the frustum planes\r\n */\r\n public isInFrustum(frustumPlanes: Plane[]): boolean {\r\n return this._boundingInfo !== null && this._boundingInfo.isInFrustum(frustumPlanes, this.cullingStrategy);\r\n }\r\n\r\n /**\r\n * get the rotation matrix of the particle\r\n * @internal\r\n */\r\n public getRotationMatrix(m: Matrix) {\r\n let quaternion: Quaternion;\r\n if (this.rotationQuaternion) {\r\n quaternion = this.rotationQuaternion;\r\n } else {\r\n quaternion = TmpVectors.Quaternion[0];\r\n const rotation = this.rotation;\r\n Quaternion.RotationYawPitchRollToRef(rotation.y, rotation.x, rotation.z, quaternion);\r\n }\r\n\r\n quaternion.toRotationMatrix(m);\r\n }\r\n}\r\n\r\n/**\r\n * Represents the shape of the model used by one particle of a solid particle system.\r\n * SPS internal tool, don't use it manually.\r\n */\r\nexport class ModelShape {\r\n /**\r\n * Get or set the shapeId\r\n * @deprecated Please use shapeId instead\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public get shapeID(): number {\r\n return this.shapeId;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public set shapeID(shapeID: number) {\r\n this.shapeId = shapeID;\r\n }\r\n /**\r\n * The shape id\r\n * @internal\r\n */\r\n public shapeId: number;\r\n /**\r\n * flat array of model positions (internal use)\r\n * @internal\r\n */\r\n public _shape: Vector3[];\r\n /**\r\n * flat array of model UVs (internal use)\r\n * @internal\r\n */\r\n public _shapeUV: number[];\r\n /**\r\n * color array of the model\r\n * @internal\r\n */\r\n public _shapeColors: number[];\r\n /**\r\n * indices array of the model\r\n * @internal\r\n */\r\n public _indices: number[];\r\n /**\r\n * normals array of the model\r\n * @internal\r\n */\r\n public _normals: number[];\r\n /**\r\n * length of the shape in the model indices array (internal use)\r\n * @internal\r\n */\r\n public _indicesLength: number = 0;\r\n /**\r\n * Custom position function (internal use)\r\n * @internal\r\n */\r\n public _positionFunction: Nullable<(particle: SolidParticle, i: number, s: number) => void>;\r\n /**\r\n * Custom vertex function (internal use)\r\n * @internal\r\n */\r\n public _vertexFunction: Nullable<(particle: SolidParticle, vertex: Vector3, i: number) => void>;\r\n /**\r\n * Model material (internal use)\r\n * @internal\r\n */\r\n public _material: Nullable<Material>;\r\n\r\n /**\r\n * Creates a ModelShape object. This is an internal simplified reference to a mesh used as for a model to replicate particles from by the SPS.\r\n * SPS internal tool, don't use it manually.\r\n * @internal\r\n */\r\n constructor(\r\n id: number,\r\n shape: Vector3[],\r\n indices: number[],\r\n normals: number[],\r\n colors: number[],\r\n shapeUV: number[],\r\n posFunction: Nullable<(particle: SolidParticle, i: number, s: number) => void>,\r\n vtxFunction: Nullable<(particle: SolidParticle, vertex: Vector3, i: number) => void>,\r\n material: Nullable<Material>\r\n ) {\r\n this.shapeId = id;\r\n this._shape = shape;\r\n this._indices = indices;\r\n this._indicesLength = indices.length;\r\n this._shapeUV = shapeUV;\r\n this._shapeColors = colors;\r\n this._normals = normals;\r\n this._positionFunction = posFunction;\r\n this._vertexFunction = vtxFunction;\r\n this._material = material;\r\n }\r\n}\r\n\r\n/**\r\n * Represents a Depth Sorted Particle in the solid particle system.\r\n * @internal\r\n */\r\nexport class DepthSortedParticle {\r\n /**\r\n * Particle index\r\n */\r\n public idx: number = 0;\r\n /**\r\n * Index of the particle in the \"indices\" array\r\n */\r\n public ind: number = 0;\r\n /**\r\n * Length of the particle shape in the \"indices\" array\r\n */\r\n public indicesLength: number = 0;\r\n /**\r\n * Squared distance from the particle to the camera\r\n */\r\n public sqDistance: number = 0.0;\r\n /**\r\n * Material index when used with MultiMaterials\r\n */\r\n public materialIndex: number = 0;\r\n\r\n /**\r\n * Creates a new sorted particle\r\n * @param idx\r\n * @param ind\r\n * @param indLength\r\n * @param materialIndex\r\n */\r\n constructor(idx: number, ind: number, indLength: number, materialIndex: number) {\r\n this.idx = idx;\r\n this.ind = ind;\r\n this.indicesLength = indLength;\r\n this.materialIndex = materialIndex;\r\n }\r\n}\r\n\r\n/**\r\n * Represents a solid particle vertex\r\n */\r\nexport class SolidParticleVertex {\r\n /**\r\n * Vertex position\r\n */\r\n public position: Vector3;\r\n /**\r\n * Vertex color\r\n */\r\n public color: Color4;\r\n /**\r\n * Vertex UV\r\n */\r\n public uv: Vector2;\r\n /**\r\n * Creates a new solid particle vertex\r\n */\r\n constructor() {\r\n this.position = Vector3.Zero();\r\n this.color = new Color4(1.0, 1.0, 1.0, 1.0);\r\n this.uv = Vector2.Zero();\r\n }\r\n // Getters and Setters for back-compatibility\r\n /** Vertex x coordinate */\r\n public get x(): number {\r\n return this.position.x;\r\n }\r\n public set x(val: number) {\r\n this.position.x = val;\r\n }\r\n /** Vertex y coordinate */\r\n public get y(): number {\r\n return this.position.y;\r\n }\r\n public set y(val: number) {\r\n this.position.y = val;\r\n }\r\n /** Vertex z coordinate */\r\n public get z(): number {\r\n return this.position.z;\r\n }\r\n public set z(val: number) {\r\n this.position.z = val;\r\n }\r\n}\r\n"]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { type Nullable, type IndicesArray, type FloatArray } from "../types.js";
|
|
2
|
-
import { Vector3 } from "../Maths/math.vector.js";
|
|
3
|
-
import { Color4 } from "../Maths/math.color.js";
|
|
4
|
-
import { Mesh } from "../Meshes/mesh.js";
|
|
2
|
+
import { Vector3 } from "../Maths/math.vector.pure.js";
|
|
3
|
+
import { Color4 } from "../Maths/math.color.pure.js";
|
|
4
|
+
import { Mesh } from "../Meshes/mesh.pure.js";
|
|
5
5
|
import { type Scene, type IDisposable } from "../scene.js";
|
|
6
6
|
import { type Observer } from "../Misc/observable.js";
|
|
7
7
|
import { DepthSortedParticle, SolidParticle, ModelShape, SolidParticleVertex } from "./solidParticle.js";
|
|
8
8
|
import { type TargetCamera } from "../Cameras/targetCamera.js";
|
|
9
9
|
import { BoundingInfo } from "../Culling/boundingInfo.js";
|
|
10
10
|
import { type Material } from "../Materials/material.js";
|
|
11
|
-
import { MultiMaterial } from "../Materials/multiMaterial.js";
|
|
11
|
+
import { MultiMaterial } from "../Materials/multiMaterial.pure.js";
|
|
12
12
|
import { type PickingInfo } from "../Collisions/pickingInfo.js";
|
|
13
13
|
import { type AbstractMesh } from "../Meshes/abstractMesh.js";
|
|
14
14
|
/**
|