@babylonjs/core 5.0.0-beta.4 → 5.0.0-beta.8
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 +5 -1
- package/Actions/actionManager.js.map +1 -1
- package/Animations/animation.d.ts +2 -2
- package/Animations/animation.js +5 -1
- package/Animations/animation.js.map +1 -1
- package/Audio/analyser.d.ts +2 -1
- package/Audio/analyser.js +5 -0
- package/Audio/analyser.js.map +1 -1
- package/Audio/audioSceneComponent.d.ts +1 -1
- package/Audio/audioSceneComponent.js +5 -0
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.d.ts +1 -1
- package/Audio/sound.js +8 -1
- package/Audio/sound.js.map +1 -1
- package/Audio/soundTrack.d.ts +2 -1
- package/Audio/soundTrack.js +5 -0
- package/Audio/soundTrack.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +5 -0
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/Behaviors/Meshes/baseSixDofDragBehavior.js +29 -26
- package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js +2 -0
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Bones/bone.d.ts +2 -1
- package/Bones/bone.js +28 -18
- package/Bones/bone.js.map +1 -1
- package/Bones/skeleton.d.ts +0 -6
- package/Bones/skeleton.js +5 -17
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/buffer.d.ts +4 -0
- package/Buffers/buffer.js +13 -3
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.d.ts +1 -0
- package/Cameras/Inputs/freeCameraMouseInput.js +6 -3
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraTouchInput.js +2 -4
- package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphArcRotateCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphFreeCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphFreeCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphGamepadCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphGamepadCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphUniversalCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphUniversalCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicFreeCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicFreeCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicGamepadCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.d.ts +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationFreeCamera.d.ts +1 -1
- package/Cameras/VR/vrDeviceOrientationFreeCamera.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationGamepadCamera.d.ts +1 -1
- package/Cameras/VR/vrDeviceOrientationGamepadCamera.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.d.ts +1 -0
- package/Cameras/VR/vrExperienceHelper.js +1 -0
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/VR/webVRCamera.d.ts +2 -1
- package/Cameras/VR/webVRCamera.js +3 -2
- package/Cameras/VR/webVRCamera.js.map +1 -1
- package/Cameras/arcRotateCamera.d.ts +1 -1
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.d.ts +1 -1
- package/Cameras/camera.js +1 -1
- package/Cameras/camera.js.map +1 -1
- package/Cameras/deviceOrientationCamera.d.ts +1 -1
- package/Cameras/deviceOrientationCamera.js.map +1 -1
- package/Cameras/flyCamera.d.ts +1 -1
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/followCamera.d.ts +1 -1
- package/Cameras/followCamera.js.map +1 -1
- package/Cameras/freeCamera.d.ts +1 -1
- package/Cameras/freeCamera.js.map +1 -1
- package/Cameras/gamepadCamera.d.ts +1 -1
- package/Cameras/gamepadCamera.js.map +1 -1
- package/Cameras/targetCamera.d.ts +1 -1
- package/Cameras/targetCamera.js.map +1 -1
- package/Cameras/touchCamera.d.ts +1 -1
- package/Cameras/touchCamera.js.map +1 -1
- package/Cameras/universalCamera.d.ts +1 -1
- package/Cameras/universalCamera.js.map +1 -1
- package/Cameras/virtualJoysticksCamera.d.ts +1 -1
- package/Cameras/virtualJoysticksCamera.js.map +1 -1
- package/Collisions/collider.d.ts +1 -1
- package/Collisions/collider.js +48 -2
- package/Collisions/collider.js.map +1 -1
- package/Compat/compatibilityOptions.d.ts +9 -0
- package/Compat/compatibilityOptions.js +14 -0
- package/Compat/compatibilityOptions.js.map +1 -0
- package/Compat/index.d.ts +1 -0
- package/Compat/index.js +2 -0
- package/Compat/index.js.map +1 -0
- package/Compute/computeEffect.js +2 -2
- package/Compute/computeEffect.js.map +1 -1
- package/Culling/Octrees/octreeSceneComponent.d.ts +1 -1
- package/Culling/Octrees/octreeSceneComponent.js +5 -0
- package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
- package/Culling/ray.js +2 -2
- package/Culling/ray.js.map +1 -1
- package/Debug/axesViewer.d.ts +1 -1
- package/Debug/axesViewer.js +5 -0
- package/Debug/axesViewer.js.map +1 -1
- package/Debug/debugLayer.d.ts +1 -1
- package/Debug/debugLayer.js +6 -2
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/physicsViewer.d.ts +1 -1
- package/Debug/physicsViewer.js +3 -0
- package/Debug/physicsViewer.js.map +1 -1
- package/Debug/skeletonViewer.js +3 -4
- package/Debug/skeletonViewer.js.map +1 -1
- package/DeviceInput/Helpers/eventFactory.js +2 -5
- package/DeviceInput/Helpers/eventFactory.js.map +1 -1
- package/DeviceInput/InputDevices/deviceEnums.d.ts +55 -2
- package/DeviceInput/InputDevices/deviceEnums.js +54 -0
- package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
- package/DeviceInput/InputDevices/deviceTypes.d.ts +2 -2
- package/DeviceInput/InputDevices/deviceTypes.js.map +1 -1
- package/DeviceInput/InputDevices/internalDeviceSourceManager.js +1 -0
- package/DeviceInput/InputDevices/internalDeviceSourceManager.js.map +1 -1
- package/DeviceInput/InputDevices/nativeDeviceInputSystem.js +3 -2
- package/DeviceInput/InputDevices/nativeDeviceInputSystem.js.map +1 -1
- package/DeviceInput/InputDevices/webDeviceInputSystem.js +38 -82
- package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.cubeTexture.d.ts +1 -1
- package/Engines/Extensions/engine.cubeTexture.js +6 -2
- package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.multiview.d.ts +5 -0
- package/Engines/Extensions/engine.multiview.js +4 -2
- package/Engines/Extensions/engine.multiview.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +2 -1
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Processors/Expressions/shaderDefineExpression.js +1 -1
- package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
- package/Engines/Processors/shaderCodeInliner.js +13 -13
- package/Engines/Processors/shaderCodeInliner.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js +4 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +9 -9
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
- package/Engines/WebGPU/webgpuConstants.d.ts +2 -1
- package/Engines/WebGPU/webgpuConstants.js +1 -0
- package/Engines/WebGPU/webgpuConstants.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +13 -13
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +30 -30
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +18 -11
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/engine.d.ts +47 -27
- package/Engines/engine.js +1 -1
- package/Engines/engine.js.map +1 -1
- package/Engines/engineCapabilities.d.ts +2 -0
- package/Engines/engineCapabilities.js.map +1 -1
- package/Engines/nativeEngine.d.ts +1 -0
- package/Engines/nativeEngine.js +39 -13
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +3 -2
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.d.ts +8 -0
- package/Engines/renderTargetWrapper.js +20 -0
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.d.ts +7 -0
- package/Engines/thinEngine.js +27 -9
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +37 -25
- package/Engines/webgpuEngine.js.map +1 -1
- package/Events/keyboardEvents.d.ts +7 -1
- package/Events/keyboardEvents.js +11 -1
- package/Events/keyboardEvents.js.map +1 -1
- package/Gamepads/Controllers/daydreamController.js +1 -1
- package/Gamepads/Controllers/daydreamController.js.map +1 -1
- package/Gamepads/Controllers/oculusTouchController.js +2 -2
- package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
- package/Gamepads/Controllers/webVRController.d.ts +1 -0
- package/Gamepads/Controllers/webVRController.js +1 -0
- package/Gamepads/Controllers/webVRController.js.map +1 -1
- package/Gamepads/gamepadManager.js +1 -1
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.js +0 -10
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/gizmo.js +1 -1
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.d.ts +2 -0
- package/Gizmos/gizmoManager.js +28 -24
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Helpers/sceneHelpers.d.ts +1 -0
- package/Helpers/sceneHelpers.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +1 -1
- package/Inputs/scene.inputManager.js +8 -7
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Instrumentation/sceneInstrumentation.js +2 -2
- package/Instrumentation/sceneInstrumentation.js.map +1 -1
- package/Layers/effectLayer.d.ts +1 -1
- package/Layers/effectLayer.js +1 -1
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/effectLayerSceneComponent.d.ts +1 -1
- package/Layers/effectLayerSceneComponent.js +7 -3
- package/Layers/effectLayerSceneComponent.js.map +1 -1
- package/Layers/glowLayer.d.ts +1 -1
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.d.ts +1 -1
- package/Layers/highlightLayer.js +2 -1
- package/Layers/highlightLayer.js.map +1 -1
- package/Layers/layer.d.ts +2 -2
- package/Layers/layer.js.map +1 -1
- package/Layers/layerSceneComponent.d.ts +1 -1
- package/Layers/layerSceneComponent.js +7 -3
- package/Layers/layerSceneComponent.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +2 -2
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +7 -7
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +79 -36
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Loading/loadingScreen.js +8 -8
- package/Loading/loadingScreen.js.map +1 -1
- package/Loading/sceneLoader.js +3 -3
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Background/backgroundMaterial.d.ts +1 -1
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +37 -0
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +117 -0
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -0
- package/Materials/Node/Blocks/Dual/currentScreenBlock.js +12 -12
- package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.js +5 -5
- package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +13 -13
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/index.d.ts +1 -0
- package/Materials/Node/Blocks/Dual/index.js +1 -0
- package/Materials/Node/Blocks/Dual/index.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +10 -10
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +28 -28
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +7 -7
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +32 -32
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/derivativeBlock.js +2 -2
- package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/discardBlock.js +1 -1
- package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +1 -1
- package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +10 -10
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +7 -7
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +12 -12
- package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +1 -1
- package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +7 -7
- package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/twirlBlock.js +4 -4
- package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.d.ts +2 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +29 -24
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js +5 -5
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js +5 -5
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +33 -33
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +11 -11
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.js +11 -11
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.js +3 -3
- package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js +1 -1
- package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js.map +1 -1
- package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js +1 -1
- package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js.map +1 -1
- package/Materials/Node/Blocks/Particle/particleTextureBlock.js +7 -7
- package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/bonesBlock.js +3 -3
- package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js +3 -3
- package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +5 -5
- package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +16 -16
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +1 -1
- package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/addBlock.js +1 -1
- package/Materials/Node/Blocks/addBlock.js.map +1 -1
- package/Materials/Node/Blocks/arcTan2Block.js +1 -1
- package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
- package/Materials/Node/Blocks/clampBlock.js +3 -3
- package/Materials/Node/Blocks/clampBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.js +7 -7
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorMergerBlock.js +8 -8
- package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorSplitterBlock.js +5 -5
- package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
- package/Materials/Node/Blocks/conditionalBlock.js +10 -10
- package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
- package/Materials/Node/Blocks/crossBlock.js +1 -1
- package/Materials/Node/Blocks/crossBlock.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.js +1 -1
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/Blocks/desaturateBlock.js +4 -4
- package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
- package/Materials/Node/Blocks/distanceBlock.js +1 -1
- package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
- package/Materials/Node/Blocks/divideBlock.js +1 -1
- package/Materials/Node/Blocks/divideBlock.js.map +1 -1
- package/Materials/Node/Blocks/dotBlock.js +1 -1
- package/Materials/Node/Blocks/dotBlock.js.map +1 -1
- package/Materials/Node/Blocks/elbowBlock.d.ts +27 -0
- package/Materials/Node/Blocks/elbowBlock.js +60 -0
- package/Materials/Node/Blocks/elbowBlock.js.map +1 -0
- package/Materials/Node/Blocks/fresnelBlock.js +2 -2
- package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
- package/Materials/Node/Blocks/gradientBlock.js +8 -8
- package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
- package/Materials/Node/Blocks/index.d.ts +1 -0
- package/Materials/Node/Blocks/index.js +1 -0
- package/Materials/Node/Blocks/index.js.map +1 -1
- package/Materials/Node/Blocks/lengthBlock.js +1 -1
- package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
- package/Materials/Node/Blocks/lerpBlock.js +1 -1
- package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
- package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -1
- package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
- package/Materials/Node/Blocks/maxBlock.js +1 -1
- package/Materials/Node/Blocks/maxBlock.js.map +1 -1
- package/Materials/Node/Blocks/minBlock.js +1 -1
- package/Materials/Node/Blocks/minBlock.js.map +1 -1
- package/Materials/Node/Blocks/modBlock.js +1 -1
- package/Materials/Node/Blocks/modBlock.js.map +1 -1
- package/Materials/Node/Blocks/multiplyBlock.js +1 -1
- package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
- package/Materials/Node/Blocks/nLerpBlock.js +1 -1
- package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
- package/Materials/Node/Blocks/negateBlock.js +1 -1
- package/Materials/Node/Blocks/negateBlock.js.map +1 -1
- package/Materials/Node/Blocks/normalBlendBlock.js +5 -5
- package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
- package/Materials/Node/Blocks/normalizeBlock.js +1 -1
- package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
- package/Materials/Node/Blocks/oneMinusBlock.js +1 -1
- package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
- package/Materials/Node/Blocks/posterizeBlock.js +1 -1
- package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
- package/Materials/Node/Blocks/powBlock.js +1 -1
- package/Materials/Node/Blocks/powBlock.js.map +1 -1
- package/Materials/Node/Blocks/randomNumberBlock.js +2 -2
- package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
- package/Materials/Node/Blocks/reciprocalBlock.js +1 -1
- package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
- package/Materials/Node/Blocks/reflectBlock.js +1 -1
- package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
- package/Materials/Node/Blocks/refractBlock.js +1 -1
- package/Materials/Node/Blocks/refractBlock.js.map +1 -1
- package/Materials/Node/Blocks/remapBlock.js +3 -3
- package/Materials/Node/Blocks/remapBlock.js.map +1 -1
- package/Materials/Node/Blocks/replaceColorBlock.js +3 -3
- package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
- package/Materials/Node/Blocks/rotate2dBlock.js +1 -1
- package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
- package/Materials/Node/Blocks/scaleBlock.js +1 -1
- package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
- package/Materials/Node/Blocks/simplexPerlin3DBlock.js +1 -1
- package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
- package/Materials/Node/Blocks/smoothStepBlock.js +1 -1
- package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
- package/Materials/Node/Blocks/stepBlock.js +1 -1
- package/Materials/Node/Blocks/stepBlock.js.map +1 -1
- package/Materials/Node/Blocks/subtractBlock.js +1 -1
- package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
- package/Materials/Node/Blocks/transformBlock.js +13 -13
- package/Materials/Node/Blocks/transformBlock.js.map +1 -1
- package/Materials/Node/Blocks/trigonometryBlock.js +2 -2
- package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.js +22 -22
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorSplitterBlock.js +8 -8
- package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
- package/Materials/Node/Blocks/viewDirectionBlock.js +1 -1
- package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/voronoiNoiseBlock.js +5 -5
- package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
- package/Materials/Node/Blocks/waveBlock.js +3 -3
- package/Materials/Node/Blocks/waveBlock.js.map +1 -1
- package/Materials/Node/Blocks/worleyNoise3DBlock.js +5 -5
- package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
- package/Materials/Node/Enums/nodeMaterialSystemValues.d.ts +3 -1
- package/Materials/Node/Enums/nodeMaterialSystemValues.js +2 -0
- package/Materials/Node/Enums/nodeMaterialSystemValues.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +4 -0
- package/Materials/Node/nodeMaterial.js +22 -11
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +12 -12
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +24 -24
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildStateSharedData.js +1 -1
- package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +2 -1
- package/Materials/PBR/pbrBaseMaterial.js +4 -3
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrMaterial.d.ts +1 -1
- package/Materials/PBR/pbrMaterial.js +2 -3
- package/Materials/PBR/pbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrMetallicRoughnessMaterial.d.ts +1 -1
- package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
- package/Materials/PBR/pbrSpecularGlossinessMaterial.d.ts +1 -1
- package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js +8 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +2 -2
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/MultiviewRenderTarget.d.ts +2 -1
- package/Materials/Textures/MultiviewRenderTarget.js +10 -2
- package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +1 -1
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/equiRectangularCubeTexture.js +1 -1
- package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +2 -0
- package/Materials/Textures/internalTexture.js +2 -0
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.d.ts +2 -2
- package/Materials/Textures/mirrorTexture.js +7 -3
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.d.ts +1 -1
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/prePassRenderTarget.d.ts +1 -1
- package/Materials/Textures/prePassRenderTarget.js.map +1 -1
- package/Materials/Textures/refractionTexture.d.ts +1 -1
- package/Materials/Textures/refractionTexture.js +2 -2
- package/Materials/Textures/refractionTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +1 -1
- package/Materials/Textures/renderTargetTexture.js +2 -2
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +1 -1
- package/Materials/Textures/texture.js +5 -5
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +1 -0
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/effect.js +3 -3
- package/Materials/effect.js.map +1 -1
- package/Materials/material.d.ts +3 -1
- package/Materials/material.js +11 -3
- package/Materials/material.js.map +1 -1
- package/Materials/materialHelper.js +9 -1
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/materialPluginManager.js +3 -3
- package/Materials/materialPluginManager.js.map +1 -1
- package/Materials/multiMaterial.d.ts +3 -1
- package/Materials/multiMaterial.js +13 -11
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/pushMaterial.d.ts +1 -1
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/shaderMaterial.js +8 -4
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.d.ts +1 -1
- package/Materials/shadowDepthWrapper.js +3 -3
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.d.ts +2 -6
- package/Materials/standardMaterial.js +5 -10
- package/Materials/standardMaterial.js.map +1 -1
- package/Maths/math.size.js +1 -1
- package/Maths/math.size.js.map +1 -1
- package/Maths/math.vector.d.ts +4 -2
- package/Maths/math.vector.js +34 -32
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/boxBuilder.js +5 -4
- package/Meshes/Builders/boxBuilder.js.map +1 -1
- package/Meshes/Builders/capsuleBuilder.js +4 -3
- package/Meshes/Builders/capsuleBuilder.js.map +1 -1
- package/Meshes/Builders/cylinderBuilder.d.ts +1 -1
- package/Meshes/Builders/cylinderBuilder.js +11 -8
- package/Meshes/Builders/cylinderBuilder.js.map +1 -1
- package/Meshes/Builders/decalBuilder.js +5 -2
- package/Meshes/Builders/decalBuilder.js.map +1 -1
- package/Meshes/Builders/discBuilder.js +3 -2
- package/Meshes/Builders/discBuilder.js.map +1 -1
- package/Meshes/Builders/goldbergBuilder.js +10 -1
- package/Meshes/Builders/goldbergBuilder.js.map +1 -1
- package/Meshes/Builders/groundBuilder.js +2 -1
- package/Meshes/Builders/groundBuilder.js.map +1 -1
- package/Meshes/Builders/icoSphereBuilder.js +2 -1
- package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
- package/Meshes/Builders/linesBuilder.js.map +1 -1
- package/Meshes/Builders/planeBuilder.js +5 -4
- package/Meshes/Builders/planeBuilder.js.map +1 -1
- package/Meshes/Builders/polygonBuilder.js +6 -2
- package/Meshes/Builders/polygonBuilder.js.map +1 -1
- package/Meshes/Builders/polyhedronBuilder.js +3 -2
- package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
- package/Meshes/Builders/ribbonBuilder.js +4 -3
- package/Meshes/Builders/ribbonBuilder.js.map +1 -1
- package/Meshes/Builders/sphereBuilder.js +2 -1
- package/Meshes/Builders/sphereBuilder.js.map +1 -1
- package/Meshes/Builders/tiledBoxBuilder.js +4 -0
- package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
- package/Meshes/Builders/torusBuilder.js +2 -1
- package/Meshes/Builders/torusBuilder.js.map +1 -1
- package/Meshes/Builders/torusKnotBuilder.js +2 -1
- package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
- package/Meshes/Compression/dracoCompression.d.ts +3 -0
- package/Meshes/Compression/dracoCompression.js +23 -7
- package/Meshes/Compression/dracoCompression.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +10 -2
- package/Meshes/abstractMesh.js +39 -33
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geometry.d.ts +1 -1
- package/Meshes/geometry.js +38 -3
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/groundMesh.d.ts +1 -1
- package/Meshes/groundMesh.js.map +1 -1
- package/Meshes/instancedMesh.js +5 -6
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +1 -1
- package/Meshes/mesh.js +39 -35
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.lts.d.ts +1 -1
- package/Meshes/mesh.lts.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +1 -1
- package/Meshes/mesh.vertexData.js +2 -2
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/polygonMesh.js +2 -2
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/subMesh.js +1 -2
- package/Meshes/subMesh.js.map +1 -1
- package/Meshes/subMesh.project.js +1 -2
- package/Meshes/subMesh.project.js.map +1 -1
- package/Meshes/thinInstanceMesh.js +5 -0
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Meshes/trailMesh.d.ts +1 -1
- package/Meshes/trailMesh.js.map +1 -1
- package/Meshes/transformNode.js +40 -13
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.d.ts +5 -0
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +13 -2
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +6 -12
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +6 -6
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/assetsManager.d.ts +2 -1
- package/Misc/assetsManager.js +15 -1
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/basis.js +1 -1
- package/Misc/basis.js.map +1 -1
- package/Misc/brdfTextureTools.js +4 -1
- package/Misc/brdfTextureTools.js.map +1 -1
- package/Misc/dds.js +7 -0
- package/Misc/dds.js.map +1 -1
- package/Misc/decorators.js +7 -0
- package/Misc/decorators.js.map +1 -1
- package/Misc/deepCopier.js +3 -3
- package/Misc/deepCopier.js.map +1 -1
- package/Misc/devTools.js +1 -1
- package/Misc/devTools.js.map +1 -1
- package/Misc/environmentTextureTools.js +2 -2
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/fileTools.js +3 -3
- package/Misc/fileTools.js.map +1 -1
- package/Misc/khronosTextureContainer2.js +4 -3
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/reflector.js +6 -6
- package/Misc/reflector.js.map +1 -1
- package/Misc/tools.js +15 -13
- package/Misc/tools.js.map +1 -1
- package/Misc/uniqueIdGenerator.js +1 -1
- package/Misc/uniqueIdGenerator.js.map +1 -1
- package/Offline/database.js +1 -1
- package/Offline/database.js.map +1 -1
- package/Particles/baseParticleSystem.d.ts +4 -1
- package/Particles/baseParticleSystem.js +20 -5
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/particleHelper.js +2 -2
- package/Particles/particleHelper.js.map +1 -1
- package/Physics/Plugins/ammoJSPlugin.js +4 -4
- package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/physicsImpostor.d.ts +2 -2
- package/Physics/physicsImpostor.js.map +1 -1
- package/PostProcesses/blurPostProcess.js +5 -5
- package/PostProcesses/blurPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.js +1 -1
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.js +1 -1
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/postProcessManager.js +2 -2
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/Probes/reflectionProbe.js +2 -2
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/depthPeelingRenderer.js +3 -3
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +8 -8
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.js +1 -1
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/utilityLayerRenderer.js +4 -0
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/instancesDeclaration.js +1 -1
- package/Shaders/ShadersInclude/instancesDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/prePassVertex.js +1 -1
- package/Shaders/ShadersInclude/prePassVertex.js.map +1 -1
- package/Shaders/color.fragment.js +1 -1
- package/Shaders/color.fragment.js.map +1 -1
- package/Shaders/color.vertex.js +1 -1
- package/Shaders/color.vertex.js.map +1 -1
- package/Shaders/default.fragment.js +1 -1
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/default.vertex.js +1 -1
- package/Shaders/default.vertex.js.map +1 -1
- package/Shaders/geometry.vertex.js +1 -1
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Shaders/pbr.vertex.js +1 -1
- package/Shaders/pbr.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
- package/Sprites/spriteManager.js +9 -10
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteMap.js +2 -2
- package/Sprites/spriteMap.js.map +1 -1
- package/Sprites/spriteRenderer.js +1 -1
- package/Sprites/spriteRenderer.js.map +1 -1
- package/XR/features/WebXRDOMOverlay.js +1 -1
- package/XR/features/WebXRDOMOverlay.js.map +1 -1
- package/XR/features/WebXRHandTracking.js +30 -30
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRImageTracking.js +2 -2
- package/XR/features/WebXRImageTracking.js.map +1 -1
- package/XR/features/WebXRLayers.d.ts +28 -5
- package/XR/features/WebXRLayers.js +54 -20
- package/XR/features/WebXRLayers.js.map +1 -1
- package/XR/features/WebXRNearInteraction.d.ts +35 -3
- package/XR/features/WebXRNearInteraction.js +201 -40
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.js +1 -1
- package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
- package/XR/motionController/webXRMotionControllerManager.js +2 -2
- package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
- package/XR/motionController/webXRProfiledMotionController.js +1 -1
- package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
- package/XR/webXRCamera.js +17 -4
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRDefaultExperience.js +3 -0
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXREnterExitUI.js +2 -2
- package/XR/webXREnterExitUI.js.map +1 -1
- package/XR/webXRExperienceHelper.js +3 -2
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRFeaturesManager.js +6 -6
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/XR/webXRInputSource.js +3 -3
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRRenderTargetTextureProvider.d.ts +3 -2
- package/XR/webXRRenderTargetTextureProvider.js +37 -18
- package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
- package/XR/webXRSessionManager.d.ts +1 -0
- package/XR/webXRSessionManager.js +6 -1
- package/XR/webXRSessionManager.js.map +1 -1
- package/assetContainer.d.ts +1 -1
- package/assetContainer.js +5 -4
- package/assetContainer.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/node.d.ts +1 -1
- package/node.js.map +1 -1
- package/package.json +13 -1
- package/scene.d.ts +3 -1
- package/scene.js +38 -13
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiledBoxBuilder.js","sourceRoot":"","sources":["../../../../sourceES6/core/Meshes/Builders/tiledBoxBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport { Matrix, Vector3, Vector4 } from \"../../Maths/math.vector\";\r\nimport { Color4 } from '../../Maths/math.color';\r\nimport { Mesh, _CreationDataStorage } from \"../mesh\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport { CreateTiledPlaneVertexData } from \"./tiledPlaneBuilder\";\r\n\r\n/**\r\n * Creates the VertexData for a tiled box\r\n * @see https://doc.babylonjs.com/divingDeeper/mesh/creation/set/tiled_box\r\n * @param options an object used to set the following optional parameters for the tiled box, required but can be empty\r\n * * pattern sets the rotation or reflection pattern for the tiles,\r\n * * size of the box\r\n * * width of the box, overwrites size\r\n * * height of the box, overwrites size\r\n * * depth of the box, overwrites size\r\n * * tileSize sets the size of a tile\r\n * * tileWidth sets the tile width and overwrites tileSize\r\n * * tileHeight sets the tile width and overwrites tileSize\r\n * * faceUV an array of 6 Vector4 elements used to set different images to each box side\r\n * * faceColors an array of 6 Color3 elements used to set different colors to each box side\r\n * * alignHorizontal places whole tiles aligned to the center, left or right of a row\r\n * * alignVertical places whole tiles aligned to the center, left or right of a column\r\n * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\r\n * @returns the VertexData of the TiledBox\r\n */\r\nexport function CreateTiledBoxVertexData(options: { pattern?: number, size?: number, width?: number, height?: number, depth?: number, tileSize?: number, tileWidth?: number, tileHeight?: number, faceUV?: Vector4[], faceColors?: Color4[], alignHorizontal?: number, alignVertical?: number, sideOrientation?: number }): VertexData {\r\n var nbFaces = 6;\r\n\r\n var faceUV: Vector4[] = options.faceUV || new Array<Vector4>(6);\r\n var faceColors = options.faceColors;\r\n\r\n var flipTile = options.pattern || Mesh.NO_FLIP;\r\n\r\n var width = options.width || options.size || 1;\r\n var height = options.height || options.size || 1;\r\n var depth = options.depth || options.size || 1;\r\n var tileWidth = options.tileWidth || options.tileSize || 1;\r\n var tileHeight = options.tileHeight || options.tileSize || 1;\r\n var alignH = options.alignHorizontal || 0;\r\n var alignV = options.alignVertical || 0;\r\n\r\n var sideOrientation = (options.sideOrientation === 0) ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;\r\n\r\n // default face colors and UV if undefined\r\n for (var f = 0; f < nbFaces; f++) {\r\n if (faceUV[f] === undefined) {\r\n faceUV[f] = new Vector4(0, 0, 1, 1);\r\n }\r\n if (faceColors && faceColors[f] === undefined) {\r\n faceColors[f] = new Color4(1, 1, 1, 1);\r\n }\r\n }\r\n\r\n var halfWidth = width / 2;\r\n var halfHeight = height / 2;\r\n var halfDepth = depth / 2;\r\n\r\n var faceVertexData: Array<VertexData> = [];\r\n\r\n for (var f = 0; f < 2; f++) { //front and back\r\n faceVertexData[f] = CreateTiledPlaneVertexData({\r\n pattern: flipTile,\r\n tileWidth: tileWidth,\r\n tileHeight: tileHeight,\r\n width: width,\r\n height: height,\r\n alignVertical: alignV,\r\n alignHorizontal: alignH,\r\n sideOrientation: sideOrientation\r\n });\r\n }\r\n\r\n for (var f = 2; f < 4; f++) { //sides\r\n faceVertexData[f] = CreateTiledPlaneVertexData({\r\n pattern: flipTile,\r\n tileWidth: tileWidth,\r\n tileHeight: tileHeight,\r\n width: depth,\r\n height: height,\r\n alignVertical: alignV,\r\n alignHorizontal: alignH,\r\n sideOrientation: sideOrientation\r\n });\r\n }\r\n\r\n var baseAlignV = alignV;\r\n if (alignV === Mesh.BOTTOM) {\r\n baseAlignV = Mesh.TOP;\r\n }\r\n else if (alignV === Mesh.TOP) {\r\n baseAlignV = Mesh.BOTTOM;\r\n }\r\n\r\n for (var f = 4; f < 6; f++) { //top and bottom\r\n faceVertexData[f] = CreateTiledPlaneVertexData({\r\n pattern: flipTile,\r\n tileWidth: tileWidth,\r\n tileHeight: tileHeight,\r\n width: width,\r\n height: depth,\r\n alignVertical: baseAlignV,\r\n alignHorizontal: alignH,\r\n sideOrientation: sideOrientation\r\n });\r\n }\r\n\r\n var positions: Array<number> = [];\r\n var normals: Array<number> = [];\r\n var uvs: Array<number> = [];\r\n var indices: Array<number> = [];\r\n var colors: Array<number> = [];\r\n var facePositions: Array<Array<Vector3>> = [];\r\n var faceNormals: Array<Array<Vector3>> = [];\r\n\r\n var newFaceUV: Array<Array<number>> = [];\r\n var len: number = 0;\r\n var lu: number = 0;\r\n\r\n var li: number = 0;\r\n\r\n for (var f = 0; f < nbFaces; f++) {\r\n var len = faceVertexData[f].positions!.length;\r\n facePositions[f] = [];\r\n faceNormals[f] = [];\r\n for (var p = 0; p < len / 3; p++) {\r\n facePositions[f].push(new Vector3(faceVertexData[f].positions![3 * p], faceVertexData[f].positions![3 * p + 1], faceVertexData[f].positions![3 * p + 2]));\r\n faceNormals[f].push(new Vector3(faceVertexData[f].normals![3 * p], faceVertexData[f].normals![3 * p + 1], faceVertexData[f].normals![3 * p + 2]));\r\n }\r\n // uvs\r\n lu = faceVertexData[f].uvs!.length;\r\n newFaceUV[f] = [];\r\n for (var i = 0; i < lu; i += 2) {\r\n newFaceUV[f][i] = faceUV[f].x + (faceUV[f].z - faceUV[f].x) * faceVertexData[f].uvs![i];\r\n newFaceUV[f][i + 1] = faceUV[f].y + (faceUV[f].w - faceUV[f].y) * faceVertexData[f].uvs![i + 1];\r\n }\r\n uvs = uvs.concat(newFaceUV[f]);\r\n indices = indices.concat(<Array<number>>faceVertexData[f].indices!.map((x: number) => x + li));\r\n li += facePositions[f].length;\r\n if (faceColors) {\r\n for (var c = 0; c < 4; c++) {\r\n colors.push(faceColors[f].r, faceColors[f].g, faceColors[f].b, faceColors[f].a);\r\n }\r\n }\r\n }\r\n\r\n var vec0 = new Vector3(0, 0, halfDepth);\r\n var mtrx0 = Matrix.RotationY(Math.PI);\r\n positions = facePositions[0].map((entry) => Vector3.TransformNormal(entry, mtrx0).add(vec0)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n );\r\n normals = faceNormals[0].map((entry) => Vector3.TransformNormal(entry, mtrx0)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n );\r\n positions = positions.concat(facePositions[1].map((entry) => entry.subtract(vec0)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n normals = normals.concat(faceNormals[1].map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n\r\n var vec2 = new Vector3(halfWidth, 0, 0);\r\n var mtrx2 = Matrix.RotationY(-Math.PI / 2);\r\n positions = positions.concat(facePositions[2].map((entry) => Vector3.TransformNormal(entry, mtrx2).add(vec2)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n normals = normals.concat(faceNormals[2].map((entry) => Vector3.TransformNormal(entry, mtrx2)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n var mtrx3 = Matrix.RotationY(Math.PI / 2);\r\n positions = positions.concat(facePositions[3].map((entry) => Vector3.TransformNormal(entry, mtrx3).subtract(vec2)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n normals = normals.concat(faceNormals[3].map((entry) => Vector3.TransformNormal(entry, mtrx3)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n\r\n var vec4 = new Vector3(0, halfHeight, 0);\r\n var mtrx4 = Matrix.RotationX(Math.PI / 2);\r\n positions = positions.concat(facePositions[4].map((entry) => Vector3.TransformNormal(entry, mtrx4).add(vec4)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n normals = normals.concat(faceNormals[4].map((entry) => Vector3.TransformNormal(entry, mtrx4)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n var mtrx5 = Matrix.RotationX(-Math.PI / 2);\r\n positions = positions.concat(facePositions[5].map((entry) => Vector3.TransformNormal(entry, mtrx5).subtract(vec4)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n normals = normals.concat(faceNormals[5].map((entry) => Vector3.TransformNormal(entry, mtrx5)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n\r\n // sides\r\n VertexData._ComputeSides(sideOrientation, positions, indices, normals, uvs);\r\n\r\n // Result\r\n var vertexData = new VertexData();\r\n\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n vertexData.normals = normals;\r\n vertexData.uvs = uvs;\r\n\r\n if (faceColors) {\r\n var totalColors = (sideOrientation === VertexData.DOUBLESIDE) ? colors.concat(colors) : colors;\r\n vertexData.colors = totalColors;\r\n }\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates a tiled box mesh\r\n * @see https://doc.babylonjs.com/divingDeeper/mesh/creation/set/tiled_box\r\n * @param name defines the name of the mesh\r\n * @param options an object used to set the following optional parameters for the tiled box, required but can be empty\r\n * * pattern sets the rotation or reflection pattern for the tiles,\r\n * * size of the box\r\n * * width of the box, overwrites size\r\n * * height of the box, overwrites size\r\n * * depth of the box, overwrites size\r\n * * tileSize sets the size of a tile\r\n * * tileWidth sets the tile width and overwrites tileSize\r\n * * tileHeight sets the tile width and overwrites tileSize\r\n * * faceUV an array of 6 Vector4 elements used to set different images to each box side\r\n * * faceColors an array of 6 Color3 elements used to set different colors to each box side\r\n * * alignHorizontal places whole tiles aligned to the center, left or right of a row\r\n * * alignVertical places whole tiles aligned to the center, left or right of a column\r\n * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\r\n * @param scene defines the hosting scene\r\n * @returns the box mesh\r\n */\r\nexport function CreateTiledBox(name: string, options: { pattern?: number, width?: number, height?: number, depth?: number, tileSize?: number, tileWidth?: number, tileHeight?: number, alignHorizontal?: number, alignVertical?: number, faceUV?: Vector4[], faceColors?: Color4[], sideOrientation?: number, updatable?: boolean }, scene: Nullable<Scene> = null): Mesh {\r\n var box = new Mesh(name, scene);\r\n\r\n options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\r\n box._originalBuilderSideOrientation = options.sideOrientation;\r\n\r\n var vertexData = CreateTiledBoxVertexData(options);\r\n\r\n vertexData.applyToMesh(box, options.updatable);\r\n\r\n return box;\r\n}\r\n\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use CreateTiledBox instead\r\n */\r\nexport const TiledBoxBuilder = {\r\n CreateTiledBox\r\n};\r\n\r\nVertexData.CreateTiledBox = CreateTiledBoxVertexData;"]}
|
|
1
|
+
{"version":3,"file":"tiledBoxBuilder.js","sourceRoot":"","sources":["../../../../sourceES6/core/Meshes/Builders/tiledBoxBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport { Matrix, Vector3, Vector4 } from \"../../Maths/math.vector\";\r\nimport { Color4 } from '../../Maths/math.color';\r\nimport { Mesh, _CreationDataStorage } from \"../mesh\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport { CreateTiledPlaneVertexData } from \"./tiledPlaneBuilder\";\r\nimport { CompatibilityOptions } from \"../../Compat/compatibilityOptions\";\r\n\r\n/**\r\n * Creates the VertexData for a tiled box\r\n * @see https://doc.babylonjs.com/divingDeeper/mesh/creation/set/tiled_box\r\n * @param options an object used to set the following optional parameters for the tiled box, required but can be empty\r\n * * pattern sets the rotation or reflection pattern for the tiles,\r\n * * size of the box\r\n * * width of the box, overwrites size\r\n * * height of the box, overwrites size\r\n * * depth of the box, overwrites size\r\n * * tileSize sets the size of a tile\r\n * * tileWidth sets the tile width and overwrites tileSize\r\n * * tileHeight sets the tile width and overwrites tileSize\r\n * * faceUV an array of 6 Vector4 elements used to set different images to each box side\r\n * * faceColors an array of 6 Color3 elements used to set different colors to each box side\r\n * * alignHorizontal places whole tiles aligned to the center, left or right of a row\r\n * * alignVertical places whole tiles aligned to the center, left or right of a column\r\n * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\r\n * @returns the VertexData of the TiledBox\r\n */\r\nexport function CreateTiledBoxVertexData(options: { pattern?: number, size?: number, width?: number, height?: number, depth?: number, tileSize?: number, tileWidth?: number, tileHeight?: number, faceUV?: Vector4[], faceColors?: Color4[], alignHorizontal?: number, alignVertical?: number, sideOrientation?: number }): VertexData {\r\n var nbFaces = 6;\r\n\r\n var faceUV: Vector4[] = options.faceUV || new Array<Vector4>(6);\r\n var faceColors = options.faceColors;\r\n\r\n var flipTile = options.pattern || Mesh.NO_FLIP;\r\n\r\n var width = options.width || options.size || 1;\r\n var height = options.height || options.size || 1;\r\n var depth = options.depth || options.size || 1;\r\n var tileWidth = options.tileWidth || options.tileSize || 1;\r\n var tileHeight = options.tileHeight || options.tileSize || 1;\r\n var alignH = options.alignHorizontal || 0;\r\n var alignV = options.alignVertical || 0;\r\n\r\n var sideOrientation = (options.sideOrientation === 0) ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;\r\n\r\n // default face colors and UV if undefined\r\n for (var f = 0; f < nbFaces; f++) {\r\n if (faceUV[f] === undefined) {\r\n faceUV[f] = new Vector4(0, 0, 1, 1);\r\n }\r\n if (faceColors && faceColors[f] === undefined) {\r\n faceColors[f] = new Color4(1, 1, 1, 1);\r\n }\r\n }\r\n\r\n var halfWidth = width / 2;\r\n var halfHeight = height / 2;\r\n var halfDepth = depth / 2;\r\n\r\n var faceVertexData: Array<VertexData> = [];\r\n\r\n for (var f = 0; f < 2; f++) { //front and back\r\n faceVertexData[f] = CreateTiledPlaneVertexData({\r\n pattern: flipTile,\r\n tileWidth: tileWidth,\r\n tileHeight: tileHeight,\r\n width: width,\r\n height: height,\r\n alignVertical: alignV,\r\n alignHorizontal: alignH,\r\n sideOrientation: sideOrientation\r\n });\r\n }\r\n\r\n for (var f = 2; f < 4; f++) { //sides\r\n faceVertexData[f] = CreateTiledPlaneVertexData({\r\n pattern: flipTile,\r\n tileWidth: tileWidth,\r\n tileHeight: tileHeight,\r\n width: depth,\r\n height: height,\r\n alignVertical: alignV,\r\n alignHorizontal: alignH,\r\n sideOrientation: sideOrientation\r\n });\r\n }\r\n\r\n var baseAlignV = alignV;\r\n if (alignV === Mesh.BOTTOM) {\r\n baseAlignV = Mesh.TOP;\r\n }\r\n else if (alignV === Mesh.TOP) {\r\n baseAlignV = Mesh.BOTTOM;\r\n }\r\n\r\n for (var f = 4; f < 6; f++) { //top and bottom\r\n faceVertexData[f] = CreateTiledPlaneVertexData({\r\n pattern: flipTile,\r\n tileWidth: tileWidth,\r\n tileHeight: tileHeight,\r\n width: width,\r\n height: depth,\r\n alignVertical: baseAlignV,\r\n alignHorizontal: alignH,\r\n sideOrientation: sideOrientation\r\n });\r\n }\r\n\r\n var positions: Array<number> = [];\r\n var normals: Array<number> = [];\r\n var uvs: Array<number> = [];\r\n var indices: Array<number> = [];\r\n var colors: Array<number> = [];\r\n var facePositions: Array<Array<Vector3>> = [];\r\n var faceNormals: Array<Array<Vector3>> = [];\r\n\r\n var newFaceUV: Array<Array<number>> = [];\r\n var len: number = 0;\r\n var lu: number = 0;\r\n\r\n var li: number = 0;\r\n\r\n for (var f = 0; f < nbFaces; f++) {\r\n var len = faceVertexData[f].positions!.length;\r\n facePositions[f] = [];\r\n faceNormals[f] = [];\r\n for (var p = 0; p < len / 3; p++) {\r\n facePositions[f].push(new Vector3(faceVertexData[f].positions![3 * p], faceVertexData[f].positions![3 * p + 1], faceVertexData[f].positions![3 * p + 2]));\r\n faceNormals[f].push(new Vector3(faceVertexData[f].normals![3 * p], faceVertexData[f].normals![3 * p + 1], faceVertexData[f].normals![3 * p + 2]));\r\n }\r\n // uvs\r\n lu = faceVertexData[f].uvs!.length;\r\n newFaceUV[f] = [];\r\n for (var i = 0; i < lu; i += 2) {\r\n newFaceUV[f][i] = faceUV[f].x + (faceUV[f].z - faceUV[f].x) * faceVertexData[f].uvs![i];\r\n newFaceUV[f][i + 1] = faceUV[f].y + (faceUV[f].w - faceUV[f].y) * faceVertexData[f].uvs![i + 1];\r\n\r\n if (CompatibilityOptions.UseOpenGLOrientationForUV) {\r\n newFaceUV[f][i + 1] = 1.0 - newFaceUV[f][i + 1];\r\n }\r\n }\r\n uvs = uvs.concat(newFaceUV[f]);\r\n\r\n indices = indices.concat(<Array<number>>faceVertexData[f].indices!.map((x: number) => x + li));\r\n li += facePositions[f].length;\r\n if (faceColors) {\r\n for (var c = 0; c < 4; c++) {\r\n colors.push(faceColors[f].r, faceColors[f].g, faceColors[f].b, faceColors[f].a);\r\n }\r\n }\r\n }\r\n\r\n var vec0 = new Vector3(0, 0, halfDepth);\r\n var mtrx0 = Matrix.RotationY(Math.PI);\r\n positions = facePositions[0].map((entry) => Vector3.TransformNormal(entry, mtrx0).add(vec0)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n );\r\n normals = faceNormals[0].map((entry) => Vector3.TransformNormal(entry, mtrx0)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n );\r\n positions = positions.concat(facePositions[1].map((entry) => entry.subtract(vec0)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n normals = normals.concat(faceNormals[1].map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n\r\n var vec2 = new Vector3(halfWidth, 0, 0);\r\n var mtrx2 = Matrix.RotationY(-Math.PI / 2);\r\n positions = positions.concat(facePositions[2].map((entry) => Vector3.TransformNormal(entry, mtrx2).add(vec2)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n normals = normals.concat(faceNormals[2].map((entry) => Vector3.TransformNormal(entry, mtrx2)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n var mtrx3 = Matrix.RotationY(Math.PI / 2);\r\n positions = positions.concat(facePositions[3].map((entry) => Vector3.TransformNormal(entry, mtrx3).subtract(vec2)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n normals = normals.concat(faceNormals[3].map((entry) => Vector3.TransformNormal(entry, mtrx3)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n\r\n var vec4 = new Vector3(0, halfHeight, 0);\r\n var mtrx4 = Matrix.RotationX(Math.PI / 2);\r\n positions = positions.concat(facePositions[4].map((entry) => Vector3.TransformNormal(entry, mtrx4).add(vec4)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n normals = normals.concat(faceNormals[4].map((entry) => Vector3.TransformNormal(entry, mtrx4)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n var mtrx5 = Matrix.RotationX(-Math.PI / 2);\r\n positions = positions.concat(facePositions[5].map((entry) => Vector3.TransformNormal(entry, mtrx5).subtract(vec4)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n normals = normals.concat(faceNormals[5].map((entry) => Vector3.TransformNormal(entry, mtrx5)).map((entry) => [entry.x, entry.y, entry.z]).reduce(\r\n (accumulator: Array<number>, currentValue) => accumulator.concat(currentValue),\r\n []\r\n ));\r\n\r\n // sides\r\n VertexData._ComputeSides(sideOrientation, positions, indices, normals, uvs);\r\n\r\n // Result\r\n var vertexData = new VertexData();\r\n\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n vertexData.normals = normals;\r\n vertexData.uvs = uvs;\r\n\r\n if (faceColors) {\r\n var totalColors = (sideOrientation === VertexData.DOUBLESIDE) ? colors.concat(colors) : colors;\r\n vertexData.colors = totalColors;\r\n }\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates a tiled box mesh\r\n * @see https://doc.babylonjs.com/divingDeeper/mesh/creation/set/tiled_box\r\n * @param name defines the name of the mesh\r\n * @param options an object used to set the following optional parameters for the tiled box, required but can be empty\r\n * * pattern sets the rotation or reflection pattern for the tiles,\r\n * * size of the box\r\n * * width of the box, overwrites size\r\n * * height of the box, overwrites size\r\n * * depth of the box, overwrites size\r\n * * tileSize sets the size of a tile\r\n * * tileWidth sets the tile width and overwrites tileSize\r\n * * tileHeight sets the tile width and overwrites tileSize\r\n * * faceUV an array of 6 Vector4 elements used to set different images to each box side\r\n * * faceColors an array of 6 Color3 elements used to set different colors to each box side\r\n * * alignHorizontal places whole tiles aligned to the center, left or right of a row\r\n * * alignVertical places whole tiles aligned to the center, left or right of a column\r\n * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\r\n * @param scene defines the hosting scene\r\n * @returns the box mesh\r\n */\r\nexport function CreateTiledBox(name: string, options: { pattern?: number, width?: number, height?: number, depth?: number, tileSize?: number, tileWidth?: number, tileHeight?: number, alignHorizontal?: number, alignVertical?: number, faceUV?: Vector4[], faceColors?: Color4[], sideOrientation?: number, updatable?: boolean }, scene: Nullable<Scene> = null): Mesh {\r\n var box = new Mesh(name, scene);\r\n\r\n options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\r\n box._originalBuilderSideOrientation = options.sideOrientation;\r\n\r\n var vertexData = CreateTiledBoxVertexData(options);\r\n\r\n vertexData.applyToMesh(box, options.updatable);\r\n\r\n return box;\r\n}\r\n\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use CreateTiledBox instead\r\n */\r\nexport const TiledBoxBuilder = {\r\n CreateTiledBox\r\n};\r\n\r\nVertexData.CreateTiledBox = CreateTiledBoxVertexData;"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Matrix, Vector3, Vector2 } from "../../Maths/math.vector.js";
|
|
2
2
|
import { Mesh } from "../mesh.js";
|
|
3
3
|
import { VertexData } from "../mesh.vertexData.js";
|
|
4
|
+
import { CompatibilityOptions } from "../../Compat/compatibilityOptions.js";
|
|
4
5
|
/**
|
|
5
6
|
* Creates the VertexData for a torus
|
|
6
7
|
* @param options an object used to set the following optional parameters for the box, required but can be empty
|
|
@@ -39,7 +40,7 @@ export function CreateTorusVertexData(options) {
|
|
|
39
40
|
normal = Vector3.TransformNormal(normal, transform);
|
|
40
41
|
positions.push(position.x, position.y, position.z);
|
|
41
42
|
normals.push(normal.x, normal.y, normal.z);
|
|
42
|
-
uvs.push(textureCoordinate.x, textureCoordinate.y);
|
|
43
|
+
uvs.push(textureCoordinate.x, CompatibilityOptions.UseOpenGLOrientationForUV ? 1.0 - textureCoordinate.y : textureCoordinate.y);
|
|
43
44
|
// And create indices for two triangles.
|
|
44
45
|
var nextI = (i + 1) % stride;
|
|
45
46
|
var nextJ = (j + 1) % stride;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"torusBuilder.js","sourceRoot":"","sources":["../../../../sourceES6/core/Meshes/Builders/torusBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector4, Matrix, Vector3, Vector2 } from \"../../Maths/math.vector\";\r\nimport { Mesh, _CreationDataStorage } from \"../mesh\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport { Scene } from \"../../scene\";\r\n\r\n/**\r\n * Creates the VertexData for a torus\r\n * @param options an object used to set the following optional parameters for the box, required but can be empty\r\n * * diameter the diameter of the torus, optional default 1\r\n * * thickness the diameter of the tube forming the torus, optional default 0.5\r\n * * tessellation the number of prism sides, 3 for a triangular prism, optional, default 24\r\n * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\r\n * * frontUvs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the front side, optional, default vector4 (0, 0, 1, 1)\r\n * * backUVs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the back side, optional, default vector4 (0, 0, 1, 1)\r\n * @returns the VertexData of the torus\r\n */\r\nexport function CreateTorusVertexData(options: { diameter?: number, thickness?: number, tessellation?: number, sideOrientation?: number, frontUVs?: Vector4, backUVs?: Vector4 }) {\r\n var indices = [];\r\n var positions = [];\r\n var normals = [];\r\n var uvs = [];\r\n\r\n var diameter = options.diameter || 1;\r\n var thickness = options.thickness || 0.5;\r\n var tessellation = options.tessellation || 16;\r\n var sideOrientation = (options.sideOrientation === 0) ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;\r\n\r\n var stride = tessellation + 1;\r\n\r\n for (var i = 0; i <= tessellation; i++) {\r\n var u = i / tessellation;\r\n\r\n var outerAngle = i * Math.PI * 2.0 / tessellation - Math.PI / 2.0;\r\n\r\n var transform = Matrix.Translation(diameter / 2.0, 0, 0).multiply(Matrix.RotationY(outerAngle));\r\n\r\n for (var j = 0; j <= tessellation; j++) {\r\n var v = 1 - j / tessellation;\r\n\r\n var innerAngle = j * Math.PI * 2.0 / tessellation + Math.PI;\r\n var dx = Math.cos(innerAngle);\r\n var dy = Math.sin(innerAngle);\r\n\r\n // Create a vertex.\r\n var normal = new Vector3(dx, dy, 0);\r\n var position = normal.scale(thickness / 2);\r\n var textureCoordinate = new Vector2(u, v);\r\n\r\n position = Vector3.TransformCoordinates(position, transform);\r\n normal = Vector3.TransformNormal(normal, transform);\r\n\r\n positions.push(position.x, position.y, position.z);\r\n normals.push(normal.x, normal.y, normal.z);\r\n uvs.push(textureCoordinate.x, textureCoordinate.y);\r\n\r\n // And create indices for two triangles.\r\n var nextI = (i + 1) % stride;\r\n var nextJ = (j + 1) % stride;\r\n\r\n indices.push(i * stride + j);\r\n indices.push(i * stride + nextJ);\r\n indices.push(nextI * stride + j);\r\n\r\n indices.push(i * stride + nextJ);\r\n indices.push(nextI * stride + nextJ);\r\n indices.push(nextI * stride + j);\r\n }\r\n }\r\n\r\n // Sides\r\n VertexData._ComputeSides(sideOrientation, positions, indices, normals, uvs, options.frontUVs, options.backUVs);\r\n\r\n // Result\r\n var vertexData = new VertexData();\r\n\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n vertexData.normals = normals;\r\n vertexData.uvs = uvs;\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates a torus mesh\r\n * * The parameter `diameter` sets the diameter size (float) of the torus (default 1)\r\n * * The parameter `thickness` sets the diameter size of the tube of the torus (float, default 0.5)\r\n * * The parameter `tessellation` sets the number of torus sides (positive integer, default 16)\r\n * * You can also set the mesh side orientation with the values : BABYLON.Mesh.FRONTSIDE (default), BABYLON.Mesh.BACKSIDE or BABYLON.Mesh.DOUBLESIDE\r\n * * If you create a double-sided mesh, you can choose what parts of the texture image to crop and stick respectively on the front and the back sides with the parameters `frontUVs` and `backUVs` (Vector4). Detail here : https://doc.babylonjs.com/babylon101/discover_basic_elements#side-orientation\r\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created.\r\n * @param name defines the name of the mesh\r\n * @param options defines the options used to create the mesh\r\n * @param scene defines the hosting scene\r\n * @returns the torus mesh\r\n * @see https://doc.babylonjs.com/how_to/set_shapes#torus\r\n */\r\nexport function CreateTorus(name: string, options: { diameter?: number, thickness?: number, tessellation?: number, updatable?: boolean, sideOrientation?: number, frontUVs?: Vector4, backUVs?: Vector4 } = {}, scene: any): Mesh {\r\n var torus = new Mesh(name, scene);\r\n\r\n options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\r\n torus._originalBuilderSideOrientation = options.sideOrientation;\r\n\r\n var vertexData = CreateTorusVertexData(options);\r\n\r\n vertexData.applyToMesh(torus, options.updatable);\r\n\r\n return torus;\r\n}\r\n\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use CreateTorus instead\r\n */\r\nexport const TorusBuilder = {\r\n CreateTorus\r\n};\r\n\r\nVertexData.CreateTorus = CreateTorusVertexData;\r\n\r\nMesh.CreateTorus = (name: string, diameter: number, thickness: number, tessellation: number, scene?: Scene, updatable?: boolean, sideOrientation?: number): Mesh => {\r\n const options = {\r\n diameter,\r\n thickness,\r\n tessellation,\r\n sideOrientation,\r\n updatable\r\n };\r\n\r\n return CreateTorus(name, options, scene);\r\n};"]}
|
|
1
|
+
{"version":3,"file":"torusBuilder.js","sourceRoot":"","sources":["../../../../sourceES6/core/Meshes/Builders/torusBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector4, Matrix, Vector3, Vector2 } from \"../../Maths/math.vector\";\r\nimport { Mesh, _CreationDataStorage } from \"../mesh\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport { Scene } from \"../../scene\";\r\nimport { CompatibilityOptions } from \"../../Compat/compatibilityOptions\";\r\n\r\n/**\r\n * Creates the VertexData for a torus\r\n * @param options an object used to set the following optional parameters for the box, required but can be empty\r\n * * diameter the diameter of the torus, optional default 1\r\n * * thickness the diameter of the tube forming the torus, optional default 0.5\r\n * * tessellation the number of prism sides, 3 for a triangular prism, optional, default 24\r\n * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\r\n * * frontUvs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the front side, optional, default vector4 (0, 0, 1, 1)\r\n * * backUVs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the back side, optional, default vector4 (0, 0, 1, 1)\r\n * @returns the VertexData of the torus\r\n */\r\nexport function CreateTorusVertexData(options: { diameter?: number, thickness?: number, tessellation?: number, sideOrientation?: number, frontUVs?: Vector4, backUVs?: Vector4 }) {\r\n var indices = [];\r\n var positions = [];\r\n var normals = [];\r\n var uvs = [];\r\n\r\n var diameter = options.diameter || 1;\r\n var thickness = options.thickness || 0.5;\r\n var tessellation = options.tessellation || 16;\r\n var sideOrientation = (options.sideOrientation === 0) ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;\r\n\r\n var stride = tessellation + 1;\r\n\r\n for (var i = 0; i <= tessellation; i++) {\r\n var u = i / tessellation;\r\n\r\n var outerAngle = i * Math.PI * 2.0 / tessellation - Math.PI / 2.0;\r\n\r\n var transform = Matrix.Translation(diameter / 2.0, 0, 0).multiply(Matrix.RotationY(outerAngle));\r\n\r\n for (var j = 0; j <= tessellation; j++) {\r\n var v = 1 - j / tessellation;\r\n\r\n var innerAngle = j * Math.PI * 2.0 / tessellation + Math.PI;\r\n var dx = Math.cos(innerAngle);\r\n var dy = Math.sin(innerAngle);\r\n\r\n // Create a vertex.\r\n var normal = new Vector3(dx, dy, 0);\r\n var position = normal.scale(thickness / 2);\r\n var textureCoordinate = new Vector2(u, v);\r\n\r\n position = Vector3.TransformCoordinates(position, transform);\r\n normal = Vector3.TransformNormal(normal, transform);\r\n\r\n positions.push(position.x, position.y, position.z);\r\n normals.push(normal.x, normal.y, normal.z);\r\n uvs.push(textureCoordinate.x, CompatibilityOptions.UseOpenGLOrientationForUV ? 1.0 - textureCoordinate.y : textureCoordinate.y);\r\n\r\n // And create indices for two triangles.\r\n var nextI = (i + 1) % stride;\r\n var nextJ = (j + 1) % stride;\r\n\r\n indices.push(i * stride + j);\r\n indices.push(i * stride + nextJ);\r\n indices.push(nextI * stride + j);\r\n\r\n indices.push(i * stride + nextJ);\r\n indices.push(nextI * stride + nextJ);\r\n indices.push(nextI * stride + j);\r\n }\r\n }\r\n\r\n // Sides\r\n VertexData._ComputeSides(sideOrientation, positions, indices, normals, uvs, options.frontUVs, options.backUVs);\r\n\r\n // Result\r\n var vertexData = new VertexData();\r\n\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n vertexData.normals = normals;\r\n vertexData.uvs = uvs;\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates a torus mesh\r\n * * The parameter `diameter` sets the diameter size (float) of the torus (default 1)\r\n * * The parameter `thickness` sets the diameter size of the tube of the torus (float, default 0.5)\r\n * * The parameter `tessellation` sets the number of torus sides (positive integer, default 16)\r\n * * You can also set the mesh side orientation with the values : BABYLON.Mesh.FRONTSIDE (default), BABYLON.Mesh.BACKSIDE or BABYLON.Mesh.DOUBLESIDE\r\n * * If you create a double-sided mesh, you can choose what parts of the texture image to crop and stick respectively on the front and the back sides with the parameters `frontUVs` and `backUVs` (Vector4). Detail here : https://doc.babylonjs.com/babylon101/discover_basic_elements#side-orientation\r\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created.\r\n * @param name defines the name of the mesh\r\n * @param options defines the options used to create the mesh\r\n * @param scene defines the hosting scene\r\n * @returns the torus mesh\r\n * @see https://doc.babylonjs.com/how_to/set_shapes#torus\r\n */\r\nexport function CreateTorus(name: string, options: { diameter?: number, thickness?: number, tessellation?: number, updatable?: boolean, sideOrientation?: number, frontUVs?: Vector4, backUVs?: Vector4 } = {}, scene: any): Mesh {\r\n var torus = new Mesh(name, scene);\r\n\r\n options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\r\n torus._originalBuilderSideOrientation = options.sideOrientation;\r\n\r\n var vertexData = CreateTorusVertexData(options);\r\n\r\n vertexData.applyToMesh(torus, options.updatable);\r\n\r\n return torus;\r\n}\r\n\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use CreateTorus instead\r\n */\r\nexport const TorusBuilder = {\r\n CreateTorus\r\n};\r\n\r\nVertexData.CreateTorus = CreateTorusVertexData;\r\n\r\nMesh.CreateTorus = (name: string, diameter: number, thickness: number, tessellation: number, scene?: Scene, updatable?: boolean, sideOrientation?: number): Mesh => {\r\n const options = {\r\n diameter,\r\n thickness,\r\n tessellation,\r\n sideOrientation,\r\n updatable\r\n };\r\n\r\n return CreateTorus(name, options, scene);\r\n};"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Vector3 } from "../../Maths/math.vector.js";
|
|
2
2
|
import { Mesh } from "../mesh.js";
|
|
3
3
|
import { VertexData } from "../mesh.vertexData.js";
|
|
4
|
+
import { CompatibilityOptions } from "../../Compat/compatibilityOptions.js";
|
|
4
5
|
// based on http://code.google.com/p/away3d/source/browse/trunk/fp10/Away3D/src/away3d/primitives/TorusKnot.as?spec=svn2473&r=2473
|
|
5
6
|
/**
|
|
6
7
|
* Creates the VertexData for a TorusKnot
|
|
@@ -62,7 +63,7 @@ export function CreateTorusKnotVertexData(options) {
|
|
|
62
63
|
positions.push(p1.y + cx * n.y + cy * bitan.y);
|
|
63
64
|
positions.push(p1.z + cx * n.z + cy * bitan.z);
|
|
64
65
|
uvs.push(i / radialSegments);
|
|
65
|
-
uvs.push(j / tubularSegments);
|
|
66
|
+
uvs.push(CompatibilityOptions.UseOpenGLOrientationForUV ? 1.0 - j / tubularSegments : j / tubularSegments);
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
for (i = 0; i < radialSegments; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"torusKnotBuilder.js","sourceRoot":"","sources":["../../../../sourceES6/core/Meshes/Builders/torusKnotBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector4, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Mesh, _CreationDataStorage } from \"../mesh\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport { Scene } from \"../../scene\";\r\n\r\n// based on http://code.google.com/p/away3d/source/browse/trunk/fp10/Away3D/src/away3d/primitives/TorusKnot.as?spec=svn2473&r=2473\r\n/**\r\n * Creates the VertexData for a TorusKnot\r\n * @param options an object used to set the following optional parameters for the TorusKnot, required but can be empty\r\n * * radius the radius of the torus knot, optional, default 2\r\n * * tube the thickness of the tube, optional, default 0.5\r\n * * radialSegments the number of sides on each tube segments, optional, default 32\r\n * * tubularSegments the number of tubes to decompose the knot into, optional, default 32\r\n * * p the number of windings around the z axis, optional, default 2\r\n * * q the number of windings around the x axis, optional, default 3\r\n * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\r\n * * frontUvs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the front side, optional, default vector4 (0, 0, 1, 1)\r\n * * backUVs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the back side, optional, default vector4 (0, 0, 1, 1)\r\n * @returns the VertexData of the Torus Knot\r\n */\r\nexport function CreateTorusKnotVertexData(options: { radius?: number, tube?: number, radialSegments?: number, tubularSegments?: number, p?: number, q?: number, sideOrientation?: number, frontUVs?: Vector4, backUVs?: Vector4 }): VertexData {\r\n var indices = new Array<number>();\r\n var positions = new Array<number>();\r\n var normals = new Array<number>();\r\n var uvs = new Array<number>();\r\n\r\n var radius = options.radius || 2;\r\n var tube = options.tube || 0.5;\r\n var radialSegments = options.radialSegments || 32;\r\n var tubularSegments = options.tubularSegments || 32;\r\n var p = options.p || 2;\r\n var q = options.q || 3;\r\n var sideOrientation = (options.sideOrientation === 0) ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;\r\n\r\n // Helper\r\n var getPos = (angle: number) => {\r\n\r\n var cu = Math.cos(angle);\r\n var su = Math.sin(angle);\r\n var quOverP = q / p * angle;\r\n var cs = Math.cos(quOverP);\r\n\r\n var tx = radius * (2 + cs) * 0.5 * cu;\r\n var ty = radius * (2 + cs) * su * 0.5;\r\n var tz = radius * Math.sin(quOverP) * 0.5;\r\n\r\n return new Vector3(tx, ty, tz);\r\n };\r\n\r\n // Vertices\r\n var i: number;\r\n var j: number;\r\n for (i = 0; i <= radialSegments; i++) {\r\n var modI = i % radialSegments;\r\n var u = modI / radialSegments * 2 * p * Math.PI;\r\n var p1 = getPos(u);\r\n var p2 = getPos(u + 0.01);\r\n var tang = p2.subtract(p1);\r\n var n = p2.add(p1);\r\n\r\n var bitan = Vector3.Cross(tang, n);\r\n n = Vector3.Cross(bitan, tang);\r\n\r\n bitan.normalize();\r\n n.normalize();\r\n\r\n for (j = 0; j < tubularSegments; j++) {\r\n var modJ = j % tubularSegments;\r\n var v = modJ / tubularSegments * 2 * Math.PI;\r\n var cx = -tube * Math.cos(v);\r\n var cy = tube * Math.sin(v);\r\n\r\n positions.push(p1.x + cx * n.x + cy * bitan.x);\r\n positions.push(p1.y + cx * n.y + cy * bitan.y);\r\n positions.push(p1.z + cx * n.z + cy * bitan.z);\r\n\r\n uvs.push(i / radialSegments);\r\n uvs.push(j / tubularSegments);\r\n }\r\n }\r\n\r\n for (i = 0; i < radialSegments; i++) {\r\n for (j = 0; j < tubularSegments; j++) {\r\n var jNext = (j + 1) % tubularSegments;\r\n var a = i * tubularSegments + j;\r\n var b = (i + 1) * tubularSegments + j;\r\n var c = (i + 1) * tubularSegments + jNext;\r\n var d = i * tubularSegments + jNext;\r\n\r\n indices.push(d); indices.push(b); indices.push(a);\r\n indices.push(d); indices.push(c); indices.push(b);\r\n }\r\n }\r\n\r\n // Normals\r\n VertexData.ComputeNormals(positions, indices, normals);\r\n\r\n // Sides\r\n VertexData._ComputeSides(sideOrientation, positions, indices, normals, uvs, options.frontUVs, options.backUVs);\r\n\r\n // Result\r\n var vertexData = new VertexData();\r\n\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n vertexData.normals = normals;\r\n vertexData.uvs = uvs;\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates a torus knot mesh\r\n * * The parameter `radius` sets the global radius size (float) of the torus knot (default 2)\r\n * * The parameter `radialSegments` sets the number of sides on each tube segments (positive integer, default 32)\r\n * * The parameter `tubularSegments` sets the number of tubes to decompose the knot into (positive integer, default 32)\r\n * * The parameters `p` and `q` are the number of windings on each axis (positive integers, default 2 and 3)\r\n * * You can also set the mesh side orientation with the values : BABYLON.Mesh.FRONTSIDE (default), BABYLON.Mesh.BACKSIDE or BABYLON.Mesh.DOUBLESIDE\r\n * * If you create a double-sided mesh, you can choose what parts of the texture image to crop and stick respectively on the front and the back sides with the parameters `frontUVs` and `backUVs` (Vector4). Detail here : https://doc.babylonjs.com/babylon101/discover_basic_elements#side-orientation\r\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created.\r\n * @param name defines the name of the mesh\r\n * @param options defines the options used to create the mesh\r\n * @param scene defines the hosting scene\r\n * @returns the torus knot mesh\r\n * @see https://doc.babylonjs.com/how_to/set_shapes#torus-knot\r\n */\r\nexport function CreateTorusKnot(name: string, options: { radius?: number, tube?: number, radialSegments?: number, tubularSegments?: number, p?: number, q?: number, updatable?: boolean, sideOrientation?: number, frontUVs?: Vector4, backUVs?: Vector4 } = {}, scene: any): Mesh {\r\n var torusKnot = new Mesh(name, scene);\r\n\r\n options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\r\n torusKnot._originalBuilderSideOrientation = options.sideOrientation;\r\n\r\n var vertexData = CreateTorusKnotVertexData(options);\r\n\r\n vertexData.applyToMesh(torusKnot, options.updatable);\r\n\r\n return torusKnot;\r\n}\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use CreateTorusKnot instead\r\n */\r\nexport const TorusKnotBuilder = {\r\n CreateTorusKnot\r\n};\r\n\r\nVertexData.CreateTorusKnot = CreateTorusKnotVertexData;\r\n\r\nMesh.CreateTorusKnot = (name: string, radius: number, tube: number, radialSegments: number, tubularSegments: number, p: number, q: number, scene?: Scene, updatable?: boolean, sideOrientation?: number): Mesh => {\r\n const options = {\r\n radius,\r\n tube,\r\n radialSegments,\r\n tubularSegments,\r\n p,\r\n q,\r\n sideOrientation,\r\n updatable\r\n };\r\n\r\n return CreateTorusKnot(name, options, scene);\r\n};"]}
|
|
1
|
+
{"version":3,"file":"torusKnotBuilder.js","sourceRoot":"","sources":["../../../../sourceES6/core/Meshes/Builders/torusKnotBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector4, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Mesh, _CreationDataStorage } from \"../mesh\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport { Scene } from \"../../scene\";\r\nimport { CompatibilityOptions } from \"../../Compat/compatibilityOptions\";\r\n\r\n// based on http://code.google.com/p/away3d/source/browse/trunk/fp10/Away3D/src/away3d/primitives/TorusKnot.as?spec=svn2473&r=2473\r\n/**\r\n * Creates the VertexData for a TorusKnot\r\n * @param options an object used to set the following optional parameters for the TorusKnot, required but can be empty\r\n * * radius the radius of the torus knot, optional, default 2\r\n * * tube the thickness of the tube, optional, default 0.5\r\n * * radialSegments the number of sides on each tube segments, optional, default 32\r\n * * tubularSegments the number of tubes to decompose the knot into, optional, default 32\r\n * * p the number of windings around the z axis, optional, default 2\r\n * * q the number of windings around the x axis, optional, default 3\r\n * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\r\n * * frontUvs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the front side, optional, default vector4 (0, 0, 1, 1)\r\n * * backUVs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the back side, optional, default vector4 (0, 0, 1, 1)\r\n * @returns the VertexData of the Torus Knot\r\n */\r\nexport function CreateTorusKnotVertexData(options: { radius?: number, tube?: number, radialSegments?: number, tubularSegments?: number, p?: number, q?: number, sideOrientation?: number, frontUVs?: Vector4, backUVs?: Vector4 }): VertexData {\r\n var indices = new Array<number>();\r\n var positions = new Array<number>();\r\n var normals = new Array<number>();\r\n var uvs = new Array<number>();\r\n\r\n var radius = options.radius || 2;\r\n var tube = options.tube || 0.5;\r\n var radialSegments = options.radialSegments || 32;\r\n var tubularSegments = options.tubularSegments || 32;\r\n var p = options.p || 2;\r\n var q = options.q || 3;\r\n var sideOrientation = (options.sideOrientation === 0) ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;\r\n\r\n // Helper\r\n var getPos = (angle: number) => {\r\n\r\n var cu = Math.cos(angle);\r\n var su = Math.sin(angle);\r\n var quOverP = q / p * angle;\r\n var cs = Math.cos(quOverP);\r\n\r\n var tx = radius * (2 + cs) * 0.5 * cu;\r\n var ty = radius * (2 + cs) * su * 0.5;\r\n var tz = radius * Math.sin(quOverP) * 0.5;\r\n\r\n return new Vector3(tx, ty, tz);\r\n };\r\n\r\n // Vertices\r\n var i: number;\r\n var j: number;\r\n for (i = 0; i <= radialSegments; i++) {\r\n var modI = i % radialSegments;\r\n var u = modI / radialSegments * 2 * p * Math.PI;\r\n var p1 = getPos(u);\r\n var p2 = getPos(u + 0.01);\r\n var tang = p2.subtract(p1);\r\n var n = p2.add(p1);\r\n\r\n var bitan = Vector3.Cross(tang, n);\r\n n = Vector3.Cross(bitan, tang);\r\n\r\n bitan.normalize();\r\n n.normalize();\r\n\r\n for (j = 0; j < tubularSegments; j++) {\r\n var modJ = j % tubularSegments;\r\n var v = modJ / tubularSegments * 2 * Math.PI;\r\n var cx = -tube * Math.cos(v);\r\n var cy = tube * Math.sin(v);\r\n\r\n positions.push(p1.x + cx * n.x + cy * bitan.x);\r\n positions.push(p1.y + cx * n.y + cy * bitan.y);\r\n positions.push(p1.z + cx * n.z + cy * bitan.z);\r\n\r\n uvs.push(i / radialSegments);\r\n uvs.push(CompatibilityOptions.UseOpenGLOrientationForUV ? 1.0 - j / tubularSegments : j / tubularSegments);\r\n }\r\n }\r\n\r\n for (i = 0; i < radialSegments; i++) {\r\n for (j = 0; j < tubularSegments; j++) {\r\n var jNext = (j + 1) % tubularSegments;\r\n var a = i * tubularSegments + j;\r\n var b = (i + 1) * tubularSegments + j;\r\n var c = (i + 1) * tubularSegments + jNext;\r\n var d = i * tubularSegments + jNext;\r\n\r\n indices.push(d); indices.push(b); indices.push(a);\r\n indices.push(d); indices.push(c); indices.push(b);\r\n }\r\n }\r\n\r\n // Normals\r\n VertexData.ComputeNormals(positions, indices, normals);\r\n\r\n // Sides\r\n VertexData._ComputeSides(sideOrientation, positions, indices, normals, uvs, options.frontUVs, options.backUVs);\r\n\r\n // Result\r\n var vertexData = new VertexData();\r\n\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n vertexData.normals = normals;\r\n vertexData.uvs = uvs;\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates a torus knot mesh\r\n * * The parameter `radius` sets the global radius size (float) of the torus knot (default 2)\r\n * * The parameter `radialSegments` sets the number of sides on each tube segments (positive integer, default 32)\r\n * * The parameter `tubularSegments` sets the number of tubes to decompose the knot into (positive integer, default 32)\r\n * * The parameters `p` and `q` are the number of windings on each axis (positive integers, default 2 and 3)\r\n * * You can also set the mesh side orientation with the values : BABYLON.Mesh.FRONTSIDE (default), BABYLON.Mesh.BACKSIDE or BABYLON.Mesh.DOUBLESIDE\r\n * * If you create a double-sided mesh, you can choose what parts of the texture image to crop and stick respectively on the front and the back sides with the parameters `frontUVs` and `backUVs` (Vector4). Detail here : https://doc.babylonjs.com/babylon101/discover_basic_elements#side-orientation\r\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created.\r\n * @param name defines the name of the mesh\r\n * @param options defines the options used to create the mesh\r\n * @param scene defines the hosting scene\r\n * @returns the torus knot mesh\r\n * @see https://doc.babylonjs.com/how_to/set_shapes#torus-knot\r\n */\r\nexport function CreateTorusKnot(name: string, options: { radius?: number, tube?: number, radialSegments?: number, tubularSegments?: number, p?: number, q?: number, updatable?: boolean, sideOrientation?: number, frontUVs?: Vector4, backUVs?: Vector4 } = {}, scene: any): Mesh {\r\n var torusKnot = new Mesh(name, scene);\r\n\r\n options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\r\n torusKnot._originalBuilderSideOrientation = options.sideOrientation;\r\n\r\n var vertexData = CreateTorusKnotVertexData(options);\r\n\r\n vertexData.applyToMesh(torusKnot, options.updatable);\r\n\r\n return torusKnot;\r\n}\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use CreateTorusKnot instead\r\n */\r\nexport const TorusKnotBuilder = {\r\n CreateTorusKnot\r\n};\r\n\r\nVertexData.CreateTorusKnot = CreateTorusKnotVertexData;\r\n\r\nMesh.CreateTorusKnot = (name: string, radius: number, tube: number, radialSegments: number, tubularSegments: number, p: number, q: number, scene?: Scene, updatable?: boolean, sideOrientation?: number): Mesh => {\r\n const options = {\r\n radius,\r\n tube,\r\n radialSegments,\r\n tubularSegments,\r\n p,\r\n q,\r\n sideOrientation,\r\n updatable\r\n };\r\n\r\n return CreateTorusKnot(name, options, scene);\r\n};"]}
|
|
@@ -99,9 +99,12 @@ export declare class DracoCompression implements IDisposable {
|
|
|
99
99
|
* Decode Draco compressed mesh data to vertex data.
|
|
100
100
|
* @param data The ArrayBuffer or ArrayBufferView for the Draco compression data
|
|
101
101
|
* @param attributes A map of attributes from vertex buffer kinds to Draco unique ids
|
|
102
|
+
* @param dividers a list of optional dividers for normalization
|
|
102
103
|
* @returns A promise that resolves with the decoded vertex data
|
|
103
104
|
*/
|
|
104
105
|
decodeMeshAsync(data: ArrayBuffer | ArrayBufferView, attributes?: {
|
|
105
106
|
[kind: string]: number;
|
|
107
|
+
}, dividers?: {
|
|
108
|
+
[kind: string]: number;
|
|
106
109
|
}): Promise<VertexData>;
|
|
107
110
|
}
|
|
@@ -8,7 +8,7 @@ function createDecoderAsync(wasmBinary) {
|
|
|
8
8
|
});
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
|
-
function decodeMesh(decoderModule, dataView, attributes, onIndicesData, onAttributeData) {
|
|
11
|
+
function decodeMesh(decoderModule, dataView, attributes, onIndicesData, onAttributeData, dividers) {
|
|
12
12
|
var buffer = new decoderModule.DecoderBuffer();
|
|
13
13
|
buffer.Init(dataView, dataView.byteLength);
|
|
14
14
|
var decoder = new decoderModule.Decoder();
|
|
@@ -26,7 +26,7 @@ function decodeMesh(decoderModule, dataView, attributes, onIndicesData, onAttrib
|
|
|
26
26
|
status = decoder.DecodeBufferToPointCloud(buffer, geometry);
|
|
27
27
|
break;
|
|
28
28
|
default:
|
|
29
|
-
throw new Error("Invalid geometry type "
|
|
29
|
+
throw new Error("Invalid geometry type ".concat(type));
|
|
30
30
|
}
|
|
31
31
|
if (!status.ok() || !geometry.ptr) {
|
|
32
32
|
throw new Error(status.error_msg());
|
|
@@ -46,7 +46,8 @@ function decodeMesh(decoderModule, dataView, attributes, onIndicesData, onAttrib
|
|
|
46
46
|
decoderModule._free(ptr);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
var processAttribute = function (kind, attribute) {
|
|
49
|
+
var processAttribute = function (kind, attribute, divider) {
|
|
50
|
+
if (divider === void 0) { divider = 1; }
|
|
50
51
|
var numComponents = attribute.num_components();
|
|
51
52
|
var numPoints = geometry.num_points();
|
|
52
53
|
var numValues = numPoints * numComponents;
|
|
@@ -68,6 +69,11 @@ function decodeMesh(decoderModule, dataView, attributes, onIndicesData, onAttrib
|
|
|
68
69
|
else {
|
|
69
70
|
var babylonData = new Float32Array(numValues);
|
|
70
71
|
babylonData.set(new Float32Array(decoderModule.HEAPF32.buffer, ptr, numValues));
|
|
72
|
+
if (divider !== 1) {
|
|
73
|
+
for (var i = 0; i < babylonData.length; i++) {
|
|
74
|
+
babylonData[i] = babylonData[i] / divider;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
71
77
|
onAttributeData(kind, babylonData);
|
|
72
78
|
}
|
|
73
79
|
}
|
|
@@ -79,7 +85,8 @@ function decodeMesh(decoderModule, dataView, attributes, onIndicesData, onAttrib
|
|
|
79
85
|
for (var kind in attributes) {
|
|
80
86
|
var id = attributes[kind];
|
|
81
87
|
var attribute = decoder.GetAttributeByUniqueId(geometry, id);
|
|
82
|
-
|
|
88
|
+
var divider = dividers && dividers[kind] || 1;
|
|
89
|
+
processAttribute(kind, attribute, divider);
|
|
83
90
|
}
|
|
84
91
|
}
|
|
85
92
|
else {
|
|
@@ -192,7 +199,7 @@ var DracoCompression = /** @class */ (function () {
|
|
|
192
199
|
};
|
|
193
200
|
if (numWorkers && typeof Worker === "function") {
|
|
194
201
|
this._workerPoolPromise = decoderInfo.wasmBinaryPromise.then(function (decoderWasmBinary) {
|
|
195
|
-
var workerContent = decodeMesh
|
|
202
|
+
var workerContent = "".concat(decodeMesh, "(").concat(worker, ")()");
|
|
196
203
|
var workerBlobUrl = URL.createObjectURL(new Blob([workerContent], { type: "application/javascript" }));
|
|
197
204
|
var workerPromises = new Array(numWorkers);
|
|
198
205
|
for (var i = 0; i < workerPromises.length; i++) {
|
|
@@ -297,9 +304,10 @@ var DracoCompression = /** @class */ (function () {
|
|
|
297
304
|
* Decode Draco compressed mesh data to vertex data.
|
|
298
305
|
* @param data The ArrayBuffer or ArrayBufferView for the Draco compression data
|
|
299
306
|
* @param attributes A map of attributes from vertex buffer kinds to Draco unique ids
|
|
307
|
+
* @param dividers a list of optional dividers for normalization
|
|
300
308
|
* @returns A promise that resolves with the decoded vertex data
|
|
301
309
|
*/
|
|
302
|
-
DracoCompression.prototype.decodeMeshAsync = function (data, attributes) {
|
|
310
|
+
DracoCompression.prototype.decodeMeshAsync = function (data, attributes, dividers) {
|
|
303
311
|
var dataView = data instanceof ArrayBuffer ? new Uint8Array(data) : data;
|
|
304
312
|
if (this._workerPoolPromise) {
|
|
305
313
|
return this._workerPoolPromise.then(function (workerPool) {
|
|
@@ -323,6 +331,14 @@ var DracoCompression = /** @class */ (function () {
|
|
|
323
331
|
vertexData.indices = message.data.value;
|
|
324
332
|
}
|
|
325
333
|
else {
|
|
334
|
+
// check normalization
|
|
335
|
+
var divider = dividers && dividers[message.data.id] ? dividers[message.data.id] : 1;
|
|
336
|
+
if (divider !== 1) {
|
|
337
|
+
// normalize
|
|
338
|
+
for (var i = 0; i < message.data.value.length; i++) {
|
|
339
|
+
message.data.value[i] = message.data.value[i] / divider;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
326
342
|
vertexData.set(message.data.value, message.data.id);
|
|
327
343
|
}
|
|
328
344
|
};
|
|
@@ -342,7 +358,7 @@ var DracoCompression = /** @class */ (function () {
|
|
|
342
358
|
vertexData.indices = indices;
|
|
343
359
|
}, function (kind, data) {
|
|
344
360
|
vertexData.set(data, kind);
|
|
345
|
-
});
|
|
361
|
+
}, dividers);
|
|
346
362
|
return vertexData;
|
|
347
363
|
});
|
|
348
364
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dracoCompression.js","sourceRoot":"","sources":["../../../../sourceES6/core/Meshes/Compression/dracoCompression.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tools } from \"../../Misc/tools\";\r\nimport { WorkerPool } from '../../Misc/workerPool';\r\nimport { Nullable } from \"../../types\";\r\nimport { IDisposable } from \"../../scene\";\r\nimport { VertexData } from \"../../Meshes/mesh.vertexData\";\r\n\r\ndeclare var DracoDecoderModule: any;\r\ndeclare var WebAssembly: any;\r\n\r\n// WorkerGlobalScope\r\ndeclare function importScripts(...urls: string[]): void;\r\ndeclare function postMessage(message: any, transfer?: any[]): void;\r\n\r\nfunction createDecoderAsync(wasmBinary?: ArrayBuffer): Promise<any> {\r\n return new Promise((resolve) => {\r\n DracoDecoderModule({ wasmBinary: wasmBinary }).then((module: any) => {\r\n resolve({ module: module });\r\n });\r\n });\r\n}\r\n\r\nfunction decodeMesh(decoderModule: any, dataView: ArrayBufferView, attributes: { [kind: string]: number } | undefined, onIndicesData: (data: Uint32Array) => void, onAttributeData: (kind: string, data: Float32Array) => void): void {\r\n const buffer = new decoderModule.DecoderBuffer();\r\n buffer.Init(dataView, dataView.byteLength);\r\n\r\n const decoder = new decoderModule.Decoder();\r\n let geometry: any;\r\n let status: any;\r\n\r\n try {\r\n const type = decoder.GetEncodedGeometryType(buffer);\r\n switch (type) {\r\n case decoderModule.TRIANGULAR_MESH:\r\n geometry = new decoderModule.Mesh();\r\n status = decoder.DecodeBufferToMesh(buffer, geometry);\r\n break;\r\n case decoderModule.POINT_CLOUD:\r\n geometry = new decoderModule.PointCloud();\r\n status = decoder.DecodeBufferToPointCloud(buffer, geometry);\r\n break;\r\n default:\r\n throw new Error(`Invalid geometry type ${type}`);\r\n }\r\n\r\n if (!status.ok() || !geometry.ptr) {\r\n throw new Error(status.error_msg());\r\n }\r\n\r\n if (type === decoderModule.TRIANGULAR_MESH) {\r\n const numFaces = geometry.num_faces();\r\n const numIndices = numFaces * 3;\r\n const byteLength = numIndices * 4;\r\n\r\n const ptr = decoderModule._malloc(byteLength);\r\n try {\r\n decoder.GetTrianglesUInt32Array(geometry, byteLength, ptr);\r\n const indices = new Uint32Array(numIndices);\r\n indices.set(new Uint32Array(decoderModule.HEAPF32.buffer, ptr, numIndices));\r\n onIndicesData(indices);\r\n }\r\n finally {\r\n decoderModule._free(ptr);\r\n }\r\n }\r\n\r\n const processAttribute = (kind: string, attribute: any) => {\r\n var numComponents = attribute.num_components();\r\n var numPoints = geometry.num_points();\r\n var numValues = numPoints * numComponents;\r\n var byteLength = numValues * Float32Array.BYTES_PER_ELEMENT;\r\n\r\n var ptr = decoderModule._malloc(byteLength);\r\n try {\r\n decoder.GetAttributeDataArrayForAllPoints(geometry, attribute, decoderModule.DT_FLOAT32, byteLength, ptr);\r\n const values = new Float32Array(decoderModule.HEAPF32.buffer, ptr, numValues);\r\n if (kind === \"color\" && numComponents === 3) {\r\n const babylonData = new Float32Array(numPoints * 4);\r\n for (let i = 0, j = 0; i < babylonData.length; i += 4, j += numComponents) {\r\n babylonData[i + 0] = values[j + 0];\r\n babylonData[i + 1] = values[j + 1];\r\n babylonData[i + 2] = values[j + 2];\r\n babylonData[i + 3] = 1;\r\n }\r\n onAttributeData(kind, babylonData);\r\n }\r\n else {\r\n const babylonData = new Float32Array(numValues);\r\n babylonData.set(new Float32Array(decoderModule.HEAPF32.buffer, ptr, numValues));\r\n onAttributeData(kind, babylonData);\r\n }\r\n }\r\n finally {\r\n decoderModule._free(ptr);\r\n }\r\n };\r\n\r\n if (attributes) {\r\n for (const kind in attributes) {\r\n const id = attributes[kind];\r\n const attribute = decoder.GetAttributeByUniqueId(geometry, id);\r\n processAttribute(kind, attribute);\r\n }\r\n }\r\n else {\r\n const nativeAttributeTypes: { [kind: string]: string } = {\r\n \"position\": \"POSITION\",\r\n \"normal\": \"NORMAL\",\r\n \"color\": \"COLOR\",\r\n \"uv\": \"TEX_COORD\"\r\n };\r\n\r\n for (const kind in nativeAttributeTypes) {\r\n const id = decoder.GetAttributeId(geometry, decoderModule[nativeAttributeTypes[kind]]);\r\n if (id !== -1) {\r\n const attribute = decoder.GetAttribute(geometry, id);\r\n processAttribute(kind, attribute);\r\n }\r\n }\r\n }\r\n }\r\n finally {\r\n if (geometry) {\r\n decoderModule.destroy(geometry);\r\n }\r\n\r\n decoderModule.destroy(decoder);\r\n decoderModule.destroy(buffer);\r\n }\r\n}\r\n\r\n/**\r\n * The worker function that gets converted to a blob url to pass into a worker.\r\n */\r\nfunction worker(): void {\r\n let decoderPromise: PromiseLike<any> | undefined;\r\n\r\n onmessage = (event) => {\r\n const data = event.data;\r\n switch (data.id) {\r\n case \"init\": {\r\n const decoder = data.decoder;\r\n if (decoder.url) {\r\n importScripts(decoder.url);\r\n decoderPromise = DracoDecoderModule({ wasmBinary: decoder.wasmBinary });\r\n }\r\n postMessage(\"done\");\r\n break;\r\n }\r\n case \"decodeMesh\": {\r\n if (!decoderPromise) {\r\n throw new Error(\"Draco decoder module is not available\");\r\n }\r\n decoderPromise.then((decoder) => {\r\n decodeMesh(decoder, data.dataView, data.attributes, (indices) => {\r\n postMessage({ id: \"indices\", value: indices }, [indices.buffer]);\r\n }, (kind, data) => {\r\n postMessage({ id: kind, value: data }, [data.buffer]);\r\n });\r\n postMessage(\"done\");\r\n });\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Configuration for Draco compression\r\n */\r\nexport interface IDracoCompressionConfiguration {\r\n /**\r\n * Configuration for the decoder.\r\n */\r\n decoder: {\r\n /**\r\n * The url to the WebAssembly module.\r\n */\r\n wasmUrl?: string;\r\n\r\n /**\r\n * The url to the WebAssembly binary.\r\n */\r\n wasmBinaryUrl?: string;\r\n\r\n /**\r\n * The url to the fallback JavaScript module.\r\n */\r\n fallbackUrl?: string;\r\n };\r\n}\r\n\r\n/**\r\n * Draco compression (https://google.github.io/draco/)\r\n *\r\n * This class wraps the Draco module.\r\n *\r\n * **Encoder**\r\n *\r\n * The encoder is not currently implemented.\r\n *\r\n * **Decoder**\r\n *\r\n * By default, the configuration points to a copy of the Draco decoder files for glTF from the babylon.js preview cdn https://preview.babylonjs.com/draco_wasm_wrapper_gltf.js.\r\n *\r\n * To update the configuration, use the following code:\r\n * ```javascript\r\n * DracoCompression.Configuration = {\r\n * decoder: {\r\n * wasmUrl: \"<url to the WebAssembly library>\",\r\n * wasmBinaryUrl: \"<url to the WebAssembly binary>\",\r\n * fallbackUrl: \"<url to the fallback JavaScript library>\",\r\n * }\r\n * };\r\n * ```\r\n *\r\n * Draco has two versions, one for WebAssembly and one for JavaScript. The decoder configuration can be set to only support WebAssembly or only support the JavaScript version.\r\n * Decoding will automatically fallback to the JavaScript version if WebAssembly version is not configured or if WebAssembly is not supported by the browser.\r\n * Use `DracoCompression.DecoderAvailable` to determine if the decoder configuration is available for the current context.\r\n *\r\n * To decode Draco compressed data, get the default DracoCompression object and call decodeMeshAsync:\r\n * ```javascript\r\n * var vertexData = await DracoCompression.Default.decodeMeshAsync(data);\r\n * ```\r\n *\r\n * @see https://www.babylonjs-playground.com/#N3EK4B#0\r\n */\r\nexport class DracoCompression implements IDisposable {\r\n private _workerPoolPromise?: Promise<WorkerPool>;\r\n private _decoderModulePromise?: Promise<any>;\r\n\r\n /**\r\n * The configuration. Defaults to the following urls:\r\n * - wasmUrl: \"https://preview.babylonjs.com/draco_wasm_wrapper_gltf.js\"\r\n * - wasmBinaryUrl: \"https://preview.babylonjs.com/draco_decoder_gltf.wasm\"\r\n * - fallbackUrl: \"https://preview.babylonjs.com/draco_decoder_gltf.js\"\r\n */\r\n public static Configuration: IDracoCompressionConfiguration = {\r\n decoder: {\r\n wasmUrl: \"https://preview.babylonjs.com/draco_wasm_wrapper_gltf.js\",\r\n wasmBinaryUrl: \"https://preview.babylonjs.com/draco_decoder_gltf.wasm\",\r\n fallbackUrl: \"https://preview.babylonjs.com/draco_decoder_gltf.js\"\r\n }\r\n };\r\n\r\n /**\r\n * Returns true if the decoder configuration is available.\r\n */\r\n public static get DecoderAvailable(): boolean {\r\n const decoder = DracoCompression.Configuration.decoder;\r\n return !!((decoder.wasmUrl && decoder.wasmBinaryUrl && typeof WebAssembly === \"object\") || decoder.fallbackUrl);\r\n }\r\n\r\n /**\r\n * Default number of workers to create when creating the draco compression object.\r\n */\r\n public static DefaultNumWorkers = DracoCompression.GetDefaultNumWorkers();\r\n\r\n private static GetDefaultNumWorkers(): number {\r\n if (typeof navigator !== \"object\" || !navigator.hardwareConcurrency) {\r\n return 1;\r\n }\r\n\r\n // Use 50% of the available logical processors but capped at 4.\r\n return Math.min(Math.floor(navigator.hardwareConcurrency * 0.5), 4);\r\n }\r\n\r\n private static _Default: Nullable<DracoCompression> = null;\r\n\r\n /**\r\n * Default instance for the draco compression object.\r\n */\r\n public static get Default(): DracoCompression {\r\n if (!DracoCompression._Default) {\r\n DracoCompression._Default = new DracoCompression();\r\n }\r\n\r\n return DracoCompression._Default;\r\n }\r\n\r\n /**\r\n * Constructor\r\n * @param numWorkers The number of workers for async operations. Specify `0` to disable web workers and run synchronously in the current context.\r\n */\r\n constructor(numWorkers = DracoCompression.DefaultNumWorkers) {\r\n const decoder = DracoCompression.Configuration.decoder;\r\n\r\n const decoderInfo: { url: string | undefined, wasmBinaryPromise: Promise<ArrayBuffer | string | undefined> } =\r\n (decoder.wasmUrl && decoder.wasmBinaryUrl && typeof WebAssembly === \"object\") ? {\r\n url: Tools.GetAbsoluteUrl(decoder.wasmUrl),\r\n wasmBinaryPromise: Tools.LoadFileAsync(Tools.GetAbsoluteUrl(decoder.wasmBinaryUrl))\r\n } : {\r\n url: Tools.GetAbsoluteUrl(decoder.fallbackUrl!),\r\n wasmBinaryPromise: Promise.resolve(undefined)\r\n };\r\n\r\n if (numWorkers && typeof Worker === \"function\") {\r\n this._workerPoolPromise = decoderInfo.wasmBinaryPromise.then((decoderWasmBinary) => {\r\n const workerContent = `${decodeMesh}(${worker})()`;\r\n const workerBlobUrl = URL.createObjectURL(new Blob([workerContent], { type: \"application/javascript\" }));\r\n const workerPromises = new Array<Promise<Worker>>(numWorkers);\r\n for (let i = 0; i < workerPromises.length; i++) {\r\n workerPromises[i] = new Promise((resolve, reject) => {\r\n const worker = new Worker(workerBlobUrl);\r\n const onError = (error: ErrorEvent) => {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n reject(error);\r\n };\r\n\r\n const onMessage = (message: MessageEvent) => {\r\n if (message.data === \"done\") {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n resolve(worker);\r\n }\r\n };\r\n\r\n worker.addEventListener(\"error\", onError);\r\n worker.addEventListener(\"message\", onMessage);\r\n\r\n worker.postMessage({\r\n id: \"init\",\r\n decoder: {\r\n url: decoderInfo.url,\r\n wasmBinary: decoderWasmBinary,\r\n }\r\n });\r\n });\r\n }\r\n\r\n return Promise.all(workerPromises).then((workers) => {\r\n return new WorkerPool(workers);\r\n });\r\n });\r\n }\r\n else {\r\n this._decoderModulePromise = decoderInfo.wasmBinaryPromise.then((decoderWasmBinary) => {\r\n if (!decoderInfo.url) {\r\n throw new Error(\"Draco decoder module is not available\");\r\n }\r\n\r\n return Tools.LoadScriptAsync(decoderInfo.url).then(() => {\r\n return createDecoderAsync(decoderWasmBinary as ArrayBuffer);\r\n });\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Stop all async operations and release resources.\r\n */\r\n public dispose(): void {\r\n if (this._workerPoolPromise) {\r\n this._workerPoolPromise.then((workerPool) => {\r\n workerPool.dispose();\r\n });\r\n }\r\n\r\n delete this._workerPoolPromise;\r\n delete this._decoderModulePromise;\r\n }\r\n\r\n /**\r\n * Returns a promise that resolves when ready. Call this manually to ensure draco compression is ready before use.\r\n * @returns a promise that resolves when ready\r\n */\r\n public whenReadyAsync(): Promise<void> {\r\n if (this._workerPoolPromise) {\r\n return this._workerPoolPromise.then(() => { });\r\n }\r\n\r\n if (this._decoderModulePromise) {\r\n return this._decoderModulePromise.then(() => { });\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * Decode Draco compressed mesh data to vertex data.\r\n * @param data The ArrayBuffer or ArrayBufferView for the Draco compression data\r\n * @param attributes A map of attributes from vertex buffer kinds to Draco unique ids\r\n * @returns A promise that resolves with the decoded vertex data\r\n */\r\n public decodeMeshAsync(data: ArrayBuffer | ArrayBufferView, attributes?: { [kind: string]: number }): Promise<VertexData> {\r\n const dataView = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\r\n\r\n if (this._workerPoolPromise) {\r\n return this._workerPoolPromise.then((workerPool) => {\r\n return new Promise<VertexData>((resolve, reject) => {\r\n workerPool.push((worker, onComplete) => {\r\n const vertexData = new VertexData();\r\n\r\n const onError = (error: ErrorEvent) => {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n reject(error);\r\n onComplete();\r\n };\r\n\r\n const onMessage = (message: MessageEvent) => {\r\n if (message.data === \"done\") {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n resolve(vertexData);\r\n onComplete();\r\n }\r\n else if (message.data.id === \"indices\") {\r\n vertexData.indices = message.data.value;\r\n }\r\n else {\r\n vertexData.set(message.data.value, message.data.id);\r\n }\r\n };\r\n\r\n worker.addEventListener(\"error\", onError);\r\n worker.addEventListener(\"message\", onMessage);\r\n\r\n const dataViewCopy = new Uint8Array(dataView.byteLength);\r\n dataViewCopy.set(new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength));\r\n\r\n worker.postMessage({ id: \"decodeMesh\", dataView: dataViewCopy, attributes: attributes }, [dataViewCopy.buffer]);\r\n });\r\n });\r\n });\r\n }\r\n\r\n if (this._decoderModulePromise) {\r\n return this._decoderModulePromise.then((decoder) => {\r\n const vertexData = new VertexData();\r\n decodeMesh(decoder.module, dataView, attributes, (indices) => {\r\n vertexData.indices = indices;\r\n }, (kind, data) => {\r\n vertexData.set(data, kind);\r\n });\r\n return vertexData;\r\n });\r\n }\r\n\r\n throw new Error(\"Draco decoder module is not available\");\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"dracoCompression.js","sourceRoot":"","sources":["../../../../sourceES6/core/Meshes/Compression/dracoCompression.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tools } from \"../../Misc/tools\";\r\nimport { WorkerPool } from '../../Misc/workerPool';\r\nimport { Nullable } from \"../../types\";\r\nimport { IDisposable } from \"../../scene\";\r\nimport { VertexData } from \"../../Meshes/mesh.vertexData\";\r\n\r\ndeclare var DracoDecoderModule: any;\r\ndeclare var WebAssembly: any;\r\n\r\n// WorkerGlobalScope\r\ndeclare function importScripts(...urls: string[]): void;\r\ndeclare function postMessage(message: any, transfer?: any[]): void;\r\n\r\nfunction createDecoderAsync(wasmBinary?: ArrayBuffer): Promise<any> {\r\n return new Promise((resolve) => {\r\n DracoDecoderModule({ wasmBinary: wasmBinary }).then((module: any) => {\r\n resolve({ module: module });\r\n });\r\n });\r\n}\r\n\r\nfunction decodeMesh(decoderModule: any, dataView: ArrayBufferView, attributes: { [kind: string]: number } | undefined, onIndicesData: (data: Uint32Array) => void, onAttributeData: (kind: string, data: Float32Array) => void, dividers?: { [kind: string]: number }): void {\r\n const buffer = new decoderModule.DecoderBuffer();\r\n buffer.Init(dataView, dataView.byteLength);\r\n\r\n const decoder = new decoderModule.Decoder();\r\n let geometry: any;\r\n let status: any;\r\n\r\n try {\r\n const type = decoder.GetEncodedGeometryType(buffer);\r\n switch (type) {\r\n case decoderModule.TRIANGULAR_MESH:\r\n geometry = new decoderModule.Mesh();\r\n status = decoder.DecodeBufferToMesh(buffer, geometry);\r\n break;\r\n case decoderModule.POINT_CLOUD:\r\n geometry = new decoderModule.PointCloud();\r\n status = decoder.DecodeBufferToPointCloud(buffer, geometry);\r\n break;\r\n default:\r\n throw new Error(`Invalid geometry type ${type}`);\r\n }\r\n\r\n if (!status.ok() || !geometry.ptr) {\r\n throw new Error(status.error_msg());\r\n }\r\n\r\n if (type === decoderModule.TRIANGULAR_MESH) {\r\n const numFaces = geometry.num_faces();\r\n const numIndices = numFaces * 3;\r\n const byteLength = numIndices * 4;\r\n\r\n const ptr = decoderModule._malloc(byteLength);\r\n try {\r\n decoder.GetTrianglesUInt32Array(geometry, byteLength, ptr);\r\n const indices = new Uint32Array(numIndices);\r\n indices.set(new Uint32Array(decoderModule.HEAPF32.buffer, ptr, numIndices));\r\n onIndicesData(indices);\r\n }\r\n finally {\r\n decoderModule._free(ptr);\r\n }\r\n }\r\n\r\n const processAttribute = (kind: string, attribute: any, divider = 1) => {\r\n var numComponents = attribute.num_components();\r\n var numPoints = geometry.num_points();\r\n var numValues = numPoints * numComponents;\r\n var byteLength = numValues * Float32Array.BYTES_PER_ELEMENT;\r\n\r\n var ptr = decoderModule._malloc(byteLength);\r\n try {\r\n decoder.GetAttributeDataArrayForAllPoints(geometry, attribute, decoderModule.DT_FLOAT32, byteLength, ptr);\r\n const values = new Float32Array(decoderModule.HEAPF32.buffer, ptr, numValues);\r\n if (kind === \"color\" && numComponents === 3) {\r\n const babylonData = new Float32Array(numPoints * 4);\r\n for (let i = 0, j = 0; i < babylonData.length; i += 4, j += numComponents) {\r\n babylonData[i + 0] = values[j + 0];\r\n babylonData[i + 1] = values[j + 1];\r\n babylonData[i + 2] = values[j + 2];\r\n babylonData[i + 3] = 1;\r\n }\r\n onAttributeData(kind, babylonData);\r\n }\r\n else {\r\n const babylonData = new Float32Array(numValues);\r\n babylonData.set(new Float32Array(decoderModule.HEAPF32.buffer, ptr, numValues));\r\n if (divider !== 1) {\r\n for (let i = 0; i < babylonData.length; i++) {\r\n babylonData[i] = babylonData[i] / divider;\r\n }\r\n }\r\n onAttributeData(kind, babylonData);\r\n }\r\n }\r\n finally {\r\n decoderModule._free(ptr);\r\n }\r\n };\r\n\r\n if (attributes) {\r\n for (const kind in attributes) {\r\n const id = attributes[kind];\r\n const attribute = decoder.GetAttributeByUniqueId(geometry, id);\r\n const divider = dividers && dividers[kind] || 1;\r\n processAttribute(kind, attribute, divider);\r\n }\r\n }\r\n else {\r\n const nativeAttributeTypes: { [kind: string]: string } = {\r\n \"position\": \"POSITION\",\r\n \"normal\": \"NORMAL\",\r\n \"color\": \"COLOR\",\r\n \"uv\": \"TEX_COORD\"\r\n };\r\n\r\n for (const kind in nativeAttributeTypes) {\r\n const id = decoder.GetAttributeId(geometry, decoderModule[nativeAttributeTypes[kind]]);\r\n if (id !== -1) {\r\n const attribute = decoder.GetAttribute(geometry, id);\r\n processAttribute(kind, attribute);\r\n }\r\n }\r\n }\r\n }\r\n finally {\r\n if (geometry) {\r\n decoderModule.destroy(geometry);\r\n }\r\n\r\n decoderModule.destroy(decoder);\r\n decoderModule.destroy(buffer);\r\n }\r\n}\r\n\r\n/**\r\n * The worker function that gets converted to a blob url to pass into a worker.\r\n */\r\nfunction worker(): void {\r\n let decoderPromise: PromiseLike<any> | undefined;\r\n\r\n onmessage = (event) => {\r\n const data = event.data;\r\n switch (data.id) {\r\n case \"init\": {\r\n const decoder = data.decoder;\r\n if (decoder.url) {\r\n importScripts(decoder.url);\r\n decoderPromise = DracoDecoderModule({ wasmBinary: decoder.wasmBinary });\r\n }\r\n postMessage(\"done\");\r\n break;\r\n }\r\n case \"decodeMesh\": {\r\n if (!decoderPromise) {\r\n throw new Error(\"Draco decoder module is not available\");\r\n }\r\n decoderPromise.then((decoder) => {\r\n decodeMesh(decoder, data.dataView, data.attributes, (indices) => {\r\n postMessage({ id: \"indices\", value: indices }, [indices.buffer]);\r\n }, (kind, data) => {\r\n postMessage({ id: kind, value: data }, [data.buffer]);\r\n });\r\n postMessage(\"done\");\r\n });\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Configuration for Draco compression\r\n */\r\nexport interface IDracoCompressionConfiguration {\r\n /**\r\n * Configuration for the decoder.\r\n */\r\n decoder: {\r\n /**\r\n * The url to the WebAssembly module.\r\n */\r\n wasmUrl?: string;\r\n\r\n /**\r\n * The url to the WebAssembly binary.\r\n */\r\n wasmBinaryUrl?: string;\r\n\r\n /**\r\n * The url to the fallback JavaScript module.\r\n */\r\n fallbackUrl?: string;\r\n };\r\n}\r\n\r\n/**\r\n * Draco compression (https://google.github.io/draco/)\r\n *\r\n * This class wraps the Draco module.\r\n *\r\n * **Encoder**\r\n *\r\n * The encoder is not currently implemented.\r\n *\r\n * **Decoder**\r\n *\r\n * By default, the configuration points to a copy of the Draco decoder files for glTF from the babylon.js preview cdn https://preview.babylonjs.com/draco_wasm_wrapper_gltf.js.\r\n *\r\n * To update the configuration, use the following code:\r\n * ```javascript\r\n * DracoCompression.Configuration = {\r\n * decoder: {\r\n * wasmUrl: \"<url to the WebAssembly library>\",\r\n * wasmBinaryUrl: \"<url to the WebAssembly binary>\",\r\n * fallbackUrl: \"<url to the fallback JavaScript library>\",\r\n * }\r\n * };\r\n * ```\r\n *\r\n * Draco has two versions, one for WebAssembly and one for JavaScript. The decoder configuration can be set to only support WebAssembly or only support the JavaScript version.\r\n * Decoding will automatically fallback to the JavaScript version if WebAssembly version is not configured or if WebAssembly is not supported by the browser.\r\n * Use `DracoCompression.DecoderAvailable` to determine if the decoder configuration is available for the current context.\r\n *\r\n * To decode Draco compressed data, get the default DracoCompression object and call decodeMeshAsync:\r\n * ```javascript\r\n * var vertexData = await DracoCompression.Default.decodeMeshAsync(data);\r\n * ```\r\n *\r\n * @see https://www.babylonjs-playground.com/#N3EK4B#0\r\n */\r\nexport class DracoCompression implements IDisposable {\r\n private _workerPoolPromise?: Promise<WorkerPool>;\r\n private _decoderModulePromise?: Promise<any>;\r\n\r\n /**\r\n * The configuration. Defaults to the following urls:\r\n * - wasmUrl: \"https://preview.babylonjs.com/draco_wasm_wrapper_gltf.js\"\r\n * - wasmBinaryUrl: \"https://preview.babylonjs.com/draco_decoder_gltf.wasm\"\r\n * - fallbackUrl: \"https://preview.babylonjs.com/draco_decoder_gltf.js\"\r\n */\r\n public static Configuration: IDracoCompressionConfiguration = {\r\n decoder: {\r\n wasmUrl: \"https://preview.babylonjs.com/draco_wasm_wrapper_gltf.js\",\r\n wasmBinaryUrl: \"https://preview.babylonjs.com/draco_decoder_gltf.wasm\",\r\n fallbackUrl: \"https://preview.babylonjs.com/draco_decoder_gltf.js\"\r\n }\r\n };\r\n\r\n /**\r\n * Returns true if the decoder configuration is available.\r\n */\r\n public static get DecoderAvailable(): boolean {\r\n const decoder = DracoCompression.Configuration.decoder;\r\n return !!((decoder.wasmUrl && decoder.wasmBinaryUrl && typeof WebAssembly === \"object\") || decoder.fallbackUrl);\r\n }\r\n\r\n /**\r\n * Default number of workers to create when creating the draco compression object.\r\n */\r\n public static DefaultNumWorkers = DracoCompression.GetDefaultNumWorkers();\r\n\r\n private static GetDefaultNumWorkers(): number {\r\n if (typeof navigator !== \"object\" || !navigator.hardwareConcurrency) {\r\n return 1;\r\n }\r\n\r\n // Use 50% of the available logical processors but capped at 4.\r\n return Math.min(Math.floor(navigator.hardwareConcurrency * 0.5), 4);\r\n }\r\n\r\n private static _Default: Nullable<DracoCompression> = null;\r\n\r\n /**\r\n * Default instance for the draco compression object.\r\n */\r\n public static get Default(): DracoCompression {\r\n if (!DracoCompression._Default) {\r\n DracoCompression._Default = new DracoCompression();\r\n }\r\n\r\n return DracoCompression._Default;\r\n }\r\n\r\n /**\r\n * Constructor\r\n * @param numWorkers The number of workers for async operations. Specify `0` to disable web workers and run synchronously in the current context.\r\n */\r\n constructor(numWorkers = DracoCompression.DefaultNumWorkers) {\r\n const decoder = DracoCompression.Configuration.decoder;\r\n\r\n const decoderInfo: { url: string | undefined, wasmBinaryPromise: Promise<ArrayBuffer | string | undefined> } =\r\n (decoder.wasmUrl && decoder.wasmBinaryUrl && typeof WebAssembly === \"object\") ? {\r\n url: Tools.GetAbsoluteUrl(decoder.wasmUrl),\r\n wasmBinaryPromise: Tools.LoadFileAsync(Tools.GetAbsoluteUrl(decoder.wasmBinaryUrl))\r\n } : {\r\n url: Tools.GetAbsoluteUrl(decoder.fallbackUrl!),\r\n wasmBinaryPromise: Promise.resolve(undefined)\r\n };\r\n\r\n if (numWorkers && typeof Worker === \"function\") {\r\n this._workerPoolPromise = decoderInfo.wasmBinaryPromise.then((decoderWasmBinary) => {\r\n const workerContent = `${decodeMesh}(${worker})()`;\r\n const workerBlobUrl = URL.createObjectURL(new Blob([workerContent], { type: \"application/javascript\" }));\r\n const workerPromises = new Array<Promise<Worker>>(numWorkers);\r\n for (let i = 0; i < workerPromises.length; i++) {\r\n workerPromises[i] = new Promise((resolve, reject) => {\r\n const worker = new Worker(workerBlobUrl);\r\n const onError = (error: ErrorEvent) => {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n reject(error);\r\n };\r\n\r\n const onMessage = (message: MessageEvent) => {\r\n if (message.data === \"done\") {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n resolve(worker);\r\n }\r\n };\r\n\r\n worker.addEventListener(\"error\", onError);\r\n worker.addEventListener(\"message\", onMessage);\r\n\r\n worker.postMessage({\r\n id: \"init\",\r\n decoder: {\r\n url: decoderInfo.url,\r\n wasmBinary: decoderWasmBinary,\r\n }\r\n });\r\n });\r\n }\r\n\r\n return Promise.all(workerPromises).then((workers) => {\r\n return new WorkerPool(workers);\r\n });\r\n });\r\n }\r\n else {\r\n this._decoderModulePromise = decoderInfo.wasmBinaryPromise.then((decoderWasmBinary) => {\r\n if (!decoderInfo.url) {\r\n throw new Error(\"Draco decoder module is not available\");\r\n }\r\n\r\n return Tools.LoadScriptAsync(decoderInfo.url).then(() => {\r\n return createDecoderAsync(decoderWasmBinary as ArrayBuffer);\r\n });\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Stop all async operations and release resources.\r\n */\r\n public dispose(): void {\r\n if (this._workerPoolPromise) {\r\n this._workerPoolPromise.then((workerPool) => {\r\n workerPool.dispose();\r\n });\r\n }\r\n\r\n delete this._workerPoolPromise;\r\n delete this._decoderModulePromise;\r\n }\r\n\r\n /**\r\n * Returns a promise that resolves when ready. Call this manually to ensure draco compression is ready before use.\r\n * @returns a promise that resolves when ready\r\n */\r\n public whenReadyAsync(): Promise<void> {\r\n if (this._workerPoolPromise) {\r\n return this._workerPoolPromise.then(() => { });\r\n }\r\n\r\n if (this._decoderModulePromise) {\r\n return this._decoderModulePromise.then(() => { });\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * Decode Draco compressed mesh data to vertex data.\r\n * @param data The ArrayBuffer or ArrayBufferView for the Draco compression data\r\n * @param attributes A map of attributes from vertex buffer kinds to Draco unique ids\r\n * @param dividers a list of optional dividers for normalization\r\n * @returns A promise that resolves with the decoded vertex data\r\n */\r\n public decodeMeshAsync(data: ArrayBuffer | ArrayBufferView, attributes?: { [kind: string]: number }, dividers?: { [kind: string]: number }): Promise<VertexData> {\r\n const dataView = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\r\n\r\n if (this._workerPoolPromise) {\r\n return this._workerPoolPromise.then((workerPool) => {\r\n return new Promise<VertexData>((resolve, reject) => {\r\n workerPool.push((worker, onComplete) => {\r\n const vertexData = new VertexData();\r\n\r\n const onError = (error: ErrorEvent) => {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n reject(error);\r\n onComplete();\r\n };\r\n\r\n const onMessage = (message: MessageEvent) => {\r\n if (message.data === \"done\") {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n resolve(vertexData);\r\n onComplete();\r\n }\r\n else if (message.data.id === \"indices\") {\r\n vertexData.indices = message.data.value;\r\n }\r\n else {\r\n // check normalization\r\n const divider = dividers && dividers[message.data.id] ? dividers[message.data.id] : 1;\r\n if (divider !== 1) {\r\n // normalize\r\n for (let i = 0; i < message.data.value.length; i++) {\r\n message.data.value[i] = message.data.value[i] / divider;\r\n }\r\n }\r\n vertexData.set(message.data.value, message.data.id);\r\n }\r\n };\r\n\r\n worker.addEventListener(\"error\", onError);\r\n worker.addEventListener(\"message\", onMessage);\r\n\r\n const dataViewCopy = new Uint8Array(dataView.byteLength);\r\n dataViewCopy.set(new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength));\r\n\r\n worker.postMessage({ id: \"decodeMesh\", dataView: dataViewCopy, attributes: attributes }, [dataViewCopy.buffer]);\r\n });\r\n });\r\n });\r\n }\r\n\r\n if (this._decoderModulePromise) {\r\n return this._decoderModulePromise.then((decoder) => {\r\n const vertexData = new VertexData();\r\n decodeMesh(decoder.module, dataView, attributes, (indices) => {\r\n vertexData.indices = indices;\r\n }, (kind, data) => {\r\n vertexData.set(data, kind);\r\n }, dividers);\r\n return vertexData;\r\n });\r\n }\r\n\r\n throw new Error(\"Draco decoder module is not available\");\r\n }\r\n}\r\n"]}
|
package/Meshes/abstractMesh.d.ts
CHANGED
|
@@ -158,6 +158,8 @@ export declare class AbstractMesh extends TransformNode implements IDisposable,
|
|
|
158
158
|
static get BILLBOARDMODE_USE_POSITION(): number;
|
|
159
159
|
/** @hidden */
|
|
160
160
|
_internalAbstractMeshDataInfo: _InternalAbstractMeshDataInfo;
|
|
161
|
+
/** @hidden */
|
|
162
|
+
_waitingMaterialId: Nullable<string>;
|
|
161
163
|
/**
|
|
162
164
|
* The culling strategy to use to check whether the mesh must be rendered or not.
|
|
163
165
|
* This value can be changed at any time and will be used on the next render mesh selection.
|
|
@@ -740,6 +742,14 @@ export declare class AbstractMesh extends TransformNode implements IDisposable,
|
|
|
740
742
|
refreshBoundingInfo(applySkeleton?: boolean, applyMorph?: boolean): AbstractMesh;
|
|
741
743
|
/** @hidden */
|
|
742
744
|
_refreshBoundingInfo(data: Nullable<FloatArray>, bias: Nullable<Vector2>): void;
|
|
745
|
+
/**
|
|
746
|
+
* Get the position vertex data and optionally apply skeleton and morphing.
|
|
747
|
+
* @param applySkeleton defines whether to apply the skeleton
|
|
748
|
+
* @param applyMorph defines whether to apply the morph target
|
|
749
|
+
* @param data defines the position data to apply the skeleton and morph to
|
|
750
|
+
* @returns the position data
|
|
751
|
+
*/
|
|
752
|
+
getPositionData(applySkeleton: boolean, applyMorph: boolean, data?: Nullable<FloatArray>): Nullable<FloatArray>;
|
|
743
753
|
/** @hidden */
|
|
744
754
|
_getPositionData(applySkeleton: boolean, applyMorph: boolean): Nullable<FloatArray>;
|
|
745
755
|
/** @hidden */
|
|
@@ -748,8 +758,6 @@ export declare class AbstractMesh extends TransformNode implements IDisposable,
|
|
|
748
758
|
_updateSubMeshesBoundingInfo(matrix: DeepImmutable<Matrix>): AbstractMesh;
|
|
749
759
|
/** @hidden */
|
|
750
760
|
protected _afterComputeWorldMatrix(): void;
|
|
751
|
-
/** @hidden */
|
|
752
|
-
get _effectiveMesh(): AbstractMesh;
|
|
753
761
|
/**
|
|
754
762
|
* Returns `true` if the mesh is within the frustum defined by the passed array of planes.
|
|
755
763
|
* A mesh is in the frustum if its bounding box intersects the frustum
|