@babylonjs/core 8.37.0 → 8.37.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/Animations/animationGroup.js +1 -4
- package/Animations/animationGroup.js.map +1 -1
- package/Behaviors/Cameras/interpolatingBehavior.d.ts +58 -0
- package/Behaviors/Cameras/interpolatingBehavior.js +157 -0
- package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -0
- package/Cameras/Inputs/arcRotateCameraPointersInput.d.ts +5 -20
- package/Cameras/Inputs/arcRotateCameraPointersInput.js +9 -69
- package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +11 -9
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraKeyboardInput.d.ts +81 -0
- package/Cameras/Inputs/geospatialCameraKeyboardInput.js +223 -0
- package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -0
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.js +1 -1
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +17 -21
- package/Cameras/Inputs/geospatialCameraPointersInput.js +49 -71
- package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/orbitCameraPointersInput.d.ts +49 -0
- package/Cameras/Inputs/orbitCameraPointersInput.js +105 -0
- package/Cameras/Inputs/orbitCameraPointersInput.js.map +1 -0
- package/Cameras/Limits/geospatialLimits.d.ts +60 -0
- package/Cameras/Limits/geospatialLimits.js +89 -0
- package/Cameras/Limits/geospatialLimits.js.map +1 -0
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.js +2 -2
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/cameraMovement.d.ts +150 -0
- package/Cameras/cameraMovement.js +190 -0
- package/Cameras/cameraMovement.js.map +1 -0
- package/Cameras/deviceOrientationCamera.js +5 -3
- package/Cameras/deviceOrientationCamera.js.map +1 -1
- package/Cameras/flyCamera.d.ts +2 -1
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/geospatialCamera.d.ts +78 -49
- package/Cameras/geospatialCamera.js +210 -191
- package/Cameras/geospatialCamera.js.map +1 -1
- package/Cameras/geospatialCameraInputsManager.d.ts +5 -0
- package/Cameras/geospatialCameraInputsManager.js +9 -0
- package/Cameras/geospatialCameraInputsManager.js.map +1 -1
- package/Cameras/geospatialCameraMovement.d.ts +66 -0
- package/Cameras/geospatialCameraMovement.js +199 -0
- package/Cameras/geospatialCameraMovement.js.map +1 -0
- package/Cameras/targetCamera.d.ts +1 -1
- package/Cameras/targetCamera.js +2 -2
- package/Cameras/targetCamera.js.map +1 -1
- package/Decorators/nodeDecorator.d.ts +9 -7
- package/Decorators/nodeDecorator.js +9 -7
- package/Decorators/nodeDecorator.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +14 -6
- package/Engines/Native/nativeInterfaces.js +6 -1
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +2 -2
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/nativeEngine.js +2 -2
- package/Engines/nativeEngine.js.map +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphVectorMathBlocks.js +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphVectorMathBlocks.js.map +1 -1
- package/FlowGraph/flowGraphMath.d.ts +25 -0
- package/FlowGraph/flowGraphMath.js +40 -0
- package/FlowGraph/flowGraphMath.js.map +1 -0
- package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js +1 -1
- package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.js +1 -1
- package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.js +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.js +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +6 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +26 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +6 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +48 -22
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Textures/clearBlock.js +3 -3
- package/FrameGraph/Node/Blocks/Textures/clearBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js +1 -1
- package/FrameGraph/Node/Blocks/Textures/generateMipmapsBlock.js +1 -1
- package/FrameGraph/Node/Blocks/Textures/generateMipmapsBlock.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +2 -1
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Passes/{cullPass.d.ts → objectListPass.d.ts} +8 -8
- package/FrameGraph/Passes/{cullPass.js → objectListPass.js} +9 -9
- package/FrameGraph/Passes/objectListPass.js.map +1 -0
- package/FrameGraph/Passes/renderPass.d.ts +6 -2
- package/FrameGraph/Passes/renderPass.js +14 -2
- package/FrameGraph/Passes/renderPass.js.map +1 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js +2 -2
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +8 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +10 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +8 -0
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +13 -0
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.js +7 -5
- package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +10 -4
- package/FrameGraph/frameGraph.js +22 -9
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphTask.js +3 -3
- package/FrameGraph/frameGraphTask.js.map +1 -1
- package/FrameGraph/index.d.ts +1 -1
- package/FrameGraph/index.js +1 -1
- package/FrameGraph/index.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js +5 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js +6 -5
- package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +9 -0
- package/Materials/shaderMaterial.js +39 -2
- package/Materials/shaderMaterial.js.map +1 -1
- package/Maths/math.vector.functions.d.ts +5 -24
- package/Maths/math.vector.functions.js +32 -35
- package/Maths/math.vector.functions.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +51 -16
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/csg2.js +1 -1
- package/Meshes/csg2.js.map +1 -1
- package/Meshes/thinInstanceMesh.js +15 -0
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Misc/fileTools.js.map +1 -1
- package/Misc/tools.d.ts +3 -0
- package/Misc/tools.js +43 -4
- package/Misc/tools.js.map +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.d.ts +3 -1
- package/Particles/EmitterTypes/coneParticleEmitter.js +7 -1
- package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/coneShapeBlock.d.ts +9 -0
- package/Particles/Node/Blocks/Emitters/coneShapeBlock.js +43 -12
- package/Particles/Node/Blocks/Emitters/coneShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/Update/basicColorUpdateBlock.d.ts +1 -1
- package/Particles/Node/Blocks/Update/basicColorUpdateBlock.js +1 -1
- package/Particles/Node/Blocks/Update/basicColorUpdateBlock.js.map +1 -1
- package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.d.ts +1 -1
- package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js +3 -3
- package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js.map +1 -1
- package/Particles/Node/Blocks/Update/updateSizeBlock.d.ts +35 -0
- package/Particles/Node/Blocks/Update/updateSizeBlock.js +73 -0
- package/Particles/Node/Blocks/Update/updateSizeBlock.js.map +1 -0
- package/Particles/Node/Blocks/index.d.ts +1 -0
- package/Particles/Node/Blocks/index.js +1 -0
- package/Particles/Node/Blocks/index.js.map +1 -1
- package/Particles/Node/Blocks/particleInputBlock.js +2 -0
- package/Particles/Node/Blocks/particleInputBlock.js.map +1 -1
- package/Particles/Node/Blocks/particleRandomBlock.d.ts +5 -2
- package/Particles/Node/Blocks/particleRandomBlock.js +32 -14
- package/Particles/Node/Blocks/particleRandomBlock.js.map +1 -1
- package/Particles/Node/Blocks/systemBlock.d.ts +20 -12
- package/Particles/Node/Blocks/systemBlock.js +26 -22
- package/Particles/Node/Blocks/systemBlock.js.map +1 -1
- package/Particles/Node/Enums/nodeParticleContextualSources.d.ts +5 -1
- package/Particles/Node/Enums/nodeParticleContextualSources.js +4 -0
- package/Particles/Node/Enums/nodeParticleContextualSources.js.map +1 -1
- package/Particles/Node/nodeParticleBuildState.d.ts +5 -5
- package/Particles/Node/nodeParticleBuildState.js +11 -7
- package/Particles/Node/nodeParticleBuildState.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.helper.d.ts +0 -2
- package/Particles/Node/nodeParticleSystemSet.helper.js +524 -147
- package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
- package/Particles/particle.d.ts +4 -0
- package/Particles/particle.js +2 -0
- package/Particles/particle.js.map +1 -1
- package/Particles/thinParticleSystem.d.ts +3 -7
- package/Particles/thinParticleSystem.function.d.ts +1 -1
- package/Particles/thinParticleSystem.function.js +9 -6
- package/Particles/thinParticleSystem.function.js.map +1 -1
- package/Particles/thinParticleSystem.js +5 -7
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js +5 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingUboDeclaration.js +2 -1
- package/Shaders/ShadersInclude/gaussianSplattingUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +3 -3
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/gaussianSplattingDepth.vertex.js +2 -2
- package/Shaders/gaussianSplattingDepth.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +35 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingUboDeclaration.js +2 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingVertexDeclaration.js +1 -2
- package/ShadersWGSL/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -2
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
- package/XR/webXRCamera.d.ts +5 -1
- package/XR/webXRCamera.js +2 -2
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRExperienceHelper.js +1 -1
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/package.json +1 -1
- package/FrameGraph/Passes/cullPass.js.map +0 -1
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { __decorate } from "../../tslib.es6.js";
|
|
2
|
+
import { serialize } from "../../Misc/decorators.js";
|
|
3
|
+
import { BaseCameraPointersInput } from "./BaseCameraPointersInput.js";
|
|
4
|
+
/**
|
|
5
|
+
* Used by both arcrotatecamera and geospatialcamera, OrbitCameraPointersInputs handle pinchToZoom and multiTouchPanning
|
|
6
|
+
* as though you are orbiting around a target point
|
|
7
|
+
*/
|
|
8
|
+
export class OrbitCameraPointersInput extends BaseCameraPointersInput {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
/**
|
|
12
|
+
* Defines whether zoom (2 fingers pinch) is enabled through multitouch
|
|
13
|
+
*/
|
|
14
|
+
this.pinchZoom = true;
|
|
15
|
+
/**
|
|
16
|
+
* Defines whether panning (2 fingers swipe) is enabled through multitouch.
|
|
17
|
+
*/
|
|
18
|
+
this.multiTouchPanning = true;
|
|
19
|
+
/**
|
|
20
|
+
* Defines whether panning is enabled for both pan (2 fingers swipe) and
|
|
21
|
+
* zoom (pinch) through multitouch.
|
|
22
|
+
*/
|
|
23
|
+
this.multiTouchPanAndZoom = true;
|
|
24
|
+
this._isPinching = false;
|
|
25
|
+
this._twoFingerActivityCount = 0;
|
|
26
|
+
this._shouldStartPinchZoom = false;
|
|
27
|
+
}
|
|
28
|
+
_computePinchZoom(_previousPinchSquaredDistance, _pinchSquaredDistance) { }
|
|
29
|
+
_computeMultiTouchPanning(_previousMultiTouchPanPosition, _multiTouchPanPosition) { }
|
|
30
|
+
/**
|
|
31
|
+
* Called on pointer POINTERMOVE event if multiple touches are active.
|
|
32
|
+
* Override this method to provide functionality.
|
|
33
|
+
* @param _pointA First point in the pair
|
|
34
|
+
* @param _pointB Second point in the pair
|
|
35
|
+
* @param previousPinchSquaredDistance Sqr Distance between the points the last time this event was fired (by this input)
|
|
36
|
+
* @param pinchSquaredDistance Sqr Distance between the points this time
|
|
37
|
+
* @param previousMultiTouchPanPosition Previous center point between the points
|
|
38
|
+
* @param multiTouchPanPosition Current center point between the points
|
|
39
|
+
*/
|
|
40
|
+
onMultiTouch(_pointA, _pointB, previousPinchSquaredDistance, pinchSquaredDistance, previousMultiTouchPanPosition, multiTouchPanPosition) {
|
|
41
|
+
if (previousPinchSquaredDistance === 0 && previousMultiTouchPanPosition === null) {
|
|
42
|
+
// First time this method is called for new pinch.
|
|
43
|
+
// Next time this is called there will be a
|
|
44
|
+
// previousPinchSquaredDistance and pinchSquaredDistance to compare.
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (pinchSquaredDistance === 0 && multiTouchPanPosition === null) {
|
|
48
|
+
// Last time this method is called at the end of a pinch.
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Zoom and panning enabled together
|
|
52
|
+
if (this.multiTouchPanAndZoom) {
|
|
53
|
+
this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);
|
|
54
|
+
this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);
|
|
55
|
+
// Zoom and panning enabled but only one at a time
|
|
56
|
+
}
|
|
57
|
+
else if (this.multiTouchPanning && this.pinchZoom) {
|
|
58
|
+
this._twoFingerActivityCount++;
|
|
59
|
+
if (this._isPinching || this._shouldStartPinchZoom) {
|
|
60
|
+
// Since pinch has not been active long, assume we intend to zoom.
|
|
61
|
+
this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);
|
|
62
|
+
// Since we are pinching, remain pinching on next iteration.
|
|
63
|
+
this._isPinching = true;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Pause between pinch starting and moving implies not a zoom event. Pan instead.
|
|
67
|
+
this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);
|
|
68
|
+
}
|
|
69
|
+
// Panning enabled, zoom disabled
|
|
70
|
+
}
|
|
71
|
+
else if (this.multiTouchPanning) {
|
|
72
|
+
this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);
|
|
73
|
+
// Zoom enabled, panning disabled
|
|
74
|
+
}
|
|
75
|
+
else if (this.pinchZoom) {
|
|
76
|
+
this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Called each time a new POINTERUP event occurs. Ie, for each button
|
|
81
|
+
* release.
|
|
82
|
+
* @param _evt Defines the event to track
|
|
83
|
+
*/
|
|
84
|
+
onButtonUp(_evt) {
|
|
85
|
+
this._twoFingerActivityCount = 0;
|
|
86
|
+
this._isPinching = false;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Called when window becomes inactive.
|
|
90
|
+
*/
|
|
91
|
+
onLostFocus() {
|
|
92
|
+
this._twoFingerActivityCount = 0;
|
|
93
|
+
this._isPinching = false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
__decorate([
|
|
97
|
+
serialize()
|
|
98
|
+
], OrbitCameraPointersInput.prototype, "pinchZoom", void 0);
|
|
99
|
+
__decorate([
|
|
100
|
+
serialize()
|
|
101
|
+
], OrbitCameraPointersInput.prototype, "multiTouchPanning", void 0);
|
|
102
|
+
__decorate([
|
|
103
|
+
serialize()
|
|
104
|
+
], OrbitCameraPointersInput.prototype, "multiTouchPanAndZoom", void 0);
|
|
105
|
+
//# sourceMappingURL=orbitCameraPointersInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orbitCameraPointersInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/orbitCameraPointersInput.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;GAGG;AACH,MAAM,OAAgB,wBAAyB,SAAQ,uBAAuB;IAA9E;;QACI;;WAEG;QAEI,cAAS,GAAY,IAAI,CAAC;QAEjC;;WAEG;QAEI,sBAAiB,GAAY,IAAI,CAAC;QAEzC;;;WAGG;QAEI,yBAAoB,GAAY,IAAI,CAAC;QAElC,gBAAW,GAAY,KAAK,CAAC;QAC7B,4BAAuB,GAAW,CAAC,CAAC;QACpC,0BAAqB,GAAY,KAAK,CAAC;IAkFrD,CAAC;IAhFa,iBAAiB,CAAC,6BAAqC,EAAE,qBAA6B,IAAS,CAAC;IAEhG,yBAAyB,CAAC,8BAAsD,EAAE,sBAA8C,IAAS,CAAC;IAEpJ;;;;;;;;;OASG;IACa,YAAY,CACxB,OAA+B,EAC/B,OAA+B,EAC/B,4BAAoC,EACpC,oBAA4B,EAC5B,6BAAqD,EACrD,qBAA6C;QAE7C,IAAI,4BAA4B,KAAK,CAAC,IAAI,6BAA6B,KAAK,IAAI,EAAE,CAAC;YAC/E,kDAAkD;YAClD,2CAA2C;YAC3C,oEAAoE;YACpE,OAAO;QACX,CAAC;QACD,IAAI,oBAAoB,KAAK,CAAC,IAAI,qBAAqB,KAAK,IAAI,EAAE,CAAC;YAC/D,yDAAyD;YACzD,OAAO;QACX,CAAC;QAED,oCAAoC;QACpC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,CAAC,4BAA4B,EAAE,oBAAoB,CAAC,CAAC;YAC3E,IAAI,CAAC,yBAAyB,CAAC,6BAA6B,EAAE,qBAAqB,CAAC,CAAC;YAErF,kDAAkD;QACtD,CAAC;aAAM,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClD,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAE/B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBACjD,kEAAkE;gBAClE,IAAI,CAAC,iBAAiB,CAAC,4BAA4B,EAAE,oBAAoB,CAAC,CAAC;gBAE3E,4DAA4D;gBAC5D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACJ,iFAAiF;gBACjF,IAAI,CAAC,yBAAyB,CAAC,6BAA6B,EAAE,qBAAqB,CAAC,CAAC;YACzF,CAAC;YAED,iCAAiC;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAChC,IAAI,CAAC,yBAAyB,CAAC,6BAA6B,EAAE,qBAAqB,CAAC,CAAC;YAErF,iCAAiC;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,iBAAiB,CAAC,4BAA4B,EAAE,oBAAoB,CAAC,CAAC;QAC/E,CAAC;IACL,CAAC;IAED;;;;OAIG;IACa,UAAU,CAAC,IAAmB;QAC1C,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED;;OAEG;IACa,WAAW;QACvB,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;CACJ;AAnGU;IADN,SAAS,EAAE;2DACqB;AAM1B;IADN,SAAS,EAAE;mEAC6B;AAOlC;IADN,SAAS,EAAE;sEACgC","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport type { PointerTouch } from \"../../Events/pointerEvents\";\r\nimport type { IPointerEvent } from \"../../Events/deviceInputEvents\";\r\nimport { BaseCameraPointersInput } from \"./BaseCameraPointersInput\";\r\n\r\n/**\r\n * Used by both arcrotatecamera and geospatialcamera, OrbitCameraPointersInputs handle pinchToZoom and multiTouchPanning\r\n * as though you are orbiting around a target point\r\n */\r\nexport abstract class OrbitCameraPointersInput extends BaseCameraPointersInput {\r\n /**\r\n * Defines whether zoom (2 fingers pinch) is enabled through multitouch\r\n */\r\n @serialize()\r\n public pinchZoom: boolean = true;\r\n\r\n /**\r\n * Defines whether panning (2 fingers swipe) is enabled through multitouch.\r\n */\r\n @serialize()\r\n public multiTouchPanning: boolean = true;\r\n\r\n /**\r\n * Defines whether panning is enabled for both pan (2 fingers swipe) and\r\n * zoom (pinch) through multitouch.\r\n */\r\n @serialize()\r\n public multiTouchPanAndZoom: boolean = true;\r\n\r\n protected _isPinching: boolean = false;\r\n protected _twoFingerActivityCount: number = 0;\r\n protected _shouldStartPinchZoom: boolean = false;\r\n\r\n protected _computePinchZoom(_previousPinchSquaredDistance: number, _pinchSquaredDistance: number): void {}\r\n\r\n protected _computeMultiTouchPanning(_previousMultiTouchPanPosition: Nullable<PointerTouch>, _multiTouchPanPosition: Nullable<PointerTouch>): void {}\r\n\r\n /**\r\n * Called on pointer POINTERMOVE event if multiple touches are active.\r\n * Override this method to provide functionality.\r\n * @param _pointA First point in the pair\r\n * @param _pointB Second point in the pair\r\n * @param previousPinchSquaredDistance Sqr Distance between the points the last time this event was fired (by this input)\r\n * @param pinchSquaredDistance Sqr Distance between the points this time\r\n * @param previousMultiTouchPanPosition Previous center point between the points\r\n * @param multiTouchPanPosition Current center point between the points\r\n */\r\n public override onMultiTouch(\r\n _pointA: Nullable<PointerTouch>,\r\n _pointB: Nullable<PointerTouch>,\r\n previousPinchSquaredDistance: number,\r\n pinchSquaredDistance: number,\r\n previousMultiTouchPanPosition: Nullable<PointerTouch>,\r\n multiTouchPanPosition: Nullable<PointerTouch>\r\n ): void {\r\n if (previousPinchSquaredDistance === 0 && previousMultiTouchPanPosition === null) {\r\n // First time this method is called for new pinch.\r\n // Next time this is called there will be a\r\n // previousPinchSquaredDistance and pinchSquaredDistance to compare.\r\n return;\r\n }\r\n if (pinchSquaredDistance === 0 && multiTouchPanPosition === null) {\r\n // Last time this method is called at the end of a pinch.\r\n return;\r\n }\r\n\r\n // Zoom and panning enabled together\r\n if (this.multiTouchPanAndZoom) {\r\n this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);\r\n this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);\r\n\r\n // Zoom and panning enabled but only one at a time\r\n } else if (this.multiTouchPanning && this.pinchZoom) {\r\n this._twoFingerActivityCount++;\r\n\r\n if (this._isPinching || this._shouldStartPinchZoom) {\r\n // Since pinch has not been active long, assume we intend to zoom.\r\n this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);\r\n\r\n // Since we are pinching, remain pinching on next iteration.\r\n this._isPinching = true;\r\n } else {\r\n // Pause between pinch starting and moving implies not a zoom event. Pan instead.\r\n this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);\r\n }\r\n\r\n // Panning enabled, zoom disabled\r\n } else if (this.multiTouchPanning) {\r\n this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);\r\n\r\n // Zoom enabled, panning disabled\r\n } else if (this.pinchZoom) {\r\n this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);\r\n }\r\n }\r\n\r\n /**\r\n * Called each time a new POINTERUP event occurs. Ie, for each button\r\n * release.\r\n * @param _evt Defines the event to track\r\n */\r\n public override onButtonUp(_evt: IPointerEvent): void {\r\n this._twoFingerActivityCount = 0;\r\n this._isPinching = false;\r\n }\r\n\r\n /**\r\n * Called when window becomes inactive.\r\n */\r\n public override onLostFocus(): void {\r\n this._twoFingerActivityCount = 0;\r\n this._isPinching = false;\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Limits for geospatial cameras with altitude/radius synchronization
|
|
3
|
+
*/
|
|
4
|
+
export declare class GeospatialLimits {
|
|
5
|
+
private _altitudeMin;
|
|
6
|
+
private _altitudeMax;
|
|
7
|
+
private _planetRadius;
|
|
8
|
+
private _radiusMin;
|
|
9
|
+
private _radiusMax;
|
|
10
|
+
/** Gets the minimum pitch angle (angle from horizon) -- 0 means looking straight down at planet */
|
|
11
|
+
pitchMin: number;
|
|
12
|
+
/** Gets the maximum pitch angle (angle from horizon) -- Pi/1 means looking at horizon */
|
|
13
|
+
pitchMax: number;
|
|
14
|
+
/** Gets the minimum yaw angle (rotation around up axis) */
|
|
15
|
+
yawMin: number;
|
|
16
|
+
/** Gets the maximum yaw angle (rotation around up axis) */
|
|
17
|
+
yawMax: number;
|
|
18
|
+
/**
|
|
19
|
+
* Defines the distance used to consider the camera in pan mode vs pinch/zoom.
|
|
20
|
+
* Basically if your fingers moves away from more than this distance you will be considered
|
|
21
|
+
* in pinch mode.
|
|
22
|
+
*/
|
|
23
|
+
pinchToPanMax: number;
|
|
24
|
+
/**
|
|
25
|
+
* @param planetRadius The radius of the planet (used for altitude/radius conversions)
|
|
26
|
+
*/
|
|
27
|
+
constructor(planetRadius: number);
|
|
28
|
+
/**
|
|
29
|
+
* Gets the minimum altitude (height above planet surface)
|
|
30
|
+
*/
|
|
31
|
+
get altitudeMin(): number;
|
|
32
|
+
/**
|
|
33
|
+
* Sets the minimum altitude and syncs it with radius
|
|
34
|
+
*/
|
|
35
|
+
set altitudeMin(value: number);
|
|
36
|
+
/**
|
|
37
|
+
* Gets the maximum altitude (height above planet surface)
|
|
38
|
+
*/
|
|
39
|
+
get altitudeMax(): number;
|
|
40
|
+
/**
|
|
41
|
+
* Sets the maximum altitude and syncs it with radius
|
|
42
|
+
*/
|
|
43
|
+
set altitudeMax(value: number);
|
|
44
|
+
get radiusMin(): number;
|
|
45
|
+
/**
|
|
46
|
+
* Sets the minimum radius and syncs it with altitude
|
|
47
|
+
*/
|
|
48
|
+
set radiusMin(value: number);
|
|
49
|
+
get radiusMax(): number;
|
|
50
|
+
/**
|
|
51
|
+
* Sets the maximum radius and syncs it with altitude
|
|
52
|
+
*/
|
|
53
|
+
set radiusMax(value: number);
|
|
54
|
+
/**
|
|
55
|
+
* Gets the planet radius used for altitude/radius conversions
|
|
56
|
+
*/
|
|
57
|
+
get planetRadius(): number;
|
|
58
|
+
/** Sets the planet radius and updates the radius limits to maintain current altitude */
|
|
59
|
+
set planetRadius(value: number);
|
|
60
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Epsilon } from "../../Maths/math.constants.js";
|
|
2
|
+
/**
|
|
3
|
+
* Limits for geospatial cameras with altitude/radius synchronization
|
|
4
|
+
*/
|
|
5
|
+
export class GeospatialLimits {
|
|
6
|
+
/**
|
|
7
|
+
* @param planetRadius The radius of the planet (used for altitude/radius conversions)
|
|
8
|
+
*/
|
|
9
|
+
constructor(planetRadius) {
|
|
10
|
+
this._altitudeMin = Epsilon;
|
|
11
|
+
this._radiusMin = Epsilon;
|
|
12
|
+
this._radiusMax = Infinity;
|
|
13
|
+
/** Gets the minimum pitch angle (angle from horizon) -- 0 means looking straight down at planet */
|
|
14
|
+
this.pitchMin = Epsilon;
|
|
15
|
+
/** Gets the maximum pitch angle (angle from horizon) -- Pi/1 means looking at horizon */
|
|
16
|
+
this.pitchMax = Math.PI / 2;
|
|
17
|
+
/** Gets the minimum yaw angle (rotation around up axis) */
|
|
18
|
+
this.yawMin = -Infinity;
|
|
19
|
+
/** Gets the maximum yaw angle (rotation around up axis) */
|
|
20
|
+
this.yawMax = Infinity;
|
|
21
|
+
/**
|
|
22
|
+
* Defines the distance used to consider the camera in pan mode vs pinch/zoom.
|
|
23
|
+
* Basically if your fingers moves away from more than this distance you will be considered
|
|
24
|
+
* in pinch mode.
|
|
25
|
+
*/
|
|
26
|
+
this.pinchToPanMax = 20;
|
|
27
|
+
this._planetRadius = planetRadius;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Gets the minimum altitude (height above planet surface)
|
|
31
|
+
*/
|
|
32
|
+
get altitudeMin() {
|
|
33
|
+
return this._altitudeMin;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Sets the minimum altitude and syncs it with radius
|
|
37
|
+
*/
|
|
38
|
+
set altitudeMin(value) {
|
|
39
|
+
this._altitudeMin = value;
|
|
40
|
+
this._radiusMin = this._planetRadius + value;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Gets the maximum altitude (height above planet surface)
|
|
44
|
+
*/
|
|
45
|
+
get altitudeMax() {
|
|
46
|
+
return this._altitudeMax;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Sets the maximum altitude and syncs it with radius
|
|
50
|
+
*/
|
|
51
|
+
set altitudeMax(value) {
|
|
52
|
+
this._altitudeMax = value;
|
|
53
|
+
this._radiusMax = this._planetRadius + value;
|
|
54
|
+
}
|
|
55
|
+
get radiusMin() {
|
|
56
|
+
return this._radiusMin;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Sets the minimum radius and syncs it with altitude
|
|
60
|
+
*/
|
|
61
|
+
set radiusMin(value) {
|
|
62
|
+
this._radiusMin = value;
|
|
63
|
+
this._altitudeMin = value - this._planetRadius;
|
|
64
|
+
}
|
|
65
|
+
get radiusMax() {
|
|
66
|
+
return this._radiusMax;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Sets the maximum radius and syncs it with altitude
|
|
70
|
+
*/
|
|
71
|
+
set radiusMax(value) {
|
|
72
|
+
this._radiusMax = value;
|
|
73
|
+
this._altitudeMax = value - this._planetRadius;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Gets the planet radius used for altitude/radius conversions
|
|
77
|
+
*/
|
|
78
|
+
get planetRadius() {
|
|
79
|
+
return this._planetRadius;
|
|
80
|
+
}
|
|
81
|
+
/** Sets the planet radius and updates the radius limits to maintain current altitude */
|
|
82
|
+
set planetRadius(value) {
|
|
83
|
+
this._planetRadius = value;
|
|
84
|
+
// Update radius limits to maintain current altitude
|
|
85
|
+
this._radiusMin = value + this._altitudeMin;
|
|
86
|
+
this._radiusMax = value + this._altitudeMax;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=geospatialLimits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geospatialLimits.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Limits/geospatialLimits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAyBzB;;OAEG;IACH,YAAY,YAAoB;QA3BxB,iBAAY,GAAW,OAAO,CAAC;QAG/B,eAAU,GAAW,OAAO,CAAC;QAC7B,eAAU,GAAW,QAAQ,CAAC;QAEtC,mGAAmG;QAC5F,aAAQ,GAAW,OAAO,CAAC;QAElC,0FAA0F;QACnF,aAAQ,GAAW,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAEtC,2DAA2D;QACpD,WAAM,GAAW,CAAC,QAAQ,CAAC;QAElC,2DAA2D;QACpD,WAAM,GAAW,QAAQ,CAAC;QACjC;;;;WAIG;QACI,kBAAa,GAAW,EAAE,CAAC;QAM9B,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAW,WAAW,CAAC,KAAa;QAChC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAW,WAAW,CAAC,KAAa;QAChC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IACjD,CAAC;IAED,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,SAAS,CAAC,KAAa;QAC9B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;IACnD,CAAC;IAED,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,SAAS,CAAC,KAAa;QAC9B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,wFAAwF;IACxF,IAAW,YAAY,CAAC,KAAa;QACjC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,oDAAoD;QACpD,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5C,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;IAChD,CAAC;CACJ","sourcesContent":["import { Epsilon } from \"../../Maths/math.constants\";\r\n/**\r\n * Limits for geospatial cameras with altitude/radius synchronization\r\n */\r\nexport class GeospatialLimits {\r\n private _altitudeMin: number = Epsilon;\r\n private _altitudeMax: number;\r\n private _planetRadius: number;\r\n private _radiusMin: number = Epsilon;\r\n private _radiusMax: number = Infinity;\r\n\r\n /** Gets the minimum pitch angle (angle from horizon) -- 0 means looking straight down at planet */\r\n public pitchMin: number = Epsilon;\r\n\r\n /** Gets the maximum pitch angle (angle from horizon) -- Pi/1 means looking at horizon */\r\n public pitchMax: number = Math.PI / 2;\r\n\r\n /** Gets the minimum yaw angle (rotation around up axis) */\r\n public yawMin: number = -Infinity;\r\n\r\n /** Gets the maximum yaw angle (rotation around up axis) */\r\n public yawMax: number = Infinity;\r\n /**\r\n * Defines the distance used to consider the camera in pan mode vs pinch/zoom.\r\n * Basically if your fingers moves away from more than this distance you will be considered\r\n * in pinch mode.\r\n */\r\n public pinchToPanMax: number = 20;\r\n\r\n /**\r\n * @param planetRadius The radius of the planet (used for altitude/radius conversions)\r\n */\r\n constructor(planetRadius: number) {\r\n this._planetRadius = planetRadius;\r\n }\r\n\r\n /**\r\n * Gets the minimum altitude (height above planet surface)\r\n */\r\n public get altitudeMin(): number {\r\n return this._altitudeMin;\r\n }\r\n\r\n /**\r\n * Sets the minimum altitude and syncs it with radius\r\n */\r\n public set altitudeMin(value: number) {\r\n this._altitudeMin = value;\r\n this._radiusMin = this._planetRadius + value;\r\n }\r\n\r\n /**\r\n * Gets the maximum altitude (height above planet surface)\r\n */\r\n public get altitudeMax(): number {\r\n return this._altitudeMax;\r\n }\r\n\r\n /**\r\n * Sets the maximum altitude and syncs it with radius\r\n */\r\n public set altitudeMax(value: number) {\r\n this._altitudeMax = value;\r\n this._radiusMax = this._planetRadius + value;\r\n }\r\n\r\n public get radiusMin(): number {\r\n return this._radiusMin;\r\n }\r\n\r\n /**\r\n * Sets the minimum radius and syncs it with altitude\r\n */\r\n public set radiusMin(value: number) {\r\n this._radiusMin = value;\r\n this._altitudeMin = value - this._planetRadius;\r\n }\r\n\r\n public get radiusMax(): number {\r\n return this._radiusMax;\r\n }\r\n\r\n /**\r\n * Sets the maximum radius and syncs it with altitude\r\n */\r\n public set radiusMax(value: number) {\r\n this._radiusMax = value;\r\n this._altitudeMax = value - this._planetRadius;\r\n }\r\n\r\n /**\r\n * Gets the planet radius used for altitude/radius conversions\r\n */\r\n public get planetRadius(): number {\r\n return this._planetRadius;\r\n }\r\n\r\n /** Sets the planet radius and updates the radius limits to maintain current altitude */\r\n public set planetRadius(value: number) {\r\n this._planetRadius = value;\r\n // Update radius limits to maintain current altitude\r\n this._radiusMin = value + this._altitudeMin;\r\n this._radiusMax = value + this._altitudeMax;\r\n }\r\n}\r\n"]}
|
|
@@ -74,7 +74,7 @@ export class StereoscopicScreenUniversalCamera extends UniversalCamera {
|
|
|
74
74
|
cam.maxZ = this.maxZ;
|
|
75
75
|
cam.fov = this.fov;
|
|
76
76
|
cam.upVector.copyFrom(this.upVector);
|
|
77
|
-
if (cam.rotationQuaternion) {
|
|
77
|
+
if (cam.rotationQuaternion && this.rotationQuaternion) {
|
|
78
78
|
cam.rotationQuaternion.copyFrom(this.rotationQuaternion);
|
|
79
79
|
}
|
|
80
80
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stereoscopicScreenUniversalCamera.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD;;;GAGG;AACH,MAAM,OAAO,iCAAkC,SAAQ,eAAe;IAIlE,IAAW,mBAAmB,CAAC,QAAgB;QAC3C,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,yBAAyB,CAAC,QAAgB;QACjD,IAAI,CAAC,0BAA0B,GAAG,QAAQ,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,IAAW,yBAAyB;QAChC,OAAO,IAAI,CAAC,0BAA0B,CAAC;IAC3C,CAAC;IACD;;;;;;;OAOG;IACH,YAAY,IAAY,EAAE,QAAiB,EAAE,KAAa,EAAE,4BAAoC,CAAC,EAAE,sBAA8B,KAAK;QAClI,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,CAAC;QAChD,IAAI,CAAC,0BAA0B,GAAG,yBAAyB,CAAC;QAC5D,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,yCAAyC,EAAE;YACpE,eAAe,EAAE,CAAC;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,eAAe,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,GAAG,mBAAmB,CAAC;IACnE,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,6BAA6B,CAAC;IACzC,CAAC;IAED;;OAEG;IACa,eAAe,CAAC,IAAY;QACxC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,KAAK,GAAG,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACa,iBAAiB;QAC7B,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;YAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAiB,CAAC;YAC1D,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACnB,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"stereoscopicScreenUniversalCamera.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD;;;GAGG;AACH,MAAM,OAAO,iCAAkC,SAAQ,eAAe;IAIlE,IAAW,mBAAmB,CAAC,QAAgB;QAC3C,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,yBAAyB,CAAC,QAAgB;QACjD,IAAI,CAAC,0BAA0B,GAAG,QAAQ,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,IAAW,yBAAyB;QAChC,OAAO,IAAI,CAAC,0BAA0B,CAAC;IAC3C,CAAC;IACD;;;;;;;OAOG;IACH,YAAY,IAAY,EAAE,QAAiB,EAAE,KAAa,EAAE,4BAAoC,CAAC,EAAE,sBAA8B,KAAK;QAClI,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,CAAC;QAChD,IAAI,CAAC,0BAA0B,GAAG,yBAAyB,CAAC;QAC5D,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,yCAAyC,EAAE;YACpE,eAAe,EAAE,CAAC;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,eAAe,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,GAAG,mBAAmB,CAAC;IACnE,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,6BAA6B,CAAC;IACzC,CAAC;IAED;;OAEG;IACa,eAAe,CAAC,IAAY;QACxC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,KAAK,GAAG,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACa,iBAAiB;QAC7B,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;YAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAiB,CAAC;YAC1D,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACnB,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACpD,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACJ,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAiB,EAAE,WAAW,CAAC,CAAC;QACnF,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,MAAoB,EAAE,WAAmB;QAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC;QAC7C,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACtG,MAAM,SAAS,GAAG,MAAM,CAAC,MAAuB,CAAC;QACjD,MAAM,CAAC,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;QACrC,CAAC,CAAC,wBAAwB,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAEkB,WAAW;QAC1B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9D,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;YAC7E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAiB,EAAE,WAAW,CAAC,CAAC;QACnF,CAAC;IACL,CAAC;CACJ","sourcesContent":["import { Camera } from \"../../Cameras/camera\";\r\nimport { UniversalCamera } from \"../../Cameras/universalCamera\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { TargetCamera } from \"../targetCamera\";\r\nimport { TransformNode } from \"../../Meshes/transformNode\";\r\nimport { Viewport } from \"../../Maths/math.viewport\";\r\n\r\n/**\r\n * Camera used to simulate stereoscopic rendering on real screens (based on UniversalCamera)\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras\r\n */\r\nexport class StereoscopicScreenUniversalCamera extends UniversalCamera {\r\n private _distanceToProjectionPlane: number;\r\n private _distanceBetweenEyes: number;\r\n\r\n public set distanceBetweenEyes(newValue: number) {\r\n this._distanceBetweenEyes = newValue;\r\n }\r\n\r\n /**\r\n * distance between the eyes\r\n */\r\n public get distanceBetweenEyes(): number {\r\n return this._distanceBetweenEyes;\r\n }\r\n\r\n public set distanceToProjectionPlane(newValue: number) {\r\n this._distanceToProjectionPlane = newValue;\r\n }\r\n\r\n /**\r\n * Distance to projection plane (should be the same units the like distance between the eyes)\r\n */\r\n public get distanceToProjectionPlane(): number {\r\n return this._distanceToProjectionPlane;\r\n }\r\n /**\r\n * Creates a new StereoscopicScreenUniversalCamera\r\n * @param name defines camera name\r\n * @param position defines initial position\r\n * @param scene defines the hosting scene\r\n * @param distanceToProjectionPlane defines distance between each color axis. The rig cameras will receive this as their negative z position!\r\n * @param distanceBetweenEyes defines is stereoscopic is done side by side or over under\r\n */\r\n constructor(name: string, position: Vector3, scene?: Scene, distanceToProjectionPlane: number = 1, distanceBetweenEyes: number = 0.065) {\r\n super(name, position, scene);\r\n this._distanceBetweenEyes = distanceBetweenEyes;\r\n this._distanceToProjectionPlane = distanceToProjectionPlane;\r\n this.setCameraRigMode(Camera.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL, {\r\n stereoHalfAngle: 0,\r\n });\r\n this._cameraRigParams.stereoHalfAngle = 0;\r\n this._cameraRigParams.interaxialDistance = distanceBetweenEyes;\r\n }\r\n\r\n /**\r\n * Gets camera class name\r\n * @returns StereoscopicScreenUniversalCamera\r\n */\r\n public override getClassName(): string {\r\n return \"StereoscopicUniversalCamera\";\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override createRigCamera(name: string): Nullable<Camera> {\r\n const camera = new TargetCamera(name, Vector3.Zero(), this.getScene());\r\n const transform = new TransformNode(\"tm_\" + name, this.getScene());\r\n camera.parent = transform;\r\n transform.setPivotMatrix(Matrix.Identity(), false);\r\n camera.isRigCamera = true;\r\n camera.rigParent = this;\r\n return camera;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _updateRigCameras() {\r\n for (let cameraIndex = 0; cameraIndex < this._rigCameras.length; cameraIndex++) {\r\n const cam = this._rigCameras[cameraIndex] as TargetCamera;\r\n cam.minZ = this.minZ;\r\n cam.maxZ = this.maxZ;\r\n cam.fov = this.fov;\r\n cam.upVector.copyFrom(this.upVector);\r\n if (cam.rotationQuaternion && this.rotationQuaternion) {\r\n cam.rotationQuaternion.copyFrom(this.rotationQuaternion);\r\n } else {\r\n cam.rotation.copyFrom(this.rotation);\r\n }\r\n this._updateCamera(this._rigCameras[cameraIndex] as TargetCamera, cameraIndex);\r\n }\r\n }\r\n\r\n private _updateCamera(camera: TargetCamera, cameraIndex: number) {\r\n const b = this.distanceBetweenEyes / 2;\r\n const z = b / this.distanceToProjectionPlane;\r\n camera.position.copyFrom(this.position);\r\n camera.position.addInPlaceFromFloats(cameraIndex === 0 ? -b : b, 0, -this._distanceToProjectionPlane);\r\n const transform = camera.parent as TransformNode;\r\n const m = transform.getPivotMatrix();\r\n m.setTranslationFromFloats(cameraIndex === 0 ? b : -b, 0, 0);\r\n m.setRowFromFloats(2, cameraIndex === 0 ? z : -z, 0, 1, 0);\r\n transform.setPivotMatrix(m, false);\r\n }\r\n\r\n protected override _setRigMode() {\r\n this._rigCameras[0].viewport = new Viewport(0, 0, 0.5, 1);\r\n this._rigCameras[1].viewport = new Viewport(0.5, 0, 0.5, 1.0);\r\n for (let cameraIndex = 0; cameraIndex < this._rigCameras.length; cameraIndex++) {\r\n this._updateCamera(this._rigCameras[cameraIndex] as TargetCamera, cameraIndex);\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -430,10 +430,10 @@ export class VRExperienceHelper {
|
|
|
430
430
|
if (this._scene.activeCamera instanceof TargetCamera && this._scene.activeCamera.rotation) {
|
|
431
431
|
const targetCamera = this._scene.activeCamera;
|
|
432
432
|
if (targetCamera.rotationQuaternion) {
|
|
433
|
-
this._deviceOrientationCamera.rotationQuaternion
|
|
433
|
+
this._deviceOrientationCamera.rotationQuaternion?.copyFrom(targetCamera.rotationQuaternion);
|
|
434
434
|
}
|
|
435
435
|
else {
|
|
436
|
-
this._deviceOrientationCamera.rotationQuaternion
|
|
436
|
+
this._deviceOrientationCamera.rotationQuaternion?.copyFrom(Quaternion.RotationYawPitchRoll(targetCamera.rotation.y, targetCamera.rotation.x, targetCamera.rotation.z));
|
|
437
437
|
}
|
|
438
438
|
this._deviceOrientationCamera.rotation = targetCamera.rotation.clone();
|
|
439
439
|
}
|