@babylonjs/core 5.32.0 → 5.32.2
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/abstractActionManager.d.ts +1 -1
- package/Actions/abstractActionManager.js +1 -1
- package/Actions/abstractActionManager.js.map +1 -1
- package/Actions/action.d.ts +1 -1
- package/Actions/action.js +1 -1
- package/Actions/action.js.map +1 -1
- package/Actions/actionManager.d.ts +18 -18
- package/Actions/actionManager.js +18 -18
- package/Actions/actionManager.js.map +1 -1
- package/Actions/directActions.d.ts +10 -10
- package/Actions/directActions.js +10 -10
- package/Actions/directActions.js.map +1 -1
- package/Actions/interpolateValueAction.d.ts +1 -1
- package/Actions/interpolateValueAction.js +1 -1
- package/Actions/interpolateValueAction.js.map +1 -1
- package/Animations/animatable.d.ts +2 -2
- package/Animations/animatable.js +2 -2
- package/Animations/animatable.js.map +1 -1
- package/Animations/animationGroup.d.ts +3 -3
- package/Animations/animationGroup.js +3 -3
- package/Animations/animationGroup.js.map +1 -1
- package/Animations/easing.d.ts +14 -14
- package/Animations/easing.js +13 -13
- package/Animations/easing.js.map +1 -1
- package/Audio/Interfaces/IAudioEngine.d.ts +2 -2
- package/Audio/Interfaces/IAudioEngine.js.map +1 -1
- package/Audio/Interfaces/ISoundOptions.d.ts +3 -3
- package/Audio/Interfaces/ISoundOptions.js.map +1 -1
- package/Audio/analyser.d.ts +1 -1
- package/Audio/analyser.js +1 -1
- package/Audio/analyser.js.map +1 -1
- package/Audio/audioEngine.d.ts +2 -2
- package/Audio/audioEngine.js +2 -2
- package/Audio/audioEngine.js.map +1 -1
- package/Audio/audioSceneComponent.d.ts +4 -4
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.d.ts +13 -13
- package/Audio/sound.js +13 -13
- package/Audio/sound.js.map +1 -1
- package/Audio/soundTrack.d.ts +5 -5
- package/Audio/soundTrack.js +5 -5
- package/Audio/soundTrack.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.d.ts +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
- package/Behaviors/Cameras/bouncingBehavior.d.ts +1 -1
- package/Behaviors/Cameras/bouncingBehavior.js +1 -1
- package/Behaviors/Cameras/bouncingBehavior.js.map +1 -1
- package/Behaviors/Cameras/framingBehavior.d.ts +1 -1
- package/Behaviors/Cameras/framingBehavior.js +1 -1
- package/Behaviors/Cameras/framingBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.d.ts +8 -0
- package/Behaviors/Meshes/pointerDragBehavior.js +9 -3
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Bones/bone.d.ts +1 -1
- package/Bones/bone.js +1 -1
- package/Bones/bone.js.map +1 -1
- package/Bones/boneIKController.d.ts +1 -1
- package/Bones/boneIKController.js +1 -1
- package/Bones/boneIKController.js.map +1 -1
- package/Bones/boneLookController.d.ts +1 -1
- package/Bones/boneLookController.js +1 -1
- package/Bones/boneLookController.js.map +1 -1
- package/Bones/skeleton.d.ts +3 -3
- package/Bones/skeleton.js +2 -2
- package/Bones/skeleton.js.map +1 -1
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js +2 -2
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +2 -2
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraGamepadInput.d.ts +1 -1
- package/Cameras/Inputs/arcRotateCameraGamepadInput.js +1 -1
- package/Cameras/Inputs/arcRotateCameraGamepadInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.d.ts +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.d.ts +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +3 -3
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraPointersInput.d.ts +1 -1
- package/Cameras/Inputs/arcRotateCameraPointersInput.js +1 -1
- package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.d.ts +1 -1
- package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js +1 -1
- package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.d.ts +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.js +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraMouseInput.d.ts +2 -2
- package/Cameras/Inputs/flyCameraMouseInput.js +4 -4
- package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.d.ts +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.d.ts +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.js +3 -3
- package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/followCameraPointersInput.d.ts +1 -1
- package/Cameras/Inputs/followCameraPointersInput.js +1 -1
- package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.d.ts +2 -2
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +2 -2
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraGamepadInput.d.ts +1 -1
- package/Cameras/Inputs/freeCameraGamepadInput.js +1 -1
- package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.d.ts +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.d.ts +3 -2
- package/Cameras/Inputs/freeCameraMouseInput.js +10 -7
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.d.ts +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.js +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraTouchInput.d.ts +2 -2
- package/Cameras/Inputs/freeCameraTouchInput.js +4 -4
- package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraVirtualJoystickInput.d.ts +1 -1
- package/Cameras/Inputs/freeCameraVirtualJoystickInput.js +1 -1
- package/Cameras/Inputs/freeCameraVirtualJoystickInput.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphArcRotateCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js +1 -1
- package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphFreeCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphFreeCamera.js +1 -1
- package/Cameras/Stereoscopic/anaglyphFreeCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphGamepadCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphGamepadCamera.js +1 -1
- package/Cameras/Stereoscopic/anaglyphGamepadCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphUniversalCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphUniversalCamera.js +1 -1
- package/Cameras/Stereoscopic/anaglyphUniversalCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicFreeCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicFreeCamera.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicFreeCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicGamepadCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrCameraMetrics.d.ts +1 -1
- package/Cameras/VR/vrCameraMetrics.js +1 -1
- package/Cameras/VR/vrCameraMetrics.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.d.ts +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationFreeCamera.d.ts +1 -1
- package/Cameras/VR/vrDeviceOrientationFreeCamera.js +1 -1
- package/Cameras/VR/vrDeviceOrientationFreeCamera.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationGamepadCamera.d.ts +1 -1
- package/Cameras/VR/vrDeviceOrientationGamepadCamera.js +1 -1
- package/Cameras/VR/vrDeviceOrientationGamepadCamera.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.d.ts +2 -2
- package/Cameras/VR/vrExperienceHelper.js +2 -2
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/VR/webVRCamera.d.ts +2 -2
- package/Cameras/VR/webVRCamera.js +2 -2
- package/Cameras/VR/webVRCamera.js.map +1 -1
- package/Cameras/arcRotateCamera.d.ts +9 -9
- package/Cameras/arcRotateCamera.js +9 -9
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/arcRotateCameraInputsManager.d.ts +1 -1
- package/Cameras/arcRotateCameraInputsManager.js +1 -1
- package/Cameras/arcRotateCameraInputsManager.js.map +1 -1
- package/Cameras/camera.d.ts +4 -4
- package/Cameras/camera.js +4 -4
- package/Cameras/camera.js.map +1 -1
- package/Cameras/cameraInputsManager.d.ts +1 -1
- package/Cameras/cameraInputsManager.js +1 -1
- package/Cameras/cameraInputsManager.js.map +1 -1
- package/Cameras/flyCamera.d.ts +1 -1
- package/Cameras/flyCamera.js +1 -1
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/flyCameraInputsManager.d.ts +1 -1
- package/Cameras/flyCameraInputsManager.js +1 -1
- package/Cameras/flyCameraInputsManager.js.map +1 -1
- package/Cameras/followCamera.d.ts +4 -4
- package/Cameras/followCamera.js +4 -4
- package/Cameras/followCamera.js.map +1 -1
- package/Cameras/followCameraInputsManager.d.ts +1 -1
- package/Cameras/followCameraInputsManager.js +1 -1
- package/Cameras/followCameraInputsManager.js.map +1 -1
- package/Cameras/freeCamera.d.ts +3 -3
- package/Cameras/freeCamera.js +3 -3
- package/Cameras/freeCamera.js.map +1 -1
- package/Cameras/freeCameraInputsManager.d.ts +1 -1
- package/Cameras/freeCameraInputsManager.js +1 -1
- package/Cameras/freeCameraInputsManager.js.map +1 -1
- package/Cameras/gamepadCamera.d.ts +2 -2
- package/Cameras/gamepadCamera.js +2 -2
- package/Cameras/gamepadCamera.js.map +1 -1
- package/Cameras/targetCamera.d.ts +2 -2
- package/Cameras/targetCamera.js +2 -2
- package/Cameras/targetCamera.js.map +1 -1
- package/Cameras/touchCamera.d.ts +2 -2
- package/Cameras/touchCamera.js +2 -2
- package/Cameras/touchCamera.js.map +1 -1
- package/Cameras/universalCamera.d.ts +2 -2
- package/Cameras/universalCamera.js +2 -2
- package/Cameras/universalCamera.js.map +1 -1
- package/Cameras/virtualJoysticksCamera.d.ts +2 -2
- package/Cameras/virtualJoysticksCamera.js +2 -2
- package/Cameras/virtualJoysticksCamera.js.map +1 -1
- package/Collisions/pickingInfo.d.ts +1 -1
- package/Collisions/pickingInfo.js +1 -1
- package/Collisions/pickingInfo.js.map +1 -1
- package/Culling/Octrees/octree.d.ts +2 -2
- package/Culling/Octrees/octree.js +2 -2
- package/Culling/Octrees/octree.js.map +1 -1
- package/Culling/Octrees/octreeBlock.d.ts +1 -1
- package/Culling/Octrees/octreeBlock.js +1 -1
- package/Culling/Octrees/octreeBlock.js.map +1 -1
- package/Culling/Octrees/octreeSceneComponent.d.ts +3 -3
- package/Culling/Octrees/octreeSceneComponent.js +1 -1
- package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
- package/Culling/boundingInfo.d.ts +3 -3
- package/Culling/boundingInfo.js +2 -2
- package/Culling/boundingInfo.js.map +1 -1
- package/Debug/debugLayer.d.ts +1 -1
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/rayHelper.d.ts +2 -2
- package/Debug/rayHelper.js +2 -2
- package/Debug/rayHelper.js.map +1 -1
- package/Engines/Extensions/engine.alpha.d.ts +2 -2
- package/Engines/Extensions/engine.alpha.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.d.ts +2 -2
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.query.d.ts +8 -8
- package/Engines/Extensions/engine.query.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.d.ts +1 -1
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Extensions/engine.uniformBuffer.d.ts +3 -3
- package/Engines/Extensions/engine.uniformBuffer.js.map +1 -1
- package/Engines/Extensions/engine.views.d.ts +2 -2
- package/Engines/Extensions/engine.views.js +1 -1
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Extensions/engine.webVR.d.ts +1 -1
- package/Engines/Extensions/engine.webVR.js.map +1 -1
- package/Engines/Processors/shaderProcessor.d.ts +2 -2
- package/Engines/Processors/shaderProcessor.js +2 -2
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js +11 -9
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/constants.d.ts +17 -17
- package/Engines/constants.js +17 -17
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +12 -12
- package/Engines/engine.js +11 -11
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.d.ts +2 -2
- package/Engines/nativeEngine.js +23 -2
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.d.ts +5 -5
- package/Engines/nullEngine.js +5 -5
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +8 -8
- package/Engines/thinEngine.js +6 -6
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +4 -4
- package/Engines/webgpuEngine.js +1 -1
- package/Engines/webgpuEngine.js.map +1 -1
- package/Gamepads/gamepadSceneComponent.d.ts +1 -1
- package/Gamepads/gamepadSceneComponent.js.map +1 -1
- package/Gizmos/gizmo.d.ts +6 -7
- package/Gizmos/gizmo.js +43 -36
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +17 -7
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.d.ts +4 -0
- package/Gizmos/positionGizmo.js +21 -0
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.d.ts +4 -0
- package/Gizmos/rotationGizmo.js +20 -0
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.d.ts +2 -0
- package/Gizmos/scaleGizmo.js +10 -0
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Helpers/sceneHelpers.d.ts +7 -7
- package/Helpers/sceneHelpers.js.map +1 -1
- package/Inputs/scene.inputManager.js +34 -25
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Instrumentation/engineInstrumentation.d.ts +2 -2
- package/Instrumentation/engineInstrumentation.js +2 -2
- package/Instrumentation/engineInstrumentation.js.map +1 -1
- package/Instrumentation/sceneInstrumentation.d.ts +2 -2
- package/Instrumentation/sceneInstrumentation.js +2 -2
- package/Instrumentation/sceneInstrumentation.js.map +1 -1
- package/Layers/effectLayerSceneComponent.d.ts +2 -2
- package/Layers/effectLayerSceneComponent.js.map +1 -1
- package/Layers/glowLayer.d.ts +1 -1
- package/Layers/glowLayer.js +1 -1
- package/Layers/glowLayer.js.map +1 -1
- package/LensFlares/lensFlare.d.ts +3 -3
- package/LensFlares/lensFlare.js +3 -3
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.d.ts +2 -2
- package/LensFlares/lensFlareSystem.js +2 -2
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/LensFlares/lensFlareSystemSceneComponent.d.ts +1 -1
- package/LensFlares/lensFlareSystemSceneComponent.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +2 -2
- package/Lights/Shadows/shadowGenerator.js +2 -2
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/directionalLight.d.ts +2 -2
- package/Lights/directionalLight.js +2 -2
- package/Lights/directionalLight.js.map +1 -1
- package/Lights/hemisphericLight.d.ts +1 -1
- package/Lights/hemisphericLight.js +1 -1
- package/Lights/hemisphericLight.js.map +1 -1
- package/Lights/light.d.ts +1 -1
- package/Lights/light.js +1 -1
- package/Lights/light.js.map +1 -1
- package/Lights/pointLight.d.ts +2 -2
- package/Lights/pointLight.js +2 -2
- package/Lights/pointLight.js.map +1 -1
- package/Lights/spotLight.d.ts +2 -2
- package/Lights/spotLight.js +2 -2
- package/Lights/spotLight.js.map +1 -1
- package/Loading/loadingScreen.d.ts +2 -2
- package/Loading/loadingScreen.js +1 -1
- package/Loading/loadingScreen.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
- package/Materials/Node/Blocks/reciprocalBlock.js +6 -2
- package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +1 -1
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrMaterial.d.ts +1 -1
- package/Materials/PBR/pbrMaterial.js +1 -1
- package/Materials/PBR/pbrMaterial.js.map +1 -1
- package/Materials/Textures/Packer/packer.d.ts +1 -1
- package/Materials/Textures/Packer/packer.js +1 -1
- package/Materials/Textures/Packer/packer.js.map +1 -1
- package/Materials/Textures/Procedurals/customProceduralTexture.d.ts +2 -2
- package/Materials/Textures/Procedurals/customProceduralTexture.js +2 -2
- package/Materials/Textures/Procedurals/customProceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.d.ts +2 -2
- package/Materials/Textures/Procedurals/proceduralTexture.js +2 -2
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.d.ts +1 -1
- package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js.map +1 -1
- package/Materials/Textures/cubeTexture.d.ts +2 -2
- package/Materials/Textures/cubeTexture.js +2 -2
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/dynamicTexture.d.ts +1 -1
- package/Materials/Textures/dynamicTexture.js +1 -1
- package/Materials/Textures/dynamicTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.d.ts +3 -3
- package/Materials/Textures/mirrorTexture.js +3 -3
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/refractionTexture.d.ts +3 -3
- package/Materials/Textures/refractionTexture.js +3 -3
- package/Materials/Textures/refractionTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +10 -10
- package/Materials/Textures/texture.js +10 -10
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/videoTexture.d.ts +2 -2
- package/Materials/Textures/videoTexture.js +2 -2
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/effect.d.ts +20 -2
- package/Materials/effect.js +28 -4
- package/Materials/effect.js.map +1 -1
- package/Materials/effectRenderer.js +1 -0
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/fresnelParameters.d.ts +1 -1
- package/Materials/fresnelParameters.js +1 -1
- package/Materials/fresnelParameters.js.map +1 -1
- package/Materials/material.d.ts +1 -1
- package/Materials/material.js.map +1 -1
- package/Materials/multiMaterial.d.ts +2 -2
- package/Materials/multiMaterial.js +2 -2
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +2 -2
- package/Materials/shaderMaterial.js +2 -2
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.d.ts +1 -1
- package/Materials/shadowDepthWrapper.js +2 -2
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.d.ts +18 -18
- package/Materials/standardMaterial.js +6 -6
- package/Materials/standardMaterial.js.map +1 -1
- package/Maths/math.path.d.ts +7 -7
- package/Maths/math.path.js +7 -7
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.vector.d.ts +4 -4
- package/Maths/math.vector.js +4 -4
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/boxBuilder.d.ts +3 -3
- package/Meshes/Builders/boxBuilder.js +3 -3
- package/Meshes/Builders/boxBuilder.js.map +1 -1
- package/Meshes/Builders/capsuleBuilder.d.ts +1 -1
- package/Meshes/Builders/capsuleBuilder.js +1 -1
- package/Meshes/Builders/capsuleBuilder.js.map +1 -1
- package/Meshes/Builders/cylinderBuilder.d.ts +2 -2
- package/Meshes/Builders/cylinderBuilder.js +2 -2
- package/Meshes/Builders/cylinderBuilder.js.map +1 -1
- package/Meshes/Builders/decalBuilder.d.ts +1 -1
- package/Meshes/Builders/decalBuilder.js +1 -1
- package/Meshes/Builders/decalBuilder.js.map +1 -1
- package/Meshes/Builders/discBuilder.d.ts +2 -2
- package/Meshes/Builders/discBuilder.js +2 -2
- package/Meshes/Builders/discBuilder.js.map +1 -1
- package/Meshes/Builders/geodesicBuilder.d.ts +1 -1
- package/Meshes/Builders/geodesicBuilder.js +1 -1
- package/Meshes/Builders/geodesicBuilder.js.map +1 -1
- package/Meshes/Builders/goldbergBuilder.d.ts +1 -1
- package/Meshes/Builders/goldbergBuilder.js +1 -1
- package/Meshes/Builders/goldbergBuilder.js.map +1 -1
- package/Meshes/Builders/groundBuilder.d.ts +4 -4
- package/Meshes/Builders/groundBuilder.js +4 -4
- package/Meshes/Builders/groundBuilder.js.map +1 -1
- package/Meshes/Builders/icoSphereBuilder.d.ts +2 -2
- package/Meshes/Builders/icoSphereBuilder.js +2 -2
- package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
- package/Meshes/Builders/latheBuilder.d.ts +2 -2
- package/Meshes/Builders/latheBuilder.js +2 -2
- package/Meshes/Builders/latheBuilder.js.map +1 -1
- package/Meshes/Builders/linesBuilder.d.ts +6 -6
- package/Meshes/Builders/linesBuilder.js +6 -6
- package/Meshes/Builders/linesBuilder.js.map +1 -1
- package/Meshes/Builders/planeBuilder.d.ts +2 -2
- package/Meshes/Builders/planeBuilder.js +2 -2
- package/Meshes/Builders/planeBuilder.js.map +1 -1
- package/Meshes/Builders/polygonBuilder.d.ts +1 -1
- package/Meshes/Builders/polygonBuilder.js +1 -1
- package/Meshes/Builders/polygonBuilder.js.map +1 -1
- package/Meshes/Builders/polyhedronBuilder.d.ts +3 -3
- package/Meshes/Builders/polyhedronBuilder.js +3 -3
- package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
- package/Meshes/Builders/ribbonBuilder.d.ts +4 -4
- package/Meshes/Builders/ribbonBuilder.js +4 -4
- package/Meshes/Builders/ribbonBuilder.js.map +1 -1
- package/Meshes/Builders/shapeBuilder.d.ts +9 -9
- package/Meshes/Builders/shapeBuilder.js +9 -9
- package/Meshes/Builders/shapeBuilder.js.map +1 -1
- package/Meshes/Builders/sphereBuilder.d.ts +2 -2
- package/Meshes/Builders/sphereBuilder.js +2 -2
- package/Meshes/Builders/sphereBuilder.js.map +1 -1
- package/Meshes/Builders/tiledBoxBuilder.d.ts +2 -2
- package/Meshes/Builders/tiledBoxBuilder.js +2 -2
- package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.d.ts +2 -2
- package/Meshes/Builders/tiledPlaneBuilder.js +2 -2
- package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
- package/Meshes/Builders/torusBuilder.d.ts +2 -2
- package/Meshes/Builders/torusBuilder.js +2 -2
- package/Meshes/Builders/torusBuilder.js.map +1 -1
- package/Meshes/Builders/torusKnotBuilder.d.ts +2 -2
- package/Meshes/Builders/torusKnotBuilder.js +2 -2
- package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
- package/Meshes/Builders/tubeBuilder.d.ts +4 -4
- package/Meshes/Builders/tubeBuilder.js +4 -4
- package/Meshes/Builders/tubeBuilder.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +35 -35
- package/Meshes/abstractMesh.js +34 -34
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/instancedMesh.d.ts +3 -3
- package/Meshes/instancedMesh.js +1 -1
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/linesMesh.d.ts +2 -2
- package/Meshes/linesMesh.js +2 -2
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +36 -36
- package/Meshes/mesh.js +9 -17
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/meshLODLevel.d.ts +1 -1
- package/Meshes/meshLODLevel.js +1 -1
- package/Meshes/meshLODLevel.js.map +1 -1
- package/Meshes/meshSimplification.d.ts +6 -6
- package/Meshes/meshSimplification.js +4 -4
- package/Meshes/meshSimplification.js.map +1 -1
- package/Meshes/meshSimplificationSceneComponent.d.ts +1 -1
- package/Meshes/meshSimplificationSceneComponent.js.map +1 -1
- package/Meshes/polygonMesh.d.ts +2 -2
- package/Meshes/polygonMesh.js +2 -2
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/transformNode.d.ts +1 -1
- package/Meshes/transformNode.js +1 -1
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/assetsManager.d.ts +2 -2
- package/Misc/assetsManager.js +2 -2
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/iInspectable.d.ts +1 -1
- package/Misc/iInspectable.js.map +1 -1
- package/Misc/sceneOptimizer.d.ts +12 -12
- package/Misc/sceneOptimizer.js +12 -12
- package/Misc/sceneOptimizer.js.map +1 -1
- package/Misc/screenshotTools.d.ts +10 -10
- package/Misc/screenshotTools.js +10 -10
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/tools.d.ts +4 -4
- package/Misc/tools.js +4 -4
- package/Misc/tools.js.map +1 -1
- package/Misc/videoRecorder.d.ts +1 -1
- package/Misc/videoRecorder.js +1 -1
- package/Misc/videoRecorder.js.map +1 -1
- package/Morph/morphTarget.d.ts +1 -1
- package/Morph/morphTarget.js +1 -1
- package/Morph/morphTarget.js.map +1 -1
- package/Morph/morphTargetManager.d.ts +1 -1
- package/Morph/morphTargetManager.js +1 -1
- package/Morph/morphTargetManager.js.map +1 -1
- package/Offline/IOfflineProvider.d.ts +1 -1
- package/Offline/IOfflineProvider.js.map +1 -1
- package/Offline/database.d.ts +1 -1
- package/Offline/database.js +1 -1
- package/Offline/database.js.map +1 -1
- package/Particles/IParticleSystem.d.ts +1 -1
- package/Particles/IParticleSystem.js.map +1 -1
- package/Particles/baseParticleSystem.d.ts +1 -1
- package/Particles/baseParticleSystem.js +1 -1
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +1 -1
- package/Particles/gpuParticleSystem.js +1 -1
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +2 -2
- package/Particles/particleSystem.js +2 -2
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/solidParticleSystem.d.ts +15 -15
- package/Particles/solidParticleSystem.js +13 -13
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Physics/IPhysicsEngine.d.ts +1 -1
- package/Physics/IPhysicsEngine.js.map +1 -1
- package/Physics/Plugins/ammoJSPlugin.d.ts +1 -1
- package/Physics/Plugins/ammoJSPlugin.js +1 -1
- package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/physicsEngine.d.ts +1 -1
- package/Physics/physicsEngine.js +1 -1
- package/Physics/physicsEngine.js.map +1 -1
- package/Physics/physicsEngineComponent.d.ts +3 -3
- package/Physics/physicsEngineComponent.js +2 -2
- package/Physics/physicsEngineComponent.js.map +1 -1
- package/Physics/physicsHelper.d.ts +12 -12
- package/Physics/physicsHelper.js +6 -6
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/physicsImpostor.d.ts +3 -3
- package/Physics/physicsImpostor.js +1 -1
- package/Physics/physicsImpostor.js.map +1 -1
- package/Physics/physicsJoint.d.ts +9 -9
- package/Physics/physicsJoint.js +5 -5
- package/Physics/physicsJoint.js.map +1 -1
- package/Physics/physicsRaycastResult.d.ts +1 -1
- package/Physics/physicsRaycastResult.js +1 -1
- package/Physics/physicsRaycastResult.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.d.ts +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.d.ts +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.d.ts +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +2 -2
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.d.ts +2 -2
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js +2 -2
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.d.ts +2 -2
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js.map +1 -1
- package/PostProcesses/blackAndWhitePostProcess.d.ts +1 -1
- package/PostProcesses/blackAndWhitePostProcess.js +1 -1
- package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/fxaaPostProcess.d.ts +1 -1
- package/PostProcesses/fxaaPostProcess.js +1 -1
- package/PostProcesses/fxaaPostProcess.js.map +1 -1
- package/PostProcesses/highlightsPostProcess.d.ts +2 -2
- package/PostProcesses/highlightsPostProcess.js +2 -2
- package/PostProcesses/highlightsPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.d.ts +1 -1
- package/PostProcesses/imageProcessingPostProcess.js +1 -1
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +2 -2
- package/PostProcesses/postProcess.js +1 -1
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/postProcessManager.d.ts +1 -1
- package/PostProcesses/postProcessManager.js +1 -1
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/PostProcesses/refractionPostProcess.d.ts +2 -2
- package/PostProcesses/refractionPostProcess.js +2 -2
- package/PostProcesses/refractionPostProcess.js.map +1 -1
- package/Probes/reflectionProbe.d.ts +2 -2
- package/Probes/reflectionProbe.js +1 -1
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +2 -2
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Sprites/sprite.d.ts +1 -1
- package/Sprites/sprite.js +1 -1
- package/Sprites/sprite.js.map +1 -1
- package/Sprites/spriteManager.d.ts +2 -2
- package/Sprites/spriteManager.js +1 -1
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spritePackedManager.d.ts +1 -1
- package/Sprites/spritePackedManager.js +1 -1
- package/Sprites/spritePackedManager.js.map +1 -1
- package/Sprites/spriteSceneComponent.d.ts +1 -1
- package/Sprites/spriteSceneComponent.js.map +1 -1
- package/Sprites/thinSprite.d.ts +1 -1
- package/Sprites/thinSprite.js +1 -1
- package/Sprites/thinSprite.js.map +1 -1
- package/XR/webXRCamera.d.ts +1 -1
- package/XR/webXRCamera.js +1 -1
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRExperienceHelper.d.ts +1 -1
- package/XR/webXRExperienceHelper.js +1 -1
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRInputSource.d.ts +1 -1
- package/XR/webXRInputSource.js +1 -1
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRSessionManager.d.ts +1 -1
- package/XR/webXRSessionManager.js +1 -1
- package/XR/webXRSessionManager.js.map +1 -1
- package/abstractScene.d.ts +9 -9
- package/abstractScene.js +9 -9
- package/abstractScene.js.map +1 -1
- package/node.d.ts +6 -6
- package/node.js +5 -5
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +29 -24
- package/scene.js +24 -18
- package/scene.js.map +1 -1
|
@@ -123,8 +123,8 @@ export interface WebVROptions {
|
|
|
123
123
|
/**
|
|
124
124
|
* This represents a WebVR camera.
|
|
125
125
|
* The WebVR camera is Babylon's simple interface to interaction with Windows Mixed Reality, HTC Vive and Oculus Rift.
|
|
126
|
-
* @deprecated Use WebXR instead - https://doc.babylonjs.com/
|
|
127
|
-
* @example https://doc.babylonjs.com/
|
|
126
|
+
* @deprecated Use WebXR instead - https://doc.babylonjs.com/features/featuresDeepDive/webXR
|
|
127
|
+
* @example https://doc.babylonjs.com/features/featuresDeepDive/cameras/webVRCamera
|
|
128
128
|
*/
|
|
129
129
|
export declare class WebVRFreeCamera extends FreeCamera implements PoseControlled {
|
|
130
130
|
private _webVROptions;
|
|
@@ -21,8 +21,8 @@ Node.AddNodeConstructor("WebVRGamepadCamera", (name, scene) => {
|
|
|
21
21
|
/**
|
|
22
22
|
* This represents a WebVR camera.
|
|
23
23
|
* The WebVR camera is Babylon's simple interface to interaction with Windows Mixed Reality, HTC Vive and Oculus Rift.
|
|
24
|
-
* @deprecated Use WebXR instead - https://doc.babylonjs.com/
|
|
25
|
-
* @example https://doc.babylonjs.com/
|
|
24
|
+
* @deprecated Use WebXR instead - https://doc.babylonjs.com/features/featuresDeepDive/webXR
|
|
25
|
+
* @example https://doc.babylonjs.com/features/featuresDeepDive/cameras/webVRCamera
|
|
26
26
|
*/
|
|
27
27
|
export class WebVRFreeCamera extends FreeCamera {
|
|
28
28
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webVRCamera.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Cameras/VR/webVRCamera.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport type { Observer } from \"../../Misc/observable\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport type { TargetCamera } from \"../../Cameras/targetCamera\";\r\nimport { Camera } from \"../../Cameras/camera\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Quaternion, Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Gamepad } from \"../../Gamepads/gamepad\";\r\nimport { PoseEnabledControllerType } from \"../../Gamepads/Controllers/poseEnabledController\";\r\nimport type { WebVRController } from \"../../Gamepads/Controllers/webVRController\";\r\nimport type { IDisplayChangedEventArgs } from \"../../Engines/engine\";\r\nimport { Node } from \"../../node\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Ray } from \"../../Culling/ray\";\r\nimport { HemisphericLight } from \"../../Lights/hemisphericLight\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { VRMultiviewToSingleviewPostProcess } from \"../../PostProcesses/vrMultiviewToSingleviewPostProcess\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { setWebVRRigMode } from \"../RigModes/webVRRigMode\";\r\n\r\n// Side effect import to add webvr support to engine\r\nimport \"../../Engines/Extensions/engine.webVR\";\r\n\r\nNode.AddNodeConstructor(\"WebVRFreeCamera\", (name, scene) => {\r\n return () => new WebVRFreeCamera(name, Vector3.Zero(), scene);\r\n});\r\n\r\nNode.AddNodeConstructor(\"WebVRGamepadCamera\", (name, scene) => {\r\n return () => new WebVRFreeCamera(name, Vector3.Zero(), scene);\r\n});\r\n\r\n/**\r\n * This is a copy of VRPose. See https://developer.mozilla.org/en-US/docs/Web/API/VRPose\r\n * IMPORTANT!! The data is right-hand data.\r\n * @export\r\n * @interface DevicePose\r\n */\r\nexport interface DevicePose {\r\n /**\r\n * The position of the device, values in array are [x,y,z].\r\n */\r\n readonly position: Nullable<Float32Array>;\r\n /**\r\n * The linearVelocity of the device, values in array are [x,y,z].\r\n */\r\n readonly linearVelocity: Nullable<Float32Array>;\r\n /**\r\n * The linearAcceleration of the device, values in array are [x,y,z].\r\n */\r\n readonly linearAcceleration: Nullable<Float32Array>;\r\n\r\n /**\r\n * The orientation of the device in a quaternion array, values in array are [x,y,z,w].\r\n */\r\n readonly orientation: Nullable<Float32Array>;\r\n /**\r\n * The angularVelocity of the device, values in array are [x,y,z].\r\n */\r\n readonly angularVelocity: Nullable<Float32Array>;\r\n /**\r\n * The angularAcceleration of the device, values in array are [x,y,z].\r\n */\r\n readonly angularAcceleration: Nullable<Float32Array>;\r\n}\r\n\r\n/**\r\n * Interface representing a pose controlled object in Babylon.\r\n * A pose controlled object has both regular pose values as well as pose values\r\n * from an external device such as a VR head mounted display\r\n */\r\nexport interface PoseControlled {\r\n /**\r\n * The position of the object in babylon space.\r\n */\r\n position: Vector3;\r\n /**\r\n * The rotation quaternion of the object in babylon space.\r\n */\r\n rotationQuaternion: Quaternion;\r\n /**\r\n * The position of the device in babylon space.\r\n */\r\n devicePosition?: Vector3;\r\n /**\r\n * The rotation quaternion of the device in babylon space.\r\n */\r\n deviceRotationQuaternion: Quaternion;\r\n /**\r\n * The raw pose coming from the device.\r\n */\r\n rawPose: Nullable<DevicePose>;\r\n /**\r\n * The scale of the device to be used when translating from device space to babylon space.\r\n */\r\n deviceScaleFactor: number;\r\n /**\r\n * Updates the poseControlled values based on the input device pose.\r\n * @param poseData the pose data to update the object with\r\n */\r\n updateFromDevice(poseData: DevicePose): void;\r\n}\r\n\r\n/**\r\n * Set of options to customize the webVRCamera\r\n */\r\nexport interface WebVROptions {\r\n /**\r\n * Sets if the webVR camera should be tracked to the vrDevice. (default: true)\r\n */\r\n trackPosition?: boolean;\r\n /**\r\n * Sets the scale of the vrDevice in babylon space. (default: 1)\r\n */\r\n positionScale?: number;\r\n /**\r\n * If there are more than one VRDisplays, this will choose the display matching this name. (default: pick first vrDisplay)\r\n */\r\n displayName?: string;\r\n /**\r\n * Should the native controller meshes be initialized. (default: true)\r\n */\r\n controllerMeshes?: boolean;\r\n /**\r\n * Creating a default HemiLight only on controllers. (default: true)\r\n */\r\n defaultLightingOnControllers?: boolean;\r\n /**\r\n * If you don't want to use the default VR button of the helper. (default: false)\r\n */\r\n useCustomVRButton?: boolean;\r\n\r\n /**\r\n * If you'd like to provide your own button to the VRHelper. (default: standard babylon vr button)\r\n */\r\n customVRButton?: HTMLButtonElement;\r\n\r\n /**\r\n * To change the length of the ray for gaze/controllers. Will be scaled by positionScale. (default: 100)\r\n */\r\n rayLength?: number;\r\n\r\n /**\r\n * To change the default offset from the ground to account for user's height in meters. Will be scaled by positionScale. (default: 1.7)\r\n */\r\n defaultHeight?: number;\r\n\r\n /**\r\n * If multiview should be used if available (default: false)\r\n */\r\n useMultiview?: boolean;\r\n}\r\n\r\n/**\r\n * This represents a WebVR camera.\r\n * The WebVR camera is Babylon's simple interface to interaction with Windows Mixed Reality, HTC Vive and Oculus Rift.\r\n * @deprecated Use WebXR instead - https://doc.babylonjs.com/divingDeeper/webXR\r\n * @example https://doc.babylonjs.com/how_to/webvr_camera\r\n */\r\nexport class WebVRFreeCamera extends FreeCamera implements PoseControlled {\r\n /**\r\n * @internal\r\n * The vrDisplay tied to the camera. See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay\r\n */\r\n public _vrDevice: any = null;\r\n /**\r\n * The rawPose of the vrDevice.\r\n */\r\n public rawPose: Nullable<DevicePose> = null;\r\n private _onVREnabled: (success: boolean) => void;\r\n private _specsVersion: string = \"1.1\";\r\n private _attached: boolean = false;\r\n\r\n private _frameData: any;\r\n\r\n protected _descendants: Array<Node> = [];\r\n\r\n // Represents device position and rotation in room space. Should only be used to help calculate babylon space values\r\n private _deviceRoomPosition = Vector3.Zero();\r\n /** @internal */\r\n public _deviceRoomRotationQuaternion = Quaternion.Identity();\r\n\r\n private _standingMatrix: Nullable<Matrix> = null;\r\n\r\n /**\r\n * Represents device position in babylon space.\r\n */\r\n public devicePosition = Vector3.Zero();\r\n /**\r\n * Represents device rotation in babylon space.\r\n */\r\n public deviceRotationQuaternion = Quaternion.Identity();\r\n\r\n /**\r\n * The scale of the device to be used when translating from device space to babylon space.\r\n */\r\n public deviceScaleFactor: number = 1;\r\n\r\n private _deviceToWorld = Matrix.Identity();\r\n private _worldToDevice = Matrix.Identity();\r\n\r\n /**\r\n * References to the webVR controllers for the vrDevice.\r\n */\r\n public controllers: Array<WebVRController> = [];\r\n /**\r\n * Emits an event when a controller is attached.\r\n */\r\n public onControllersAttachedObservable = new Observable<Array<WebVRController>>();\r\n /**\r\n * Emits an event when a controller's mesh has been loaded;\r\n */\r\n public onControllerMeshLoadedObservable = new Observable<WebVRController>();\r\n /**\r\n * Emits an event when the HMD's pose has been updated.\r\n */\r\n public onPoseUpdatedFromDeviceObservable = new Observable<any>();\r\n private _poseSet = false;\r\n /**\r\n * If the rig cameras be used as parent instead of this camera.\r\n */\r\n public rigParenting: boolean = true;\r\n\r\n private _lightOnControllers: HemisphericLight;\r\n\r\n private _defaultHeight?: number = undefined;\r\n\r\n /**\r\n * Instantiates a WebVRFreeCamera.\r\n * @param name The name of the WebVRFreeCamera\r\n * @param position The starting anchor position for the camera\r\n * @param scene The scene the camera belongs to\r\n * @param _webVROptions a set of customizable options for the webVRCamera\r\n */\r\n constructor(name: string, position: Vector3, scene?: Scene, private _webVROptions: WebVROptions = {}) {\r\n super(name, position, scene);\r\n this._cache.position = Vector3.Zero();\r\n if (_webVROptions.defaultHeight) {\r\n this._defaultHeight = _webVROptions.defaultHeight;\r\n this.position.y = this._defaultHeight;\r\n }\r\n\r\n this.minZ = 0.1;\r\n\r\n //legacy support - the compensation boolean was removed.\r\n if (arguments.length === 5) {\r\n // eslint-disable-next-line prefer-rest-params\r\n this._webVROptions = arguments[4];\r\n }\r\n\r\n // default webVR options\r\n if (this._webVROptions.trackPosition == undefined) {\r\n this._webVROptions.trackPosition = true;\r\n }\r\n if (this._webVROptions.controllerMeshes == undefined) {\r\n this._webVROptions.controllerMeshes = true;\r\n }\r\n if (this._webVROptions.defaultLightingOnControllers == undefined) {\r\n this._webVROptions.defaultLightingOnControllers = true;\r\n }\r\n\r\n this.rotationQuaternion = new Quaternion();\r\n\r\n if (this._webVROptions && this._webVROptions.positionScale) {\r\n this.deviceScaleFactor = this._webVROptions.positionScale;\r\n }\r\n\r\n //enable VR\r\n const engine = this.getEngine();\r\n this._onVREnabled = (success: boolean) => {\r\n if (success) {\r\n this.initControllers();\r\n }\r\n };\r\n engine.onVRRequestPresentComplete.add(this._onVREnabled);\r\n engine.initWebVR().add((event: IDisplayChangedEventArgs) => {\r\n if (!event.vrDisplay || this._vrDevice === event.vrDisplay) {\r\n return;\r\n }\r\n\r\n this._vrDevice = event.vrDisplay;\r\n\r\n //reset the rig parameters.\r\n this.setCameraRigMode(Camera.RIG_MODE_WEBVR, { parentCamera: this, vrDisplay: this._vrDevice, frameData: this._frameData, specs: this._specsVersion });\r\n\r\n if (this._attached) {\r\n this.getEngine().enableVR(this._webVROptions);\r\n }\r\n });\r\n\r\n if (typeof VRFrameData !== \"undefined\") {\r\n this._frameData = new VRFrameData();\r\n }\r\n\r\n if (_webVROptions.useMultiview) {\r\n if (!this.getScene().getEngine().getCaps().multiview) {\r\n Logger.Warn(\"Multiview is not supported, falling back to standard rendering\");\r\n this._useMultiviewToSingleView = false;\r\n } else {\r\n this._useMultiviewToSingleView = true;\r\n this._rigPostProcess = new VRMultiviewToSingleviewPostProcess(\"VRMultiviewToSingleview\", this, 1.0);\r\n }\r\n }\r\n\r\n /**\r\n * The idea behind the following lines:\r\n * objects that have the camera as parent should actually have the rig cameras as a parent.\r\n * BUT, each of those cameras has a different view matrix, which means that if we set the parent to the first rig camera,\r\n * the second will not show it correctly.\r\n *\r\n * To solve this - each object that has the camera as parent will be added to a protected array.\r\n * When the rig camera renders, it will take this array and set all of those to be its children.\r\n * This way, the right camera will be used as a parent, and the mesh will be rendered correctly.\r\n * Amazing!\r\n */\r\n this.getScene().onBeforeCameraRenderObservable.add((camera) => {\r\n if (camera.parent === this && this.rigParenting) {\r\n this._descendants = this.getDescendants(true, (n) => {\r\n // don't take the cameras or the controllers!\r\n const isController = this.controllers.some((controller) => {\r\n return controller._mesh === n;\r\n });\r\n const isRigCamera = this._rigCameras.indexOf(<Camera>n) !== -1;\r\n return !isController && !isRigCamera;\r\n });\r\n this._descendants.forEach((node) => {\r\n node.parent = camera;\r\n });\r\n }\r\n });\r\n\r\n this.getScene().onAfterCameraRenderObservable.add((camera) => {\r\n if (camera.parent === this && this.rigParenting) {\r\n this._descendants.forEach((node) => {\r\n node.parent = this;\r\n });\r\n }\r\n });\r\n }\r\n\r\n protected _setRigMode = setWebVRRigMode.bind(null, this);\r\n\r\n /**\r\n * Gets the device distance from the ground in meters.\r\n * @returns the distance in meters from the vrDevice to ground in device space. If standing matrix is not supported for the vrDevice 0 is returned.\r\n */\r\n public deviceDistanceToRoomGround(): number {\r\n if (this._standingMatrix) {\r\n // Add standing matrix offset to get real offset from ground in room\r\n this._standingMatrix.getTranslationToRef(this._workingVector);\r\n return this._deviceRoomPosition.y + this._workingVector.y;\r\n }\r\n //If VRDisplay does not inform stage parameters and no default height is set we fallback to zero.\r\n return this._defaultHeight || 0;\r\n }\r\n\r\n /**\r\n * Enables the standing matrix when supported. This can be used to position the user's view the correct height from the ground.\r\n * @param callback will be called when the standing matrix is set. Callback parameter is if the standing matrix is supported.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public useStandingMatrix(callback = (bool: boolean) => {}) {\r\n // Use standing matrix if available\r\n this.getEngine()\r\n .initWebVRAsync()\r\n .then((result) => {\r\n if (!result.vrDisplay || !result.vrDisplay.stageParameters || !result.vrDisplay.stageParameters.sittingToStandingTransform || !this._webVROptions.trackPosition) {\r\n callback(false);\r\n } else {\r\n this._standingMatrix = new Matrix();\r\n Matrix.FromFloat32ArrayToRefScaled(result.vrDisplay.stageParameters.sittingToStandingTransform, 0, 1, this._standingMatrix);\r\n if (!this.getScene().useRightHandedSystem) {\r\n if (this._standingMatrix) {\r\n this._standingMatrix.toggleModelMatrixHandInPlace();\r\n }\r\n }\r\n callback(true);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Enables the standing matrix when supported. This can be used to position the user's view the correct height from the ground.\r\n * @returns A promise with a boolean set to if the standing matrix is supported.\r\n */\r\n public useStandingMatrixAsync(): Promise<boolean> {\r\n return new Promise((res) => {\r\n this.useStandingMatrix((supported) => {\r\n res(supported);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Disposes the camera\r\n */\r\n public dispose(): void {\r\n this._detachIfAttached();\r\n this.getEngine().onVRRequestPresentComplete.removeCallback(this._onVREnabled);\r\n if (this._updateCacheWhenTrackingDisabledObserver) {\r\n this._scene.onBeforeRenderObservable.remove(this._updateCacheWhenTrackingDisabledObserver);\r\n }\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Gets a vrController by name.\r\n * @param name The name of the controller to retrieve\r\n * @returns the controller matching the name specified or null if not found\r\n */\r\n public getControllerByName(name: string): Nullable<WebVRController> {\r\n for (const gp of this.controllers) {\r\n if (gp.hand === name) {\r\n return gp;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _leftController: Nullable<WebVRController>;\r\n /**\r\n * The controller corresponding to the users left hand.\r\n */\r\n public get leftController(): Nullable<WebVRController> {\r\n if (!this._leftController) {\r\n this._leftController = this.getControllerByName(\"left\");\r\n }\r\n\r\n return this._leftController;\r\n }\r\n\r\n private _rightController: Nullable<WebVRController>;\r\n /**\r\n * The controller corresponding to the users right hand.\r\n */\r\n public get rightController(): Nullable<WebVRController> {\r\n if (!this._rightController) {\r\n this._rightController = this.getControllerByName(\"right\");\r\n }\r\n\r\n return this._rightController;\r\n }\r\n\r\n /**\r\n * Casts a ray forward from the vrCamera's gaze.\r\n * @param length Length of the ray (default: 100)\r\n * @returns the ray corresponding to the gaze\r\n */\r\n public getForwardRay(length = 100): Ray {\r\n if (this.leftCamera) {\r\n // Use left eye to avoid computation to compute center on every call\r\n return super.getForwardRay(length, this.leftCamera.getWorldMatrix(), this.leftCamera.globalPosition); // Need the actual rendered camera\r\n } else {\r\n return super.getForwardRay(length);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Updates the camera based on device's frame data\r\n */\r\n public _checkInputs(): void {\r\n if (this._vrDevice && this._vrDevice.isPresenting) {\r\n this._vrDevice.getFrameData(this._frameData);\r\n\r\n this.updateFromDevice(this._frameData.pose);\r\n }\r\n\r\n super._checkInputs();\r\n }\r\n\r\n /**\r\n * Updates the poseControlled values based on the input device pose.\r\n * @param poseData Pose coming from the device\r\n */\r\n updateFromDevice(poseData: DevicePose) {\r\n if (poseData && poseData.orientation && poseData.orientation.length === 4) {\r\n this.rawPose = poseData;\r\n this._deviceRoomRotationQuaternion.copyFromFloats(poseData.orientation[0], poseData.orientation[1], -poseData.orientation[2], -poseData.orientation[3]);\r\n\r\n if (this.getScene().useRightHandedSystem) {\r\n this._deviceRoomRotationQuaternion.z *= -1;\r\n this._deviceRoomRotationQuaternion.w *= -1;\r\n }\r\n if (this._webVROptions.trackPosition && this.rawPose.position) {\r\n this._deviceRoomPosition.copyFromFloats(this.rawPose.position[0], this.rawPose.position[1], -this.rawPose.position[2]);\r\n if (this.getScene().useRightHandedSystem) {\r\n this._deviceRoomPosition.z *= -1;\r\n }\r\n }\r\n this._poseSet = true;\r\n }\r\n }\r\n\r\n private _detachIfAttached = () => {\r\n const vrDisplay = this.getEngine().getVRDevice();\r\n if (vrDisplay && !vrDisplay.isPresenting) {\r\n this.detachControl();\r\n }\r\n };\r\n\r\n /**\r\n * WebVR's attach control will start broadcasting frames to the device.\r\n * Note that in certain browsers (chrome for example) this function must be called\r\n * within a user-interaction callback. Example:\r\n * <pre> scene.onPointerDown = function() { camera.attachControl(canvas); }</pre>\r\n *\r\n * @param noPreventDefault prevent the default html element operation when attaching the vrDevice\r\n */\r\n public attachControl(noPreventDefault?: boolean): void {\r\n // eslint-disable-next-line prefer-rest-params\r\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\r\n super.attachControl(noPreventDefault);\r\n this._attached = true;\r\n\r\n noPreventDefault = Camera.ForceAttachControlToAlwaysPreventDefault ? false : noPreventDefault;\r\n\r\n if (this._vrDevice) {\r\n this.getEngine().enableVR(this._webVROptions);\r\n }\r\n\r\n const hostWindow = this._scene.getEngine().getHostWindow();\r\n\r\n if (hostWindow) {\r\n hostWindow.addEventListener(\"vrdisplaypresentchange\", this._detachIfAttached);\r\n }\r\n }\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n */\r\n public detachControl(): void {\r\n this.getScene().gamepadManager.onGamepadConnectedObservable.remove(this._onGamepadConnectedObserver);\r\n this.getScene().gamepadManager.onGamepadDisconnectedObservable.remove(this._onGamepadDisconnectedObserver);\r\n\r\n super.detachControl();\r\n this._attached = false;\r\n this.getEngine().disableVR();\r\n window.removeEventListener(\"vrdisplaypresentchange\", this._detachIfAttached);\r\n }\r\n\r\n /**\r\n * @returns the name of this class\r\n */\r\n public getClassName(): string {\r\n return \"WebVRFreeCamera\";\r\n }\r\n\r\n /**\r\n * Calls resetPose on the vrDisplay\r\n * See: https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/resetPose\r\n */\r\n public resetToCurrentRotation() {\r\n //uses the vrDisplay's \"resetPose()\".\r\n //pitch and roll won't be affected.\r\n this._vrDevice.resetPose();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Updates the rig cameras (left and right eye)\r\n */\r\n public _updateRigCameras() {\r\n const camLeft = <TargetCamera>this._rigCameras[0];\r\n const camRight = <TargetCamera>this._rigCameras[1];\r\n camLeft.rotationQuaternion.copyFrom(this._deviceRoomRotationQuaternion);\r\n camRight.rotationQuaternion.copyFrom(this._deviceRoomRotationQuaternion);\r\n\r\n camLeft.position.copyFrom(this._deviceRoomPosition);\r\n camRight.position.copyFrom(this._deviceRoomPosition);\r\n }\r\n\r\n private _workingVector = Vector3.Zero();\r\n private _oneVector = Vector3.One();\r\n private _workingMatrix = Matrix.Identity();\r\n\r\n private _updateCacheCalled: boolean;\r\n\r\n // Remove translation from 6dof headset if trackposition is set to false\r\n private _correctPositionIfNotTrackPosition(matrix: Matrix, isViewMatrix = false) {\r\n if (this.rawPose && this.rawPose.position && !this._webVROptions.trackPosition) {\r\n Matrix.TranslationToRef(this.rawPose.position[0], this.rawPose.position[1], -this.rawPose.position[2], this._tmpMatrix);\r\n if (!isViewMatrix) {\r\n this._tmpMatrix.invert();\r\n }\r\n this._tmpMatrix.multiplyToRef(matrix, matrix);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Updates the cached values of the camera\r\n * @param ignoreParentClass ignores updating the parent class's cache (default: false)\r\n */\r\n public _updateCache(ignoreParentClass?: boolean): void {\r\n if (!this.rotationQuaternion.equals(this._cache.rotationQuaternion) || !this.position.equals(this._cache.position)) {\r\n // Update to ensure devicePosition is up to date with most recent _deviceRoomPosition\r\n if (!this._updateCacheCalled) {\r\n // make sure it is only called once per loop. this.update() might cause an infinite loop.\r\n this._updateCacheCalled = true;\r\n this.update();\r\n }\r\n\r\n // Set working vector to the device position in room space rotated by the new rotation\r\n this.rotationQuaternion.toRotationMatrix(this._workingMatrix);\r\n Vector3.TransformCoordinatesToRef(this._deviceRoomPosition, this._workingMatrix, this._workingVector);\r\n\r\n // Subtract this vector from the current device position in world to get the translation for the device world matrix\r\n this.devicePosition.subtractToRef(this._workingVector, this._workingVector);\r\n Matrix.ComposeToRef(this._oneVector, this.rotationQuaternion, this._workingVector, this._deviceToWorld);\r\n\r\n // Add translation from anchor position\r\n this._deviceToWorld.getTranslationToRef(this._workingVector);\r\n this._workingVector.addInPlace(this.position);\r\n this._workingVector.subtractInPlace(this._cache.position);\r\n this._deviceToWorld.setTranslation(this._workingVector);\r\n\r\n // Set an inverted matrix to be used when updating the camera\r\n this._deviceToWorld.invertToRef(this._worldToDevice);\r\n\r\n // Update the gamepad to ensure the mesh is updated on the same frame as camera\r\n this.controllers.forEach((controller) => {\r\n controller._deviceToWorld.copyFrom(this._deviceToWorld);\r\n this._correctPositionIfNotTrackPosition(controller._deviceToWorld);\r\n controller.update();\r\n });\r\n }\r\n\r\n if (!ignoreParentClass) {\r\n super._updateCache();\r\n }\r\n this._updateCacheCalled = false;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Get current device position in babylon world\r\n */\r\n public _computeDevicePosition() {\r\n Vector3.TransformCoordinatesToRef(this._deviceRoomPosition, this._deviceToWorld, this.devicePosition);\r\n }\r\n\r\n /**\r\n * Updates the current device position and rotation in the babylon world\r\n */\r\n public update() {\r\n this._computeDevicePosition();\r\n\r\n // Get current device rotation in babylon world\r\n Matrix.FromQuaternionToRef(this._deviceRoomRotationQuaternion, this._workingMatrix);\r\n this._workingMatrix.multiplyToRef(this._deviceToWorld, this._workingMatrix);\r\n Quaternion.FromRotationMatrixToRef(this._workingMatrix, this.deviceRotationQuaternion);\r\n\r\n if (this._poseSet) {\r\n this.onPoseUpdatedFromDeviceObservable.notifyObservers(null);\r\n }\r\n super.update();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Gets the view matrix of this camera (Always set to identity as left and right eye cameras contain the actual view matrix)\r\n * @returns an identity matrix\r\n */\r\n public _getViewMatrix(): Matrix {\r\n return Matrix.Identity();\r\n }\r\n\r\n private _tmpMatrix = new Matrix();\r\n /**\r\n * This function is called by the two RIG cameras.\r\n * 'this' is the left or right camera (and NOT (!!!) the WebVRFreeCamera instance)\r\n * @internal\r\n */\r\n public _getWebVRViewMatrix(): Matrix {\r\n // Update the parent camera prior to using a child camera to avoid desynchronization\r\n const parentCamera: WebVRFreeCamera = this._cameraRigParams[\"parentCamera\"];\r\n parentCamera._updateCache();\r\n\r\n //WebVR 1.1\r\n const viewArray = this._cameraRigParams[\"left\"] ? this._cameraRigParams[\"frameData\"].leftViewMatrix : this._cameraRigParams[\"frameData\"].rightViewMatrix;\r\n\r\n Matrix.FromArrayToRef(viewArray, 0, this._webvrViewMatrix);\r\n\r\n if (!this.getScene().useRightHandedSystem) {\r\n this._webvrViewMatrix.toggleModelMatrixHandInPlace();\r\n }\r\n\r\n // update the camera rotation matrix\r\n this._webvrViewMatrix.getRotationMatrixToRef(this._cameraRotationMatrix);\r\n Vector3.TransformCoordinatesToRef(this._referencePoint, this._cameraRotationMatrix, this._transformedReferencePoint);\r\n\r\n // Computing target and final matrix\r\n this.position.addToRef(this._transformedReferencePoint, this._currentTarget);\r\n\r\n // should the view matrix be updated with scale and position offset?\r\n if (parentCamera.deviceScaleFactor !== 1) {\r\n this._webvrViewMatrix.invert();\r\n // scale the position, if set\r\n if (parentCamera.deviceScaleFactor) {\r\n this._webvrViewMatrix.multiplyAtIndex(12, parentCamera.deviceScaleFactor);\r\n this._webvrViewMatrix.multiplyAtIndex(13, parentCamera.deviceScaleFactor);\r\n this._webvrViewMatrix.multiplyAtIndex(14, parentCamera.deviceScaleFactor);\r\n }\r\n\r\n this._webvrViewMatrix.invert();\r\n }\r\n\r\n // Remove translation from 6dof headset if trackposition is set to false\r\n parentCamera._correctPositionIfNotTrackPosition(this._webvrViewMatrix, true);\r\n\r\n parentCamera._worldToDevice.multiplyToRef(this._webvrViewMatrix, this._webvrViewMatrix);\r\n\r\n // Compute global position\r\n this._workingMatrix = this._workingMatrix || Matrix.Identity();\r\n this._webvrViewMatrix.invertToRef(this._workingMatrix);\r\n this._workingMatrix.multiplyToRef(parentCamera.getWorldMatrix(), this._workingMatrix);\r\n this._workingMatrix.getTranslationToRef(this._globalPosition);\r\n this._markSyncedWithParent();\r\n\r\n return this._webvrViewMatrix;\r\n }\r\n\r\n /** @internal */\r\n public _getWebVRProjectionMatrix(): Matrix {\r\n const parentCamera = <WebVRFreeCamera>this.parent;\r\n\r\n parentCamera._vrDevice.depthNear = parentCamera.minZ;\r\n parentCamera._vrDevice.depthFar = parentCamera.maxZ;\r\n\r\n const projectionArray = this._cameraRigParams[\"left\"] ? this._cameraRigParams[\"frameData\"].leftProjectionMatrix : this._cameraRigParams[\"frameData\"].rightProjectionMatrix;\r\n Matrix.FromArrayToRef(projectionArray, 0, this._projectionMatrix);\r\n\r\n //babylon compatible matrix\r\n if (!this.getScene().useRightHandedSystem) {\r\n this._projectionMatrix.toggleProjectionMatrixHandInPlace();\r\n }\r\n\r\n return this._projectionMatrix;\r\n }\r\n\r\n private _onGamepadConnectedObserver: Nullable<Observer<Gamepad>>;\r\n private _onGamepadDisconnectedObserver: Nullable<Observer<Gamepad>>;\r\n private _updateCacheWhenTrackingDisabledObserver: Nullable<Observer<Scene>>;\r\n /**\r\n * Initializes the controllers and their meshes\r\n */\r\n public initControllers() {\r\n this.controllers.length = 0;\r\n\r\n const manager = this.getScene().gamepadManager;\r\n this._onGamepadDisconnectedObserver = manager.onGamepadDisconnectedObservable.add((gamepad) => {\r\n if (gamepad.type === Gamepad.POSE_ENABLED) {\r\n const webVrController: WebVRController = <WebVRController>gamepad;\r\n\r\n if (webVrController.defaultModel) {\r\n webVrController.defaultModel.setEnabled(false);\r\n }\r\n\r\n if (webVrController.hand === \"right\") {\r\n this._rightController = null;\r\n }\r\n if (webVrController.hand === \"left\") {\r\n this._leftController = null;\r\n }\r\n const controllerIndex = this.controllers.indexOf(webVrController);\r\n if (controllerIndex !== -1) {\r\n this.controllers.splice(controllerIndex, 1);\r\n }\r\n }\r\n });\r\n\r\n this._onGamepadConnectedObserver = manager.onGamepadConnectedObservable.add((gamepad) => {\r\n if (gamepad.type === Gamepad.POSE_ENABLED) {\r\n const webVrController: WebVRController = <WebVRController>gamepad;\r\n if (!this._webVROptions.trackPosition) {\r\n webVrController._disableTrackPosition(new Vector3(webVrController.hand == \"left\" ? -0.15 : 0.15, -0.5, 0.25));\r\n // Cache must be updated before rendering controllers to avoid them being one frame behind\r\n if (!this._updateCacheWhenTrackingDisabledObserver) {\r\n this._updateCacheWhenTrackingDisabledObserver = this._scene.onBeforeRenderObservable.add(() => {\r\n this._updateCache();\r\n });\r\n }\r\n }\r\n webVrController.deviceScaleFactor = this.deviceScaleFactor;\r\n webVrController._deviceToWorld.copyFrom(this._deviceToWorld);\r\n this._correctPositionIfNotTrackPosition(webVrController._deviceToWorld);\r\n\r\n if (this._webVROptions.controllerMeshes) {\r\n if (webVrController.defaultModel) {\r\n webVrController.defaultModel.setEnabled(true);\r\n } else {\r\n // Load the meshes\r\n webVrController.initControllerMesh(this.getScene(), (loadedMesh) => {\r\n loadedMesh.scaling.scaleInPlace(this.deviceScaleFactor);\r\n this.onControllerMeshLoadedObservable.notifyObservers(webVrController);\r\n if (this._webVROptions.defaultLightingOnControllers) {\r\n if (!this._lightOnControllers) {\r\n this._lightOnControllers = new HemisphericLight(\"vrControllersLight\", new Vector3(0, 1, 0), this.getScene());\r\n }\r\n const activateLightOnSubMeshes = function (mesh: AbstractMesh, light: HemisphericLight) {\r\n const children = mesh.getChildren();\r\n if (children && children.length !== 0) {\r\n children.forEach((mesh) => {\r\n light.includedOnlyMeshes.push(<AbstractMesh>mesh);\r\n activateLightOnSubMeshes(<AbstractMesh>mesh, light);\r\n });\r\n }\r\n };\r\n this._lightOnControllers.includedOnlyMeshes.push(loadedMesh);\r\n activateLightOnSubMeshes(loadedMesh, this._lightOnControllers);\r\n }\r\n });\r\n }\r\n }\r\n webVrController.attachToPoseControlledCamera(this);\r\n\r\n // since this is async - sanity check. Is the controller already stored?\r\n if (this.controllers.indexOf(webVrController) === -1) {\r\n //add to the controllers array\r\n this.controllers.push(webVrController);\r\n\r\n // Forced to add some control code for Vive as it doesn't always fill properly the \"hand\" property\r\n // Sometimes, both controllers are set correctly (left and right), sometimes none, sometimes only one of them...\r\n // So we're overriding setting left & right manually to be sure\r\n let firstViveWandDetected = false;\r\n\r\n for (let i = 0; i < this.controllers.length; i++) {\r\n if (this.controllers[i].controllerType === PoseEnabledControllerType.VIVE) {\r\n if (!firstViveWandDetected) {\r\n firstViveWandDetected = true;\r\n this.controllers[i].hand = \"left\";\r\n } else {\r\n this.controllers[i].hand = \"right\";\r\n }\r\n }\r\n }\r\n\r\n //did we find enough controllers? Great! let the developer know.\r\n if (this.controllers.length >= 2) {\r\n this.onControllersAttachedObservable.notifyObservers(this.controllers);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"webVRCamera.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Cameras/VR/webVRCamera.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport type { Observer } from \"../../Misc/observable\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport type { TargetCamera } from \"../../Cameras/targetCamera\";\r\nimport { Camera } from \"../../Cameras/camera\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Quaternion, Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Gamepad } from \"../../Gamepads/gamepad\";\r\nimport { PoseEnabledControllerType } from \"../../Gamepads/Controllers/poseEnabledController\";\r\nimport type { WebVRController } from \"../../Gamepads/Controllers/webVRController\";\r\nimport type { IDisplayChangedEventArgs } from \"../../Engines/engine\";\r\nimport { Node } from \"../../node\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Ray } from \"../../Culling/ray\";\r\nimport { HemisphericLight } from \"../../Lights/hemisphericLight\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { VRMultiviewToSingleviewPostProcess } from \"../../PostProcesses/vrMultiviewToSingleviewPostProcess\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { setWebVRRigMode } from \"../RigModes/webVRRigMode\";\r\n\r\n// Side effect import to add webvr support to engine\r\nimport \"../../Engines/Extensions/engine.webVR\";\r\n\r\nNode.AddNodeConstructor(\"WebVRFreeCamera\", (name, scene) => {\r\n return () => new WebVRFreeCamera(name, Vector3.Zero(), scene);\r\n});\r\n\r\nNode.AddNodeConstructor(\"WebVRGamepadCamera\", (name, scene) => {\r\n return () => new WebVRFreeCamera(name, Vector3.Zero(), scene);\r\n});\r\n\r\n/**\r\n * This is a copy of VRPose. See https://developer.mozilla.org/en-US/docs/Web/API/VRPose\r\n * IMPORTANT!! The data is right-hand data.\r\n * @export\r\n * @interface DevicePose\r\n */\r\nexport interface DevicePose {\r\n /**\r\n * The position of the device, values in array are [x,y,z].\r\n */\r\n readonly position: Nullable<Float32Array>;\r\n /**\r\n * The linearVelocity of the device, values in array are [x,y,z].\r\n */\r\n readonly linearVelocity: Nullable<Float32Array>;\r\n /**\r\n * The linearAcceleration of the device, values in array are [x,y,z].\r\n */\r\n readonly linearAcceleration: Nullable<Float32Array>;\r\n\r\n /**\r\n * The orientation of the device in a quaternion array, values in array are [x,y,z,w].\r\n */\r\n readonly orientation: Nullable<Float32Array>;\r\n /**\r\n * The angularVelocity of the device, values in array are [x,y,z].\r\n */\r\n readonly angularVelocity: Nullable<Float32Array>;\r\n /**\r\n * The angularAcceleration of the device, values in array are [x,y,z].\r\n */\r\n readonly angularAcceleration: Nullable<Float32Array>;\r\n}\r\n\r\n/**\r\n * Interface representing a pose controlled object in Babylon.\r\n * A pose controlled object has both regular pose values as well as pose values\r\n * from an external device such as a VR head mounted display\r\n */\r\nexport interface PoseControlled {\r\n /**\r\n * The position of the object in babylon space.\r\n */\r\n position: Vector3;\r\n /**\r\n * The rotation quaternion of the object in babylon space.\r\n */\r\n rotationQuaternion: Quaternion;\r\n /**\r\n * The position of the device in babylon space.\r\n */\r\n devicePosition?: Vector3;\r\n /**\r\n * The rotation quaternion of the device in babylon space.\r\n */\r\n deviceRotationQuaternion: Quaternion;\r\n /**\r\n * The raw pose coming from the device.\r\n */\r\n rawPose: Nullable<DevicePose>;\r\n /**\r\n * The scale of the device to be used when translating from device space to babylon space.\r\n */\r\n deviceScaleFactor: number;\r\n /**\r\n * Updates the poseControlled values based on the input device pose.\r\n * @param poseData the pose data to update the object with\r\n */\r\n updateFromDevice(poseData: DevicePose): void;\r\n}\r\n\r\n/**\r\n * Set of options to customize the webVRCamera\r\n */\r\nexport interface WebVROptions {\r\n /**\r\n * Sets if the webVR camera should be tracked to the vrDevice. (default: true)\r\n */\r\n trackPosition?: boolean;\r\n /**\r\n * Sets the scale of the vrDevice in babylon space. (default: 1)\r\n */\r\n positionScale?: number;\r\n /**\r\n * If there are more than one VRDisplays, this will choose the display matching this name. (default: pick first vrDisplay)\r\n */\r\n displayName?: string;\r\n /**\r\n * Should the native controller meshes be initialized. (default: true)\r\n */\r\n controllerMeshes?: boolean;\r\n /**\r\n * Creating a default HemiLight only on controllers. (default: true)\r\n */\r\n defaultLightingOnControllers?: boolean;\r\n /**\r\n * If you don't want to use the default VR button of the helper. (default: false)\r\n */\r\n useCustomVRButton?: boolean;\r\n\r\n /**\r\n * If you'd like to provide your own button to the VRHelper. (default: standard babylon vr button)\r\n */\r\n customVRButton?: HTMLButtonElement;\r\n\r\n /**\r\n * To change the length of the ray for gaze/controllers. Will be scaled by positionScale. (default: 100)\r\n */\r\n rayLength?: number;\r\n\r\n /**\r\n * To change the default offset from the ground to account for user's height in meters. Will be scaled by positionScale. (default: 1.7)\r\n */\r\n defaultHeight?: number;\r\n\r\n /**\r\n * If multiview should be used if available (default: false)\r\n */\r\n useMultiview?: boolean;\r\n}\r\n\r\n/**\r\n * This represents a WebVR camera.\r\n * The WebVR camera is Babylon's simple interface to interaction with Windows Mixed Reality, HTC Vive and Oculus Rift.\r\n * @deprecated Use WebXR instead - https://doc.babylonjs.com/features/featuresDeepDive/webXR\r\n * @example https://doc.babylonjs.com/features/featuresDeepDive/cameras/webVRCamera\r\n */\r\nexport class WebVRFreeCamera extends FreeCamera implements PoseControlled {\r\n /**\r\n * @internal\r\n * The vrDisplay tied to the camera. See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay\r\n */\r\n public _vrDevice: any = null;\r\n /**\r\n * The rawPose of the vrDevice.\r\n */\r\n public rawPose: Nullable<DevicePose> = null;\r\n private _onVREnabled: (success: boolean) => void;\r\n private _specsVersion: string = \"1.1\";\r\n private _attached: boolean = false;\r\n\r\n private _frameData: any;\r\n\r\n protected _descendants: Array<Node> = [];\r\n\r\n // Represents device position and rotation in room space. Should only be used to help calculate babylon space values\r\n private _deviceRoomPosition = Vector3.Zero();\r\n /** @internal */\r\n public _deviceRoomRotationQuaternion = Quaternion.Identity();\r\n\r\n private _standingMatrix: Nullable<Matrix> = null;\r\n\r\n /**\r\n * Represents device position in babylon space.\r\n */\r\n public devicePosition = Vector3.Zero();\r\n /**\r\n * Represents device rotation in babylon space.\r\n */\r\n public deviceRotationQuaternion = Quaternion.Identity();\r\n\r\n /**\r\n * The scale of the device to be used when translating from device space to babylon space.\r\n */\r\n public deviceScaleFactor: number = 1;\r\n\r\n private _deviceToWorld = Matrix.Identity();\r\n private _worldToDevice = Matrix.Identity();\r\n\r\n /**\r\n * References to the webVR controllers for the vrDevice.\r\n */\r\n public controllers: Array<WebVRController> = [];\r\n /**\r\n * Emits an event when a controller is attached.\r\n */\r\n public onControllersAttachedObservable = new Observable<Array<WebVRController>>();\r\n /**\r\n * Emits an event when a controller's mesh has been loaded;\r\n */\r\n public onControllerMeshLoadedObservable = new Observable<WebVRController>();\r\n /**\r\n * Emits an event when the HMD's pose has been updated.\r\n */\r\n public onPoseUpdatedFromDeviceObservable = new Observable<any>();\r\n private _poseSet = false;\r\n /**\r\n * If the rig cameras be used as parent instead of this camera.\r\n */\r\n public rigParenting: boolean = true;\r\n\r\n private _lightOnControllers: HemisphericLight;\r\n\r\n private _defaultHeight?: number = undefined;\r\n\r\n /**\r\n * Instantiates a WebVRFreeCamera.\r\n * @param name The name of the WebVRFreeCamera\r\n * @param position The starting anchor position for the camera\r\n * @param scene The scene the camera belongs to\r\n * @param _webVROptions a set of customizable options for the webVRCamera\r\n */\r\n constructor(name: string, position: Vector3, scene?: Scene, private _webVROptions: WebVROptions = {}) {\r\n super(name, position, scene);\r\n this._cache.position = Vector3.Zero();\r\n if (_webVROptions.defaultHeight) {\r\n this._defaultHeight = _webVROptions.defaultHeight;\r\n this.position.y = this._defaultHeight;\r\n }\r\n\r\n this.minZ = 0.1;\r\n\r\n //legacy support - the compensation boolean was removed.\r\n if (arguments.length === 5) {\r\n // eslint-disable-next-line prefer-rest-params\r\n this._webVROptions = arguments[4];\r\n }\r\n\r\n // default webVR options\r\n if (this._webVROptions.trackPosition == undefined) {\r\n this._webVROptions.trackPosition = true;\r\n }\r\n if (this._webVROptions.controllerMeshes == undefined) {\r\n this._webVROptions.controllerMeshes = true;\r\n }\r\n if (this._webVROptions.defaultLightingOnControllers == undefined) {\r\n this._webVROptions.defaultLightingOnControllers = true;\r\n }\r\n\r\n this.rotationQuaternion = new Quaternion();\r\n\r\n if (this._webVROptions && this._webVROptions.positionScale) {\r\n this.deviceScaleFactor = this._webVROptions.positionScale;\r\n }\r\n\r\n //enable VR\r\n const engine = this.getEngine();\r\n this._onVREnabled = (success: boolean) => {\r\n if (success) {\r\n this.initControllers();\r\n }\r\n };\r\n engine.onVRRequestPresentComplete.add(this._onVREnabled);\r\n engine.initWebVR().add((event: IDisplayChangedEventArgs) => {\r\n if (!event.vrDisplay || this._vrDevice === event.vrDisplay) {\r\n return;\r\n }\r\n\r\n this._vrDevice = event.vrDisplay;\r\n\r\n //reset the rig parameters.\r\n this.setCameraRigMode(Camera.RIG_MODE_WEBVR, { parentCamera: this, vrDisplay: this._vrDevice, frameData: this._frameData, specs: this._specsVersion });\r\n\r\n if (this._attached) {\r\n this.getEngine().enableVR(this._webVROptions);\r\n }\r\n });\r\n\r\n if (typeof VRFrameData !== \"undefined\") {\r\n this._frameData = new VRFrameData();\r\n }\r\n\r\n if (_webVROptions.useMultiview) {\r\n if (!this.getScene().getEngine().getCaps().multiview) {\r\n Logger.Warn(\"Multiview is not supported, falling back to standard rendering\");\r\n this._useMultiviewToSingleView = false;\r\n } else {\r\n this._useMultiviewToSingleView = true;\r\n this._rigPostProcess = new VRMultiviewToSingleviewPostProcess(\"VRMultiviewToSingleview\", this, 1.0);\r\n }\r\n }\r\n\r\n /**\r\n * The idea behind the following lines:\r\n * objects that have the camera as parent should actually have the rig cameras as a parent.\r\n * BUT, each of those cameras has a different view matrix, which means that if we set the parent to the first rig camera,\r\n * the second will not show it correctly.\r\n *\r\n * To solve this - each object that has the camera as parent will be added to a protected array.\r\n * When the rig camera renders, it will take this array and set all of those to be its children.\r\n * This way, the right camera will be used as a parent, and the mesh will be rendered correctly.\r\n * Amazing!\r\n */\r\n this.getScene().onBeforeCameraRenderObservable.add((camera) => {\r\n if (camera.parent === this && this.rigParenting) {\r\n this._descendants = this.getDescendants(true, (n) => {\r\n // don't take the cameras or the controllers!\r\n const isController = this.controllers.some((controller) => {\r\n return controller._mesh === n;\r\n });\r\n const isRigCamera = this._rigCameras.indexOf(<Camera>n) !== -1;\r\n return !isController && !isRigCamera;\r\n });\r\n this._descendants.forEach((node) => {\r\n node.parent = camera;\r\n });\r\n }\r\n });\r\n\r\n this.getScene().onAfterCameraRenderObservable.add((camera) => {\r\n if (camera.parent === this && this.rigParenting) {\r\n this._descendants.forEach((node) => {\r\n node.parent = this;\r\n });\r\n }\r\n });\r\n }\r\n\r\n protected _setRigMode = setWebVRRigMode.bind(null, this);\r\n\r\n /**\r\n * Gets the device distance from the ground in meters.\r\n * @returns the distance in meters from the vrDevice to ground in device space. If standing matrix is not supported for the vrDevice 0 is returned.\r\n */\r\n public deviceDistanceToRoomGround(): number {\r\n if (this._standingMatrix) {\r\n // Add standing matrix offset to get real offset from ground in room\r\n this._standingMatrix.getTranslationToRef(this._workingVector);\r\n return this._deviceRoomPosition.y + this._workingVector.y;\r\n }\r\n //If VRDisplay does not inform stage parameters and no default height is set we fallback to zero.\r\n return this._defaultHeight || 0;\r\n }\r\n\r\n /**\r\n * Enables the standing matrix when supported. This can be used to position the user's view the correct height from the ground.\r\n * @param callback will be called when the standing matrix is set. Callback parameter is if the standing matrix is supported.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public useStandingMatrix(callback = (bool: boolean) => {}) {\r\n // Use standing matrix if available\r\n this.getEngine()\r\n .initWebVRAsync()\r\n .then((result) => {\r\n if (!result.vrDisplay || !result.vrDisplay.stageParameters || !result.vrDisplay.stageParameters.sittingToStandingTransform || !this._webVROptions.trackPosition) {\r\n callback(false);\r\n } else {\r\n this._standingMatrix = new Matrix();\r\n Matrix.FromFloat32ArrayToRefScaled(result.vrDisplay.stageParameters.sittingToStandingTransform, 0, 1, this._standingMatrix);\r\n if (!this.getScene().useRightHandedSystem) {\r\n if (this._standingMatrix) {\r\n this._standingMatrix.toggleModelMatrixHandInPlace();\r\n }\r\n }\r\n callback(true);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Enables the standing matrix when supported. This can be used to position the user's view the correct height from the ground.\r\n * @returns A promise with a boolean set to if the standing matrix is supported.\r\n */\r\n public useStandingMatrixAsync(): Promise<boolean> {\r\n return new Promise((res) => {\r\n this.useStandingMatrix((supported) => {\r\n res(supported);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Disposes the camera\r\n */\r\n public dispose(): void {\r\n this._detachIfAttached();\r\n this.getEngine().onVRRequestPresentComplete.removeCallback(this._onVREnabled);\r\n if (this._updateCacheWhenTrackingDisabledObserver) {\r\n this._scene.onBeforeRenderObservable.remove(this._updateCacheWhenTrackingDisabledObserver);\r\n }\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Gets a vrController by name.\r\n * @param name The name of the controller to retrieve\r\n * @returns the controller matching the name specified or null if not found\r\n */\r\n public getControllerByName(name: string): Nullable<WebVRController> {\r\n for (const gp of this.controllers) {\r\n if (gp.hand === name) {\r\n return gp;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _leftController: Nullable<WebVRController>;\r\n /**\r\n * The controller corresponding to the users left hand.\r\n */\r\n public get leftController(): Nullable<WebVRController> {\r\n if (!this._leftController) {\r\n this._leftController = this.getControllerByName(\"left\");\r\n }\r\n\r\n return this._leftController;\r\n }\r\n\r\n private _rightController: Nullable<WebVRController>;\r\n /**\r\n * The controller corresponding to the users right hand.\r\n */\r\n public get rightController(): Nullable<WebVRController> {\r\n if (!this._rightController) {\r\n this._rightController = this.getControllerByName(\"right\");\r\n }\r\n\r\n return this._rightController;\r\n }\r\n\r\n /**\r\n * Casts a ray forward from the vrCamera's gaze.\r\n * @param length Length of the ray (default: 100)\r\n * @returns the ray corresponding to the gaze\r\n */\r\n public getForwardRay(length = 100): Ray {\r\n if (this.leftCamera) {\r\n // Use left eye to avoid computation to compute center on every call\r\n return super.getForwardRay(length, this.leftCamera.getWorldMatrix(), this.leftCamera.globalPosition); // Need the actual rendered camera\r\n } else {\r\n return super.getForwardRay(length);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Updates the camera based on device's frame data\r\n */\r\n public _checkInputs(): void {\r\n if (this._vrDevice && this._vrDevice.isPresenting) {\r\n this._vrDevice.getFrameData(this._frameData);\r\n\r\n this.updateFromDevice(this._frameData.pose);\r\n }\r\n\r\n super._checkInputs();\r\n }\r\n\r\n /**\r\n * Updates the poseControlled values based on the input device pose.\r\n * @param poseData Pose coming from the device\r\n */\r\n updateFromDevice(poseData: DevicePose) {\r\n if (poseData && poseData.orientation && poseData.orientation.length === 4) {\r\n this.rawPose = poseData;\r\n this._deviceRoomRotationQuaternion.copyFromFloats(poseData.orientation[0], poseData.orientation[1], -poseData.orientation[2], -poseData.orientation[3]);\r\n\r\n if (this.getScene().useRightHandedSystem) {\r\n this._deviceRoomRotationQuaternion.z *= -1;\r\n this._deviceRoomRotationQuaternion.w *= -1;\r\n }\r\n if (this._webVROptions.trackPosition && this.rawPose.position) {\r\n this._deviceRoomPosition.copyFromFloats(this.rawPose.position[0], this.rawPose.position[1], -this.rawPose.position[2]);\r\n if (this.getScene().useRightHandedSystem) {\r\n this._deviceRoomPosition.z *= -1;\r\n }\r\n }\r\n this._poseSet = true;\r\n }\r\n }\r\n\r\n private _detachIfAttached = () => {\r\n const vrDisplay = this.getEngine().getVRDevice();\r\n if (vrDisplay && !vrDisplay.isPresenting) {\r\n this.detachControl();\r\n }\r\n };\r\n\r\n /**\r\n * WebVR's attach control will start broadcasting frames to the device.\r\n * Note that in certain browsers (chrome for example) this function must be called\r\n * within a user-interaction callback. Example:\r\n * <pre> scene.onPointerDown = function() { camera.attachControl(canvas); }</pre>\r\n *\r\n * @param noPreventDefault prevent the default html element operation when attaching the vrDevice\r\n */\r\n public attachControl(noPreventDefault?: boolean): void {\r\n // eslint-disable-next-line prefer-rest-params\r\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\r\n super.attachControl(noPreventDefault);\r\n this._attached = true;\r\n\r\n noPreventDefault = Camera.ForceAttachControlToAlwaysPreventDefault ? false : noPreventDefault;\r\n\r\n if (this._vrDevice) {\r\n this.getEngine().enableVR(this._webVROptions);\r\n }\r\n\r\n const hostWindow = this._scene.getEngine().getHostWindow();\r\n\r\n if (hostWindow) {\r\n hostWindow.addEventListener(\"vrdisplaypresentchange\", this._detachIfAttached);\r\n }\r\n }\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n */\r\n public detachControl(): void {\r\n this.getScene().gamepadManager.onGamepadConnectedObservable.remove(this._onGamepadConnectedObserver);\r\n this.getScene().gamepadManager.onGamepadDisconnectedObservable.remove(this._onGamepadDisconnectedObserver);\r\n\r\n super.detachControl();\r\n this._attached = false;\r\n this.getEngine().disableVR();\r\n window.removeEventListener(\"vrdisplaypresentchange\", this._detachIfAttached);\r\n }\r\n\r\n /**\r\n * @returns the name of this class\r\n */\r\n public getClassName(): string {\r\n return \"WebVRFreeCamera\";\r\n }\r\n\r\n /**\r\n * Calls resetPose on the vrDisplay\r\n * See: https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/resetPose\r\n */\r\n public resetToCurrentRotation() {\r\n //uses the vrDisplay's \"resetPose()\".\r\n //pitch and roll won't be affected.\r\n this._vrDevice.resetPose();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Updates the rig cameras (left and right eye)\r\n */\r\n public _updateRigCameras() {\r\n const camLeft = <TargetCamera>this._rigCameras[0];\r\n const camRight = <TargetCamera>this._rigCameras[1];\r\n camLeft.rotationQuaternion.copyFrom(this._deviceRoomRotationQuaternion);\r\n camRight.rotationQuaternion.copyFrom(this._deviceRoomRotationQuaternion);\r\n\r\n camLeft.position.copyFrom(this._deviceRoomPosition);\r\n camRight.position.copyFrom(this._deviceRoomPosition);\r\n }\r\n\r\n private _workingVector = Vector3.Zero();\r\n private _oneVector = Vector3.One();\r\n private _workingMatrix = Matrix.Identity();\r\n\r\n private _updateCacheCalled: boolean;\r\n\r\n // Remove translation from 6dof headset if trackposition is set to false\r\n private _correctPositionIfNotTrackPosition(matrix: Matrix, isViewMatrix = false) {\r\n if (this.rawPose && this.rawPose.position && !this._webVROptions.trackPosition) {\r\n Matrix.TranslationToRef(this.rawPose.position[0], this.rawPose.position[1], -this.rawPose.position[2], this._tmpMatrix);\r\n if (!isViewMatrix) {\r\n this._tmpMatrix.invert();\r\n }\r\n this._tmpMatrix.multiplyToRef(matrix, matrix);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Updates the cached values of the camera\r\n * @param ignoreParentClass ignores updating the parent class's cache (default: false)\r\n */\r\n public _updateCache(ignoreParentClass?: boolean): void {\r\n if (!this.rotationQuaternion.equals(this._cache.rotationQuaternion) || !this.position.equals(this._cache.position)) {\r\n // Update to ensure devicePosition is up to date with most recent _deviceRoomPosition\r\n if (!this._updateCacheCalled) {\r\n // make sure it is only called once per loop. this.update() might cause an infinite loop.\r\n this._updateCacheCalled = true;\r\n this.update();\r\n }\r\n\r\n // Set working vector to the device position in room space rotated by the new rotation\r\n this.rotationQuaternion.toRotationMatrix(this._workingMatrix);\r\n Vector3.TransformCoordinatesToRef(this._deviceRoomPosition, this._workingMatrix, this._workingVector);\r\n\r\n // Subtract this vector from the current device position in world to get the translation for the device world matrix\r\n this.devicePosition.subtractToRef(this._workingVector, this._workingVector);\r\n Matrix.ComposeToRef(this._oneVector, this.rotationQuaternion, this._workingVector, this._deviceToWorld);\r\n\r\n // Add translation from anchor position\r\n this._deviceToWorld.getTranslationToRef(this._workingVector);\r\n this._workingVector.addInPlace(this.position);\r\n this._workingVector.subtractInPlace(this._cache.position);\r\n this._deviceToWorld.setTranslation(this._workingVector);\r\n\r\n // Set an inverted matrix to be used when updating the camera\r\n this._deviceToWorld.invertToRef(this._worldToDevice);\r\n\r\n // Update the gamepad to ensure the mesh is updated on the same frame as camera\r\n this.controllers.forEach((controller) => {\r\n controller._deviceToWorld.copyFrom(this._deviceToWorld);\r\n this._correctPositionIfNotTrackPosition(controller._deviceToWorld);\r\n controller.update();\r\n });\r\n }\r\n\r\n if (!ignoreParentClass) {\r\n super._updateCache();\r\n }\r\n this._updateCacheCalled = false;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Get current device position in babylon world\r\n */\r\n public _computeDevicePosition() {\r\n Vector3.TransformCoordinatesToRef(this._deviceRoomPosition, this._deviceToWorld, this.devicePosition);\r\n }\r\n\r\n /**\r\n * Updates the current device position and rotation in the babylon world\r\n */\r\n public update() {\r\n this._computeDevicePosition();\r\n\r\n // Get current device rotation in babylon world\r\n Matrix.FromQuaternionToRef(this._deviceRoomRotationQuaternion, this._workingMatrix);\r\n this._workingMatrix.multiplyToRef(this._deviceToWorld, this._workingMatrix);\r\n Quaternion.FromRotationMatrixToRef(this._workingMatrix, this.deviceRotationQuaternion);\r\n\r\n if (this._poseSet) {\r\n this.onPoseUpdatedFromDeviceObservable.notifyObservers(null);\r\n }\r\n super.update();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Gets the view matrix of this camera (Always set to identity as left and right eye cameras contain the actual view matrix)\r\n * @returns an identity matrix\r\n */\r\n public _getViewMatrix(): Matrix {\r\n return Matrix.Identity();\r\n }\r\n\r\n private _tmpMatrix = new Matrix();\r\n /**\r\n * This function is called by the two RIG cameras.\r\n * 'this' is the left or right camera (and NOT (!!!) the WebVRFreeCamera instance)\r\n * @internal\r\n */\r\n public _getWebVRViewMatrix(): Matrix {\r\n // Update the parent camera prior to using a child camera to avoid desynchronization\r\n const parentCamera: WebVRFreeCamera = this._cameraRigParams[\"parentCamera\"];\r\n parentCamera._updateCache();\r\n\r\n //WebVR 1.1\r\n const viewArray = this._cameraRigParams[\"left\"] ? this._cameraRigParams[\"frameData\"].leftViewMatrix : this._cameraRigParams[\"frameData\"].rightViewMatrix;\r\n\r\n Matrix.FromArrayToRef(viewArray, 0, this._webvrViewMatrix);\r\n\r\n if (!this.getScene().useRightHandedSystem) {\r\n this._webvrViewMatrix.toggleModelMatrixHandInPlace();\r\n }\r\n\r\n // update the camera rotation matrix\r\n this._webvrViewMatrix.getRotationMatrixToRef(this._cameraRotationMatrix);\r\n Vector3.TransformCoordinatesToRef(this._referencePoint, this._cameraRotationMatrix, this._transformedReferencePoint);\r\n\r\n // Computing target and final matrix\r\n this.position.addToRef(this._transformedReferencePoint, this._currentTarget);\r\n\r\n // should the view matrix be updated with scale and position offset?\r\n if (parentCamera.deviceScaleFactor !== 1) {\r\n this._webvrViewMatrix.invert();\r\n // scale the position, if set\r\n if (parentCamera.deviceScaleFactor) {\r\n this._webvrViewMatrix.multiplyAtIndex(12, parentCamera.deviceScaleFactor);\r\n this._webvrViewMatrix.multiplyAtIndex(13, parentCamera.deviceScaleFactor);\r\n this._webvrViewMatrix.multiplyAtIndex(14, parentCamera.deviceScaleFactor);\r\n }\r\n\r\n this._webvrViewMatrix.invert();\r\n }\r\n\r\n // Remove translation from 6dof headset if trackposition is set to false\r\n parentCamera._correctPositionIfNotTrackPosition(this._webvrViewMatrix, true);\r\n\r\n parentCamera._worldToDevice.multiplyToRef(this._webvrViewMatrix, this._webvrViewMatrix);\r\n\r\n // Compute global position\r\n this._workingMatrix = this._workingMatrix || Matrix.Identity();\r\n this._webvrViewMatrix.invertToRef(this._workingMatrix);\r\n this._workingMatrix.multiplyToRef(parentCamera.getWorldMatrix(), this._workingMatrix);\r\n this._workingMatrix.getTranslationToRef(this._globalPosition);\r\n this._markSyncedWithParent();\r\n\r\n return this._webvrViewMatrix;\r\n }\r\n\r\n /** @internal */\r\n public _getWebVRProjectionMatrix(): Matrix {\r\n const parentCamera = <WebVRFreeCamera>this.parent;\r\n\r\n parentCamera._vrDevice.depthNear = parentCamera.minZ;\r\n parentCamera._vrDevice.depthFar = parentCamera.maxZ;\r\n\r\n const projectionArray = this._cameraRigParams[\"left\"] ? this._cameraRigParams[\"frameData\"].leftProjectionMatrix : this._cameraRigParams[\"frameData\"].rightProjectionMatrix;\r\n Matrix.FromArrayToRef(projectionArray, 0, this._projectionMatrix);\r\n\r\n //babylon compatible matrix\r\n if (!this.getScene().useRightHandedSystem) {\r\n this._projectionMatrix.toggleProjectionMatrixHandInPlace();\r\n }\r\n\r\n return this._projectionMatrix;\r\n }\r\n\r\n private _onGamepadConnectedObserver: Nullable<Observer<Gamepad>>;\r\n private _onGamepadDisconnectedObserver: Nullable<Observer<Gamepad>>;\r\n private _updateCacheWhenTrackingDisabledObserver: Nullable<Observer<Scene>>;\r\n /**\r\n * Initializes the controllers and their meshes\r\n */\r\n public initControllers() {\r\n this.controllers.length = 0;\r\n\r\n const manager = this.getScene().gamepadManager;\r\n this._onGamepadDisconnectedObserver = manager.onGamepadDisconnectedObservable.add((gamepad) => {\r\n if (gamepad.type === Gamepad.POSE_ENABLED) {\r\n const webVrController: WebVRController = <WebVRController>gamepad;\r\n\r\n if (webVrController.defaultModel) {\r\n webVrController.defaultModel.setEnabled(false);\r\n }\r\n\r\n if (webVrController.hand === \"right\") {\r\n this._rightController = null;\r\n }\r\n if (webVrController.hand === \"left\") {\r\n this._leftController = null;\r\n }\r\n const controllerIndex = this.controllers.indexOf(webVrController);\r\n if (controllerIndex !== -1) {\r\n this.controllers.splice(controllerIndex, 1);\r\n }\r\n }\r\n });\r\n\r\n this._onGamepadConnectedObserver = manager.onGamepadConnectedObservable.add((gamepad) => {\r\n if (gamepad.type === Gamepad.POSE_ENABLED) {\r\n const webVrController: WebVRController = <WebVRController>gamepad;\r\n if (!this._webVROptions.trackPosition) {\r\n webVrController._disableTrackPosition(new Vector3(webVrController.hand == \"left\" ? -0.15 : 0.15, -0.5, 0.25));\r\n // Cache must be updated before rendering controllers to avoid them being one frame behind\r\n if (!this._updateCacheWhenTrackingDisabledObserver) {\r\n this._updateCacheWhenTrackingDisabledObserver = this._scene.onBeforeRenderObservable.add(() => {\r\n this._updateCache();\r\n });\r\n }\r\n }\r\n webVrController.deviceScaleFactor = this.deviceScaleFactor;\r\n webVrController._deviceToWorld.copyFrom(this._deviceToWorld);\r\n this._correctPositionIfNotTrackPosition(webVrController._deviceToWorld);\r\n\r\n if (this._webVROptions.controllerMeshes) {\r\n if (webVrController.defaultModel) {\r\n webVrController.defaultModel.setEnabled(true);\r\n } else {\r\n // Load the meshes\r\n webVrController.initControllerMesh(this.getScene(), (loadedMesh) => {\r\n loadedMesh.scaling.scaleInPlace(this.deviceScaleFactor);\r\n this.onControllerMeshLoadedObservable.notifyObservers(webVrController);\r\n if (this._webVROptions.defaultLightingOnControllers) {\r\n if (!this._lightOnControllers) {\r\n this._lightOnControllers = new HemisphericLight(\"vrControllersLight\", new Vector3(0, 1, 0), this.getScene());\r\n }\r\n const activateLightOnSubMeshes = function (mesh: AbstractMesh, light: HemisphericLight) {\r\n const children = mesh.getChildren();\r\n if (children && children.length !== 0) {\r\n children.forEach((mesh) => {\r\n light.includedOnlyMeshes.push(<AbstractMesh>mesh);\r\n activateLightOnSubMeshes(<AbstractMesh>mesh, light);\r\n });\r\n }\r\n };\r\n this._lightOnControllers.includedOnlyMeshes.push(loadedMesh);\r\n activateLightOnSubMeshes(loadedMesh, this._lightOnControllers);\r\n }\r\n });\r\n }\r\n }\r\n webVrController.attachToPoseControlledCamera(this);\r\n\r\n // since this is async - sanity check. Is the controller already stored?\r\n if (this.controllers.indexOf(webVrController) === -1) {\r\n //add to the controllers array\r\n this.controllers.push(webVrController);\r\n\r\n // Forced to add some control code for Vive as it doesn't always fill properly the \"hand\" property\r\n // Sometimes, both controllers are set correctly (left and right), sometimes none, sometimes only one of them...\r\n // So we're overriding setting left & right manually to be sure\r\n let firstViveWandDetected = false;\r\n\r\n for (let i = 0; i < this.controllers.length; i++) {\r\n if (this.controllers[i].controllerType === PoseEnabledControllerType.VIVE) {\r\n if (!firstViveWandDetected) {\r\n firstViveWandDetected = true;\r\n this.controllers[i].hand = \"left\";\r\n } else {\r\n this.controllers[i].hand = \"right\";\r\n }\r\n }\r\n }\r\n\r\n //did we find enough controllers? Great! let the developer know.\r\n if (this.controllers.length >= 2) {\r\n this.onControllersAttachedObservable.notifyObservers(this.controllers);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -15,7 +15,7 @@ declare type Collider = import("../Collisions/collider").Collider;
|
|
|
15
15
|
*
|
|
16
16
|
* This camera always points towards a given target position and can be rotated around that target with the target as the centre of rotation. It can be controlled with cursors and mouse, or with touch events.
|
|
17
17
|
* Think of this camera as one orbiting its target position, or more imaginatively as a spy satellite orbiting the earth. Its position relative to the target (earth) can be set by three parameters, alpha (radians) the longitudinal rotation, beta (radians) the latitudinal rotation and radius the distance from the target position.
|
|
18
|
-
* @see https://doc.babylonjs.com/
|
|
18
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_introduction#arc-rotate-camera
|
|
19
19
|
*/
|
|
20
20
|
export declare class ArcRotateCamera extends TargetCamera {
|
|
21
21
|
/**
|
|
@@ -261,36 +261,36 @@ export declare class ArcRotateCamera extends TargetCamera {
|
|
|
261
261
|
private _bouncingBehavior;
|
|
262
262
|
/**
|
|
263
263
|
* Gets the bouncing behavior of the camera if it has been enabled.
|
|
264
|
-
* @see https://doc.babylonjs.com/
|
|
264
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors#bouncing-behavior
|
|
265
265
|
*/
|
|
266
266
|
get bouncingBehavior(): Nullable<BouncingBehavior>;
|
|
267
267
|
/**
|
|
268
268
|
* Defines if the bouncing behavior of the camera is enabled on the camera.
|
|
269
|
-
* @see https://doc.babylonjs.com/
|
|
269
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors#bouncing-behavior
|
|
270
270
|
*/
|
|
271
271
|
get useBouncingBehavior(): boolean;
|
|
272
272
|
set useBouncingBehavior(value: boolean);
|
|
273
273
|
private _framingBehavior;
|
|
274
274
|
/**
|
|
275
275
|
* Gets the framing behavior of the camera if it has been enabled.
|
|
276
|
-
* @see https://doc.babylonjs.com/
|
|
276
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors#framing-behavior
|
|
277
277
|
*/
|
|
278
278
|
get framingBehavior(): Nullable<FramingBehavior>;
|
|
279
279
|
/**
|
|
280
280
|
* Defines if the framing behavior of the camera is enabled on the camera.
|
|
281
|
-
* @see https://doc.babylonjs.com/
|
|
281
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors#framing-behavior
|
|
282
282
|
*/
|
|
283
283
|
get useFramingBehavior(): boolean;
|
|
284
284
|
set useFramingBehavior(value: boolean);
|
|
285
285
|
private _autoRotationBehavior;
|
|
286
286
|
/**
|
|
287
287
|
* Gets the auto rotation behavior of the camera if it has been enabled.
|
|
288
|
-
* @see https://doc.babylonjs.com/
|
|
288
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors#autorotation-behavior
|
|
289
289
|
*/
|
|
290
290
|
get autoRotationBehavior(): Nullable<AutoRotationBehavior>;
|
|
291
291
|
/**
|
|
292
292
|
* Defines if the auto rotation behavior of the camera is enabled on the camera.
|
|
293
|
-
* @see https://doc.babylonjs.com/
|
|
293
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors#autorotation-behavior
|
|
294
294
|
*/
|
|
295
295
|
get useAutoRotationBehavior(): boolean;
|
|
296
296
|
set useAutoRotationBehavior(value: boolean);
|
|
@@ -304,13 +304,13 @@ export declare class ArcRotateCamera extends TargetCamera {
|
|
|
304
304
|
onCollide: (collidedMesh: AbstractMesh) => void;
|
|
305
305
|
/**
|
|
306
306
|
* Defines whether the camera should check collision with the objects oh the scene.
|
|
307
|
-
* @see https://doc.babylonjs.com/
|
|
307
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_collisions#how-can-i-do-this-
|
|
308
308
|
*/
|
|
309
309
|
checkCollisions: boolean;
|
|
310
310
|
/**
|
|
311
311
|
* Defines the collision radius of the camera.
|
|
312
312
|
* This simulates a sphere around the camera.
|
|
313
|
-
* @see https://doc.babylonjs.com/
|
|
313
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_collisions#arcrotatecamera
|
|
314
314
|
*/
|
|
315
315
|
collisionRadius: Vector3;
|
|
316
316
|
protected _collider: Collider;
|
|
@@ -20,7 +20,7 @@ Node.AddNodeConstructor("ArcRotateCamera", (name, scene) => {
|
|
|
20
20
|
*
|
|
21
21
|
* This camera always points towards a given target position and can be rotated around that target with the target as the centre of rotation. It can be controlled with cursors and mouse, or with touch events.
|
|
22
22
|
* Think of this camera as one orbiting its target position, or more imaginatively as a spy satellite orbiting the earth. Its position relative to the target (earth) can be set by three parameters, alpha (radians) the longitudinal rotation, beta (radians) the latitudinal rotation and radius the distance from the target position.
|
|
23
|
-
* @see https://doc.babylonjs.com/
|
|
23
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_introduction#arc-rotate-camera
|
|
24
24
|
*/
|
|
25
25
|
export class ArcRotateCamera extends TargetCamera {
|
|
26
26
|
/**
|
|
@@ -143,13 +143,13 @@ export class ArcRotateCamera extends TargetCamera {
|
|
|
143
143
|
this.onMeshTargetChangedObservable = new Observable();
|
|
144
144
|
/**
|
|
145
145
|
* Defines whether the camera should check collision with the objects oh the scene.
|
|
146
|
-
* @see https://doc.babylonjs.com/
|
|
146
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_collisions#how-can-i-do-this-
|
|
147
147
|
*/
|
|
148
148
|
this.checkCollisions = false;
|
|
149
149
|
/**
|
|
150
150
|
* Defines the collision radius of the camera.
|
|
151
151
|
* This simulates a sphere around the camera.
|
|
152
|
-
* @see https://doc.babylonjs.com/
|
|
152
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_collisions#arcrotatecamera
|
|
153
153
|
*/
|
|
154
154
|
this.collisionRadius = new Vector3(0.5, 0.5, 0.5);
|
|
155
155
|
this._previousPosition = Vector3.Zero();
|
|
@@ -485,14 +485,14 @@ export class ArcRotateCamera extends TargetCamera {
|
|
|
485
485
|
}
|
|
486
486
|
/**
|
|
487
487
|
* Gets the bouncing behavior of the camera if it has been enabled.
|
|
488
|
-
* @see https://doc.babylonjs.com/
|
|
488
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors#bouncing-behavior
|
|
489
489
|
*/
|
|
490
490
|
get bouncingBehavior() {
|
|
491
491
|
return this._bouncingBehavior;
|
|
492
492
|
}
|
|
493
493
|
/**
|
|
494
494
|
* Defines if the bouncing behavior of the camera is enabled on the camera.
|
|
495
|
-
* @see https://doc.babylonjs.com/
|
|
495
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors#bouncing-behavior
|
|
496
496
|
*/
|
|
497
497
|
get useBouncingBehavior() {
|
|
498
498
|
return this._bouncingBehavior != null;
|
|
@@ -512,14 +512,14 @@ export class ArcRotateCamera extends TargetCamera {
|
|
|
512
512
|
}
|
|
513
513
|
/**
|
|
514
514
|
* Gets the framing behavior of the camera if it has been enabled.
|
|
515
|
-
* @see https://doc.babylonjs.com/
|
|
515
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors#framing-behavior
|
|
516
516
|
*/
|
|
517
517
|
get framingBehavior() {
|
|
518
518
|
return this._framingBehavior;
|
|
519
519
|
}
|
|
520
520
|
/**
|
|
521
521
|
* Defines if the framing behavior of the camera is enabled on the camera.
|
|
522
|
-
* @see https://doc.babylonjs.com/
|
|
522
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors#framing-behavior
|
|
523
523
|
*/
|
|
524
524
|
get useFramingBehavior() {
|
|
525
525
|
return this._framingBehavior != null;
|
|
@@ -539,14 +539,14 @@ export class ArcRotateCamera extends TargetCamera {
|
|
|
539
539
|
}
|
|
540
540
|
/**
|
|
541
541
|
* Gets the auto rotation behavior of the camera if it has been enabled.
|
|
542
|
-
* @see https://doc.babylonjs.com/
|
|
542
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors#autorotation-behavior
|
|
543
543
|
*/
|
|
544
544
|
get autoRotationBehavior() {
|
|
545
545
|
return this._autoRotationBehavior;
|
|
546
546
|
}
|
|
547
547
|
/**
|
|
548
548
|
* Defines if the auto rotation behavior of the camera is enabled on the camera.
|
|
549
|
-
* @see https://doc.babylonjs.com/
|
|
549
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors#autorotation-behavior
|
|
550
550
|
*/
|
|
551
551
|
get useAutoRotationBehavior() {
|
|
552
552
|
return this._autoRotationBehavior != null;
|