@babylonjs/core 5.50.1 → 5.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.d.ts +8 -0
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +28 -2
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/freeCamera.d.ts +10 -0
- package/Cameras/freeCamera.js +32 -0
- package/Cameras/freeCamera.js.map +1 -1
- package/Cameras/targetCamera.js +4 -1
- package/Cameras/targetCamera.js.map +1 -1
- package/Engines/engineCapabilities.d.ts +2 -0
- package/Engines/engineCapabilities.js.map +1 -1
- package/Engines/nativeEngine.js +1 -0
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.js +3 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +1 -0
- package/Engines/webgpuEngine.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +6 -3
- package/Inputs/scene.inputManager.js +67 -12
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Meshes/mesh.js +2 -2
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +4 -1
- package/Meshes/mesh.vertexData.js +21 -17
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Misc/decorators.d.ts +8 -0
- package/Misc/decorators.js +22 -12
- package/Misc/decorators.js.map +1 -1
- package/Misc/khronosTextureContainer.js +4 -0
- package/Misc/khronosTextureContainer.js.map +1 -1
- package/Misc/sceneRecorder.js +3 -0
- package/Misc/sceneRecorder.js.map +1 -1
- package/Morph/morphTargetManager.js +7 -1
- package/Morph/morphTargetManager.js.map +1 -1
- package/Physics/v2/physicsBody.d.ts +2 -1
- package/Physics/v2/physicsBody.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +3 -5
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.d.ts +65 -13
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +218 -80
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
- package/Rendering/geometryBufferRenderer.d.ts +8 -2
- package/Rendering/geometryBufferRenderer.js +32 -10
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.d.ts +18 -2
- package/Rendering/prePassRenderer.js +72 -26
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/screenSpaceRayTrace.js +3 -3
- package/Shaders/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
- package/Shaders/geometry.fragment.js +2 -2
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/screenSpaceReflection2.fragment.js +20 -10
- package/Shaders/screenSpaceReflection2.fragment.js.map +1 -1
- package/Shaders/screenSpaceReflection2Blur.fragment.js +1 -1
- package/Shaders/screenSpaceReflection2Blur.fragment.js.map +1 -1
- package/Shaders/screenSpaceReflection2BlurCombiner.fragment.js +9 -2
- package/Shaders/screenSpaceReflection2BlurCombiner.fragment.js.map +1 -1
- package/assetContainer.js +4 -0
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
|
@@ -45,6 +45,14 @@ export declare class FreeCameraKeyboardMoveInput implements ICameraInput<FreeCam
|
|
|
45
45
|
* Gets or Set the list of keyboard keys used to control the right rotation move of the camera.
|
|
46
46
|
*/
|
|
47
47
|
keysRotateRight: number[];
|
|
48
|
+
/**
|
|
49
|
+
* Gets or Set the list of keyboard keys used to control the up rotation move of the camera.
|
|
50
|
+
*/
|
|
51
|
+
keysRotateUp: number[];
|
|
52
|
+
/**
|
|
53
|
+
* Gets or Set the list of keyboard keys used to control the down rotation move of the camera.
|
|
54
|
+
*/
|
|
55
|
+
keysRotateDown: number[];
|
|
48
56
|
private _keys;
|
|
49
57
|
private _onCanvasBlurObserver;
|
|
50
58
|
private _onKeyboardObserver;
|
|
@@ -46,6 +46,14 @@ export class FreeCameraKeyboardMoveInput {
|
|
|
46
46
|
* Gets or Set the list of keyboard keys used to control the right rotation move of the camera.
|
|
47
47
|
*/
|
|
48
48
|
this.keysRotateRight = [];
|
|
49
|
+
/**
|
|
50
|
+
* Gets or Set the list of keyboard keys used to control the up rotation move of the camera.
|
|
51
|
+
*/
|
|
52
|
+
this.keysRotateUp = [];
|
|
53
|
+
/**
|
|
54
|
+
* Gets or Set the list of keyboard keys used to control the down rotation move of the camera.
|
|
55
|
+
*/
|
|
56
|
+
this.keysRotateDown = [];
|
|
49
57
|
this._keys = new Array();
|
|
50
58
|
}
|
|
51
59
|
/**
|
|
@@ -74,7 +82,9 @@ export class FreeCameraKeyboardMoveInput {
|
|
|
74
82
|
this.keysUpward.indexOf(evt.keyCode) !== -1 ||
|
|
75
83
|
this.keysDownward.indexOf(evt.keyCode) !== -1 ||
|
|
76
84
|
this.keysRotateLeft.indexOf(evt.keyCode) !== -1 ||
|
|
77
|
-
this.keysRotateRight.indexOf(evt.keyCode) !== -1
|
|
85
|
+
this.keysRotateRight.indexOf(evt.keyCode) !== -1 ||
|
|
86
|
+
this.keysRotateUp.indexOf(evt.keyCode) !== -1 ||
|
|
87
|
+
this.keysRotateDown.indexOf(evt.keyCode) !== -1) {
|
|
78
88
|
const index = this._keys.indexOf(evt.keyCode);
|
|
79
89
|
if (index === -1) {
|
|
80
90
|
this._keys.push(evt.keyCode);
|
|
@@ -92,7 +102,9 @@ export class FreeCameraKeyboardMoveInput {
|
|
|
92
102
|
this.keysUpward.indexOf(evt.keyCode) !== -1 ||
|
|
93
103
|
this.keysDownward.indexOf(evt.keyCode) !== -1 ||
|
|
94
104
|
this.keysRotateLeft.indexOf(evt.keyCode) !== -1 ||
|
|
95
|
-
this.keysRotateRight.indexOf(evt.keyCode) !== -1
|
|
105
|
+
this.keysRotateRight.indexOf(evt.keyCode) !== -1 ||
|
|
106
|
+
this.keysRotateUp.indexOf(evt.keyCode) !== -1 ||
|
|
107
|
+
this.keysRotateDown.indexOf(evt.keyCode) !== -1) {
|
|
96
108
|
const index = this._keys.indexOf(evt.keyCode);
|
|
97
109
|
if (index >= 0) {
|
|
98
110
|
this._keys.splice(index, 1);
|
|
@@ -158,6 +170,14 @@ export class FreeCameraKeyboardMoveInput {
|
|
|
158
170
|
camera._localDirection.copyFromFloats(0, 0, 0);
|
|
159
171
|
camera.cameraRotation.y += this._getLocalRotation();
|
|
160
172
|
}
|
|
173
|
+
else if (this.keysRotateUp.indexOf(keyCode) !== -1) {
|
|
174
|
+
camera._localDirection.copyFromFloats(0, 0, 0);
|
|
175
|
+
camera.cameraRotation.x -= this._getLocalRotation();
|
|
176
|
+
}
|
|
177
|
+
else if (this.keysRotateDown.indexOf(keyCode) !== -1) {
|
|
178
|
+
camera._localDirection.copyFromFloats(0, 0, 0);
|
|
179
|
+
camera.cameraRotation.x += this._getLocalRotation();
|
|
180
|
+
}
|
|
161
181
|
if (camera.getScene().useRightHandedSystem) {
|
|
162
182
|
camera._localDirection.z *= -1;
|
|
163
183
|
}
|
|
@@ -223,5 +243,11 @@ __decorate([
|
|
|
223
243
|
__decorate([
|
|
224
244
|
serialize()
|
|
225
245
|
], FreeCameraKeyboardMoveInput.prototype, "keysRotateRight", void 0);
|
|
246
|
+
__decorate([
|
|
247
|
+
serialize()
|
|
248
|
+
], FreeCameraKeyboardMoveInput.prototype, "keysRotateUp", void 0);
|
|
249
|
+
__decorate([
|
|
250
|
+
serialize()
|
|
251
|
+
], FreeCameraKeyboardMoveInput.prototype, "keysRotateDown", void 0);
|
|
226
252
|
CameraInputTypes["FreeCameraKeyboardMoveInput"] = FreeCameraKeyboardMoveInput;
|
|
227
253
|
//# sourceMappingURL=freeCameraKeyboardMoveInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freeCameraKeyboardMoveInput.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Cameras/Inputs/freeCameraKeyboardMoveInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { serialize } from \"../../Misc/decorators\";\r\nimport type { Observer } from \"../../Misc/observable\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { ICameraInput } from \"../../Cameras/cameraInputsManager\";\r\nimport { CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport type { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport type { KeyboardInfo } from \"../../Events/keyboardEvents\";\r\nimport { KeyboardEventTypes } from \"../../Events/keyboardEvents\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport type { Engine } from \"../../Engines/engine\";\r\nimport { Tools } from \"../../Misc/tools\";\r\n/**\r\n * Manage the keyboard inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class FreeCameraKeyboardMoveInput implements ICameraInput<FreeCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the forward move of the camera.\r\n */\r\n @serialize()\r\n public keysUp = [38];\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the upward move of the camera.\r\n */\r\n @serialize()\r\n public keysUpward = [33];\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the backward move of the camera.\r\n */\r\n @serialize()\r\n public keysDown = [40];\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the downward move of the camera.\r\n */\r\n @serialize()\r\n public keysDownward = [34];\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the left strafe move of the camera.\r\n */\r\n @serialize()\r\n public keysLeft = [37];\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the right strafe move of the camera.\r\n */\r\n @serialize()\r\n public keysRight = [39];\r\n\r\n /**\r\n * Defines the pointer angular sensibility along the X and Y axis or how fast is the camera rotating.\r\n */\r\n @serialize()\r\n public rotationSpeed = 0.5;\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the left rotation move of the camera.\r\n */\r\n @serialize()\r\n public keysRotateLeft: number[] = [];\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the right rotation move of the camera.\r\n */\r\n @serialize()\r\n public keysRotateRight: number[] = [];\r\n\r\n private _keys = new Array<number>();\r\n private _onCanvasBlurObserver: Nullable<Observer<Engine>>;\r\n private _onKeyboardObserver: Nullable<Observer<KeyboardInfo>>;\r\n private _engine: Engine;\r\n private _scene: Scene;\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\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 if (this._onCanvasBlurObserver) {\r\n return;\r\n }\r\n\r\n this._scene = this.camera.getScene();\r\n this._engine = this._scene.getEngine();\r\n\r\n this._onCanvasBlurObserver = this._engine.onCanvasBlurObservable.add(() => {\r\n this._keys.length = 0;\r\n });\r\n\r\n this._onKeyboardObserver = this._scene.onKeyboardObservable.add((info) => {\r\n const evt = info.event;\r\n if (!evt.metaKey) {\r\n if (info.type === KeyboardEventTypes.KEYDOWN) {\r\n if (\r\n this.keysUp.indexOf(evt.keyCode) !== -1 ||\r\n this.keysDown.indexOf(evt.keyCode) !== -1 ||\r\n this.keysLeft.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRight.indexOf(evt.keyCode) !== -1 ||\r\n this.keysUpward.indexOf(evt.keyCode) !== -1 ||\r\n this.keysDownward.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRotateLeft.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRotateRight.indexOf(evt.keyCode) !== -1\r\n ) {\r\n const index = this._keys.indexOf(evt.keyCode);\r\n\r\n if (index === -1) {\r\n this._keys.push(evt.keyCode);\r\n }\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n }\r\n } else {\r\n if (\r\n this.keysUp.indexOf(evt.keyCode) !== -1 ||\r\n this.keysDown.indexOf(evt.keyCode) !== -1 ||\r\n this.keysLeft.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRight.indexOf(evt.keyCode) !== -1 ||\r\n this.keysUpward.indexOf(evt.keyCode) !== -1 ||\r\n this.keysDownward.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRotateLeft.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRotateRight.indexOf(evt.keyCode) !== -1\r\n ) {\r\n const index = this._keys.indexOf(evt.keyCode);\r\n\r\n if (index >= 0) {\r\n this._keys.splice(index, 1);\r\n }\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n }\r\n }\r\n }\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 if (this._scene) {\r\n if (this._onKeyboardObserver) {\r\n this._scene.onKeyboardObservable.remove(this._onKeyboardObserver);\r\n }\r\n\r\n if (this._onCanvasBlurObserver) {\r\n this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver);\r\n }\r\n this._onKeyboardObserver = null;\r\n this._onCanvasBlurObserver = null;\r\n }\r\n this._keys.length = 0;\r\n }\r\n\r\n /**\r\n * Update the current camera state depending on the inputs that have been used this frame.\r\n * This is a dynamically created lambda to avoid the performance penalty of looping for inputs in the render loop.\r\n */\r\n public checkInputs(): void {\r\n if (this._onKeyboardObserver) {\r\n const camera = this.camera;\r\n // Keyboard\r\n for (let index = 0; index < this._keys.length; index++) {\r\n const keyCode = this._keys[index];\r\n const speed = camera._computeLocalCameraSpeed();\r\n\r\n if (this.keysLeft.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(-speed, 0, 0);\r\n } else if (this.keysUp.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(0, 0, speed);\r\n } else if (this.keysRight.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(speed, 0, 0);\r\n } else if (this.keysDown.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(0, 0, -speed);\r\n } else if (this.keysUpward.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(0, speed, 0);\r\n } else if (this.keysDownward.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(0, -speed, 0);\r\n } else if (this.keysRotateLeft.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(0, 0, 0);\r\n camera.cameraRotation.y -= this._getLocalRotation();\r\n } else if (this.keysRotateRight.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(0, 0, 0);\r\n camera.cameraRotation.y += this._getLocalRotation();\r\n }\r\n\r\n if (camera.getScene().useRightHandedSystem) {\r\n camera._localDirection.z *= -1;\r\n }\r\n\r\n camera.getViewMatrix().invertToRef(camera._cameraTransformMatrix);\r\n Vector3.TransformNormalToRef(camera._localDirection, camera._cameraTransformMatrix, camera._transformedDirection);\r\n camera.cameraDirection.addInPlace(camera._transformedDirection);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCameraKeyboardMoveInput\";\r\n }\r\n\r\n /** @internal */\r\n public _onLostFocus(): void {\r\n this._keys.length = 0;\r\n }\r\n\r\n /**\r\n * Get the friendly name associated with the input class.\r\n * @returns the input friendly name\r\n */\r\n public getSimpleName(): string {\r\n return \"keyboard\";\r\n }\r\n\r\n private _getLocalRotation(): number {\r\n let rotation = (this.rotationSpeed * this._engine.getDeltaTime()) / 1000;\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n rotation *= -1;\r\n }\r\n if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) {\r\n rotation *= -1;\r\n }\r\n return rotation;\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraKeyboardMoveInput\"] = FreeCameraKeyboardMoveInput;\r\n"]}
|
|
1
|
+
{"version":3,"file":"freeCameraKeyboardMoveInput.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Cameras/Inputs/freeCameraKeyboardMoveInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { serialize } from \"../../Misc/decorators\";\r\nimport type { Observer } from \"../../Misc/observable\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { ICameraInput } from \"../../Cameras/cameraInputsManager\";\r\nimport { CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport type { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport type { KeyboardInfo } from \"../../Events/keyboardEvents\";\r\nimport { KeyboardEventTypes } from \"../../Events/keyboardEvents\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport type { Engine } from \"../../Engines/engine\";\r\nimport { Tools } from \"../../Misc/tools\";\r\n/**\r\n * Manage the keyboard inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class FreeCameraKeyboardMoveInput implements ICameraInput<FreeCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the forward move of the camera.\r\n */\r\n @serialize()\r\n public keysUp = [38];\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the upward move of the camera.\r\n */\r\n @serialize()\r\n public keysUpward = [33];\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the backward move of the camera.\r\n */\r\n @serialize()\r\n public keysDown = [40];\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the downward move of the camera.\r\n */\r\n @serialize()\r\n public keysDownward = [34];\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the left strafe move of the camera.\r\n */\r\n @serialize()\r\n public keysLeft = [37];\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the right strafe move of the camera.\r\n */\r\n @serialize()\r\n public keysRight = [39];\r\n\r\n /**\r\n * Defines the pointer angular sensibility along the X and Y axis or how fast is the camera rotating.\r\n */\r\n @serialize()\r\n public rotationSpeed = 0.5;\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the left rotation move of the camera.\r\n */\r\n @serialize()\r\n public keysRotateLeft: number[] = [];\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the right rotation move of the camera.\r\n */\r\n @serialize()\r\n public keysRotateRight: number[] = [];\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the up rotation move of the camera.\r\n */\r\n @serialize()\r\n public keysRotateUp: number[] = [];\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the down rotation move of the camera.\r\n */\r\n @serialize()\r\n public keysRotateDown: number[] = [];\r\n\r\n private _keys = new Array<number>();\r\n private _onCanvasBlurObserver: Nullable<Observer<Engine>>;\r\n private _onKeyboardObserver: Nullable<Observer<KeyboardInfo>>;\r\n private _engine: Engine;\r\n private _scene: Scene;\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\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 if (this._onCanvasBlurObserver) {\r\n return;\r\n }\r\n\r\n this._scene = this.camera.getScene();\r\n this._engine = this._scene.getEngine();\r\n\r\n this._onCanvasBlurObserver = this._engine.onCanvasBlurObservable.add(() => {\r\n this._keys.length = 0;\r\n });\r\n\r\n this._onKeyboardObserver = this._scene.onKeyboardObservable.add((info) => {\r\n const evt = info.event;\r\n if (!evt.metaKey) {\r\n if (info.type === KeyboardEventTypes.KEYDOWN) {\r\n if (\r\n this.keysUp.indexOf(evt.keyCode) !== -1 ||\r\n this.keysDown.indexOf(evt.keyCode) !== -1 ||\r\n this.keysLeft.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRight.indexOf(evt.keyCode) !== -1 ||\r\n this.keysUpward.indexOf(evt.keyCode) !== -1 ||\r\n this.keysDownward.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRotateLeft.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRotateRight.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRotateUp.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRotateDown.indexOf(evt.keyCode) !== -1\r\n ) {\r\n const index = this._keys.indexOf(evt.keyCode);\r\n\r\n if (index === -1) {\r\n this._keys.push(evt.keyCode);\r\n }\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n }\r\n } else {\r\n if (\r\n this.keysUp.indexOf(evt.keyCode) !== -1 ||\r\n this.keysDown.indexOf(evt.keyCode) !== -1 ||\r\n this.keysLeft.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRight.indexOf(evt.keyCode) !== -1 ||\r\n this.keysUpward.indexOf(evt.keyCode) !== -1 ||\r\n this.keysDownward.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRotateLeft.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRotateRight.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRotateUp.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRotateDown.indexOf(evt.keyCode) !== -1\r\n ) {\r\n const index = this._keys.indexOf(evt.keyCode);\r\n\r\n if (index >= 0) {\r\n this._keys.splice(index, 1);\r\n }\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n }\r\n }\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 if (this._scene) {\r\n if (this._onKeyboardObserver) {\r\n this._scene.onKeyboardObservable.remove(this._onKeyboardObserver);\r\n }\r\n\r\n if (this._onCanvasBlurObserver) {\r\n this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver);\r\n }\r\n this._onKeyboardObserver = null;\r\n this._onCanvasBlurObserver = null;\r\n }\r\n this._keys.length = 0;\r\n }\r\n\r\n /**\r\n * Update the current camera state depending on the inputs that have been used this frame.\r\n * This is a dynamically created lambda to avoid the performance penalty of looping for inputs in the render loop.\r\n */\r\n public checkInputs(): void {\r\n if (this._onKeyboardObserver) {\r\n const camera = this.camera;\r\n // Keyboard\r\n for (let index = 0; index < this._keys.length; index++) {\r\n const keyCode = this._keys[index];\r\n const speed = camera._computeLocalCameraSpeed();\r\n\r\n if (this.keysLeft.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(-speed, 0, 0);\r\n } else if (this.keysUp.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(0, 0, speed);\r\n } else if (this.keysRight.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(speed, 0, 0);\r\n } else if (this.keysDown.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(0, 0, -speed);\r\n } else if (this.keysUpward.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(0, speed, 0);\r\n } else if (this.keysDownward.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(0, -speed, 0);\r\n } else if (this.keysRotateLeft.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(0, 0, 0);\r\n camera.cameraRotation.y -= this._getLocalRotation();\r\n } else if (this.keysRotateRight.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(0, 0, 0);\r\n camera.cameraRotation.y += this._getLocalRotation();\r\n } else if (this.keysRotateUp.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(0, 0, 0);\r\n camera.cameraRotation.x -= this._getLocalRotation();\r\n } else if (this.keysRotateDown.indexOf(keyCode) !== -1) {\r\n camera._localDirection.copyFromFloats(0, 0, 0);\r\n camera.cameraRotation.x += this._getLocalRotation();\r\n }\r\n\r\n if (camera.getScene().useRightHandedSystem) {\r\n camera._localDirection.z *= -1;\r\n }\r\n\r\n camera.getViewMatrix().invertToRef(camera._cameraTransformMatrix);\r\n Vector3.TransformNormalToRef(camera._localDirection, camera._cameraTransformMatrix, camera._transformedDirection);\r\n camera.cameraDirection.addInPlace(camera._transformedDirection);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCameraKeyboardMoveInput\";\r\n }\r\n\r\n /** @internal */\r\n public _onLostFocus(): void {\r\n this._keys.length = 0;\r\n }\r\n\r\n /**\r\n * Get the friendly name associated with the input class.\r\n * @returns the input friendly name\r\n */\r\n public getSimpleName(): string {\r\n return \"keyboard\";\r\n }\r\n\r\n private _getLocalRotation(): number {\r\n let rotation = (this.rotationSpeed * this._engine.getDeltaTime()) / 1000;\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n rotation *= -1;\r\n }\r\n if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) {\r\n rotation *= -1;\r\n }\r\n return rotation;\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraKeyboardMoveInput\"] = FreeCameraKeyboardMoveInput;\r\n"]}
|
package/Cameras/freeCamera.d.ts
CHANGED
|
@@ -83,6 +83,16 @@ export declare class FreeCamera extends TargetCamera {
|
|
|
83
83
|
*/
|
|
84
84
|
get keysRotateRight(): number[];
|
|
85
85
|
set keysRotateRight(value: number[]);
|
|
86
|
+
/**
|
|
87
|
+
* Gets or Set the list of keyboard keys used to control the up rotation move of the camera.
|
|
88
|
+
*/
|
|
89
|
+
get keysRotateUp(): number[];
|
|
90
|
+
set keysRotateUp(value: number[]);
|
|
91
|
+
/**
|
|
92
|
+
* Gets or Set the list of keyboard keys used to control the down rotation move of the camera.
|
|
93
|
+
*/
|
|
94
|
+
get keysRotateDown(): number[];
|
|
95
|
+
set keysRotateDown(value: number[]);
|
|
86
96
|
/**
|
|
87
97
|
* Event raised when the camera collide with a mesh in the scene.
|
|
88
98
|
*/
|
package/Cameras/freeCamera.js
CHANGED
|
@@ -160,6 +160,38 @@ export class FreeCamera extends TargetCamera {
|
|
|
160
160
|
keyboard.keysRotateRight = value;
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
|
+
/**
|
|
164
|
+
* Gets or Set the list of keyboard keys used to control the up rotation move of the camera.
|
|
165
|
+
*/
|
|
166
|
+
get keysRotateUp() {
|
|
167
|
+
const keyboard = this.inputs.attached["keyboard"];
|
|
168
|
+
if (keyboard) {
|
|
169
|
+
return keyboard.keysRotateUp;
|
|
170
|
+
}
|
|
171
|
+
return [];
|
|
172
|
+
}
|
|
173
|
+
set keysRotateUp(value) {
|
|
174
|
+
const keyboard = this.inputs.attached["keyboard"];
|
|
175
|
+
if (keyboard) {
|
|
176
|
+
keyboard.keysRotateUp = value;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Gets or Set the list of keyboard keys used to control the down rotation move of the camera.
|
|
181
|
+
*/
|
|
182
|
+
get keysRotateDown() {
|
|
183
|
+
const keyboard = this.inputs.attached["keyboard"];
|
|
184
|
+
if (keyboard) {
|
|
185
|
+
return keyboard.keysRotateDown;
|
|
186
|
+
}
|
|
187
|
+
return [];
|
|
188
|
+
}
|
|
189
|
+
set keysRotateDown(value) {
|
|
190
|
+
const keyboard = this.inputs.attached["keyboard"];
|
|
191
|
+
if (keyboard) {
|
|
192
|
+
keyboard.keysRotateDown = value;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
163
195
|
/**
|
|
164
196
|
* Instantiates a Free Camera.
|
|
165
197
|
* This represents a free type of camera. It can be useful in First Person Shooter game for instance.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freeCamera.js","sourceRoot":"","sources":["../../../../lts/core/generated/Cameras/freeCamera.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAItC;;;;GAIG;AACH,MAAM,OAAO,UAAW,SAAQ,YAAY;IAkCxC;;;OAGG;IACH,IAAW,kBAAkB;QACzB,MAAM,KAAK,GAAyB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClE,IAAI,KAAK,EAAE;YACP,OAAO,KAAK,CAAC,kBAAkB,CAAC;SACnC;QAED,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,IAAW,kBAAkB,CAAC,KAAa;QACvC,MAAM,KAAK,GAAyB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClE,IAAI,KAAK,EAAE;YACP,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC;SACpC;IACL,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,OAAO,QAAQ,CAAC,MAAM,CAAC;SAC1B;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAW,MAAM,CAAC,KAAe;QAC7B,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC;SAC3B;IACL,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACjB,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,OAAO,QAAQ,CAAC,UAAU,CAAC;SAC9B;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAW,UAAU,CAAC,KAAe;QACjC,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC;SAC/B;IACL,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,OAAO,QAAQ,CAAC,QAAQ,CAAC;SAC5B;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAW,QAAQ,CAAC,KAAe;QAC/B,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;SAC7B;IACL,CAAC;IAED;;OAEG;IACH,IAAW,YAAY;QACnB,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,OAAO,QAAQ,CAAC,YAAY,CAAC;SAChC;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAW,YAAY,CAAC,KAAe;QACnC,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC;SACjC;IACL,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,OAAO,QAAQ,CAAC,QAAQ,CAAC;SAC5B;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAW,QAAQ,CAAC,KAAe;QAC/B,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;SAC7B;IACL,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,OAAO,QAAQ,CAAC,SAAS,CAAC;SAC7B;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAW,SAAS,CAAC,KAAe;QAChC,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;SAC9B;IACL,CAAC;IAED;;OAEG;IACH,IAAW,cAAc;QACrB,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,OAAO,QAAQ,CAAC,cAAc,CAAC;SAClC;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAW,cAAc,CAAC,KAAe;QACrC,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,cAAc,GAAG,KAAK,CAAC;SACnC;IACL,CAAC;IAED;;OAEG;IACH,IAAW,eAAe;QACtB,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,OAAO,QAAQ,CAAC,eAAe,CAAC;SACnC;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAW,eAAe,CAAC,KAAe;QACtC,MAAM,QAAQ,GAAgC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,eAAe,GAAG,KAAK,CAAC;SACpC;IACL,CAAC;IAkBD;;;;;;;;;OASG;IACH,YAAY,IAAY,EAAE,QAAiB,EAAE,KAAa,EAAE,4BAA4B,GAAG,IAAI;QAC3F,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,4BAA4B,CAAC,CAAC;QA5O/D;;;;WAIG;QAEI,cAAS,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAE5C;;;;WAIG;QAEI,oBAAe,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9C;;WAEG;QAEI,oBAAe,GAAG,KAAK,CAAC;QAE/B;;WAEG;QAEI,iBAAY,GAAG,KAAK,CAAC;QA6LpB,wBAAmB,GAAG,KAAK,CAAC;QAC5B,iBAAY,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC9B,kBAAa,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,iBAAY,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAwDtC,aAAa;QACL,mBAAc,GAAG,CAAC,CAAC,CAAC;QAgDpB,+BAA0B,GAAG,CAAC,WAAmB,EAAE,WAAoB,EAAE,eAAuC,IAAI,EAAE,EAAE;YAC5H,MAAM,cAAc,GAAG,CAAC,MAAe,EAAE,EAAE;gBACvC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAEnC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBAEvE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,iBAAiB,EAAE;oBACxD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC7C,IAAI,IAAI,CAAC,SAAS,IAAI,YAAY,EAAE;wBAChC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;qBAChC;iBACJ;YACL,CAAC,CAAC;YAEF,cAAc,CAAC,WAAW,CAAC,CAAC;QAChC,CAAC,CAAC;QArGE,IAAI,CAAC,MAAM,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC;IACzC,CAAC;IAcD;;;;OAIG;IACI,aAAa,CAAC,OAAa,EAAE,gBAA0B;QAC1D,8CAA8C;QAC9C,gBAAgB,GAAG,KAAK,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACI,aAAa;QAChB,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAE5B,IAAI,CAAC,eAAe,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAKD;;OAEG;IACH,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,IAAW,aAAa,CAAC,IAAY;QACjC,IAAI,CAAC,cAAc,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACI,iBAAiB,CAAC,YAAqB;QAC1C,IAAI,cAAuB,CAAC;QAE5B,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;SAC9F;aAAM;YACH,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;SAClC;QAED,cAAc,CAAC,uBAAuB,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAClF,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAEnD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,oBAAoB,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,cAAc,EAAE,CAAC;SACjD;QAED,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAEnD,kDAAkD;QAClD,IAAI,kBAAkB,GAAG,YAAY,CAAC;QAEtC,qEAAqE;QACrE,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,yFAAyF;YACzF,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;SAClE;QAED,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,kBAAkB,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/I,CAAC;IAmBD,gBAAgB;IACT,YAAY;QACf,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;SAC/C;QAED,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAE1B,KAAK,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAED,gBAAgB;IACT,oBAAoB;QACvB,OAAO,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5J,CAAC;IAED,gBAAgB;IACT,eAAe;QAClB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,iBAAiB,EAAE;YAC3D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAChD;aAAM;YACH,KAAK,CAAC,eAAe,EAAE,CAAC;SAC3B;IACL,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,KAAK,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC;IAED;;;OAGG;IACI,YAAY;QACf,OAAO,YAAY,CAAC;IACxB,CAAC;CACJ;AAvXG;IADC,kBAAkB,EAAE;6CACuB;AAQ5C;IADC,kBAAkB,EAAE;mDACyB;AAM9C;IADC,SAAS,EAAE;mDACmB;AAM/B;IADC,SAAS,EAAE;gDACgB","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { serializeAsVector3, serialize } from \"../Misc/decorators\";\r\nimport { Vector3, Vector2 } from \"../Maths/math.vector\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { TargetCamera } from \"./targetCamera\";\r\nimport { FreeCameraInputsManager } from \"./freeCameraInputsManager\";\r\nimport type { FreeCameraMouseInput } from \"../Cameras/Inputs/freeCameraMouseInput\";\r\nimport type { FreeCameraKeyboardMoveInput } from \"../Cameras/Inputs/freeCameraKeyboardMoveInput\";\r\nimport { Tools } from \"../Misc/tools\";\r\n\r\ndeclare type Collider = import(\"../Collisions/collider\").Collider;\r\n\r\n/**\r\n * This represents a free type of camera. It can be useful in First Person Shooter game for instance.\r\n * Please consider using the new UniversalCamera instead as it adds more functionality like the gamepad.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_introduction#universal-camera\r\n */\r\nexport class FreeCamera extends TargetCamera {\r\n /**\r\n * Define the collision ellipsoid of the camera.\r\n * This is helpful to simulate a camera body like the player body around the camera\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_collisions#arcrotatecamera\r\n */\r\n @serializeAsVector3()\r\n public ellipsoid = new Vector3(0.5, 1, 0.5);\r\n\r\n /**\r\n * Define an offset for the position of the ellipsoid around the camera.\r\n * This can be helpful to determine the center of the body near the gravity center of the body\r\n * instead of its head.\r\n */\r\n @serializeAsVector3()\r\n public ellipsoidOffset = new Vector3(0, 0, 0);\r\n\r\n /**\r\n * Enable or disable collisions of the camera with the rest of the scene objects.\r\n */\r\n @serialize()\r\n public checkCollisions = false;\r\n\r\n /**\r\n * Enable or disable gravity on the camera.\r\n */\r\n @serialize()\r\n public applyGravity = false;\r\n\r\n /**\r\n * Define the input manager associated to the camera.\r\n */\r\n public inputs: FreeCameraInputsManager;\r\n\r\n /**\r\n * Gets the input sensibility for a mouse input. (default is 2000.0)\r\n * Higher values reduce sensitivity.\r\n */\r\n public get angularSensibility(): number {\r\n const mouse = <FreeCameraMouseInput>this.inputs.attached[\"mouse\"];\r\n if (mouse) {\r\n return mouse.angularSensibility;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n /**\r\n * Sets the input sensibility for a mouse input. (default is 2000.0)\r\n * Higher values reduce sensitivity.\r\n */\r\n public set angularSensibility(value: number) {\r\n const mouse = <FreeCameraMouseInput>this.inputs.attached[\"mouse\"];\r\n if (mouse) {\r\n mouse.angularSensibility = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the forward move of the camera.\r\n */\r\n public get keysUp(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysUp;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysUp(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysUp = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the upward move of the camera.\r\n */\r\n public get keysUpward(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysUpward;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysUpward(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysUpward = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the backward move of the camera.\r\n */\r\n public get keysDown(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysDown;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysDown(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysDown = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the downward move of the camera.\r\n */\r\n public get keysDownward(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysDownward;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysDownward(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysDownward = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the left strafe move of the camera.\r\n */\r\n public get keysLeft(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysLeft;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysLeft(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysLeft = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the right strafe move of the camera.\r\n */\r\n public get keysRight(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysRight;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysRight(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysRight = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the left rotation move of the camera.\r\n */\r\n public get keysRotateLeft(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysRotateLeft;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysRotateLeft(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysRotateLeft = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the right rotation move of the camera.\r\n */\r\n public get keysRotateRight(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysRotateRight;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysRotateRight(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysRotateRight = value;\r\n }\r\n }\r\n\r\n /**\r\n * Event raised when the camera collide with a mesh in the scene.\r\n */\r\n public onCollide: (collidedMesh: AbstractMesh) => void;\r\n\r\n private _collider: Collider;\r\n private _needMoveForGravity = false;\r\n private _oldPosition = Vector3.Zero();\r\n private _diffPosition = Vector3.Zero();\r\n private _newPosition = Vector3.Zero();\r\n\r\n /** @internal */\r\n public _localDirection: Vector3;\r\n /** @internal */\r\n public _transformedDirection: Vector3;\r\n\r\n /**\r\n * Instantiates a Free Camera.\r\n * This represents a free type of camera. It can be useful in First Person Shooter game for instance.\r\n * Please consider using the new UniversalCamera instead as it adds more functionality like touch to this camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_introduction#universal-camera\r\n * @param name Define the name of the camera in the scene\r\n * @param position Define the start position of the camera in the scene\r\n * @param scene Define the scene the camera belongs to\r\n * @param setActiveOnSceneIfNoneActive Defines whether the camera should be marked as active if not other active cameras have been defined\r\n */\r\n constructor(name: string, position: Vector3, scene?: Scene, setActiveOnSceneIfNoneActive = true) {\r\n super(name, position, scene, setActiveOnSceneIfNoneActive);\r\n this.inputs = new FreeCameraInputsManager(this);\r\n this.inputs.addKeyboard().addMouse();\r\n }\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n */\r\n public attachControl(noPreventDefault?: boolean): void;\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n * @param ignored defines an ignored parameter kept for backward compatibility.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n * BACK COMPAT SIGNATURE ONLY.\r\n */\r\n public attachControl(ignored: any, noPreventDefault?: boolean): void;\r\n /**\r\n * Attached controls to the current camera.\r\n * @param ignored defines an ignored parameter kept for backward compatibility.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n */\r\n public attachControl(ignored?: any, noPreventDefault?: boolean): void {\r\n // eslint-disable-next-line prefer-rest-params\r\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\r\n this.inputs.attachElement(noPreventDefault);\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.inputs.detachElement();\r\n\r\n this.cameraDirection = new Vector3(0, 0, 0);\r\n this.cameraRotation = new Vector2(0, 0);\r\n }\r\n\r\n // Collisions\r\n private _collisionMask = -1;\r\n\r\n /**\r\n * Define a collision mask to limit the list of object the camera can collide with\r\n */\r\n public get collisionMask(): number {\r\n return this._collisionMask;\r\n }\r\n\r\n public set collisionMask(mask: number) {\r\n this._collisionMask = !isNaN(mask) ? mask : -1;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _collideWithWorld(displacement: Vector3): void {\r\n let globalPosition: Vector3;\r\n\r\n if (this.parent) {\r\n globalPosition = Vector3.TransformCoordinates(this.position, this.parent.getWorldMatrix());\r\n } else {\r\n globalPosition = this.position;\r\n }\r\n\r\n globalPosition.subtractFromFloatsToRef(0, this.ellipsoid.y, 0, this._oldPosition);\r\n this._oldPosition.addInPlace(this.ellipsoidOffset);\r\n\r\n const coordinator = this.getScene().collisionCoordinator;\r\n if (!this._collider) {\r\n this._collider = coordinator.createCollider();\r\n }\r\n\r\n this._collider._radius = this.ellipsoid;\r\n this._collider.collisionMask = this._collisionMask;\r\n\r\n //no need for clone, as long as gravity is not on.\r\n let actualDisplacement = displacement;\r\n\r\n //add gravity to the direction to prevent the dual-collision checking\r\n if (this.applyGravity) {\r\n //this prevents mending with cameraDirection, a global variable of the free camera class.\r\n actualDisplacement = displacement.add(this.getScene().gravity);\r\n }\r\n\r\n coordinator.getNewPosition(this._oldPosition, actualDisplacement, this._collider, 3, null, this._onCollisionPositionChange, this.uniqueId);\r\n }\r\n\r\n private _onCollisionPositionChange = (collisionId: number, newPosition: Vector3, collidedMesh: Nullable<AbstractMesh> = null) => {\r\n const updatePosition = (newPos: Vector3) => {\r\n this._newPosition.copyFrom(newPos);\r\n\r\n this._newPosition.subtractToRef(this._oldPosition, this._diffPosition);\r\n\r\n if (this._diffPosition.length() > Engine.CollisionsEpsilon) {\r\n this.position.addInPlace(this._diffPosition);\r\n if (this.onCollide && collidedMesh) {\r\n this.onCollide(collidedMesh);\r\n }\r\n }\r\n };\r\n\r\n updatePosition(newPosition);\r\n };\r\n\r\n /** @internal */\r\n public _checkInputs(): void {\r\n if (!this._localDirection) {\r\n this._localDirection = Vector3.Zero();\r\n this._transformedDirection = Vector3.Zero();\r\n }\r\n\r\n this.inputs.checkInputs();\r\n\r\n super._checkInputs();\r\n }\r\n\r\n /** @internal */\r\n public _decideIfNeedsToMove(): boolean {\r\n return this._needMoveForGravity || Math.abs(this.cameraDirection.x) > 0 || Math.abs(this.cameraDirection.y) > 0 || Math.abs(this.cameraDirection.z) > 0;\r\n }\r\n\r\n /** @internal */\r\n public _updatePosition(): void {\r\n if (this.checkCollisions && this.getScene().collisionsEnabled) {\r\n this._collideWithWorld(this.cameraDirection);\r\n } else {\r\n super._updatePosition();\r\n }\r\n }\r\n\r\n /**\r\n * Destroy the camera and release the current resources hold by it.\r\n */\r\n public dispose(): void {\r\n this.inputs.clear();\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Gets the current object class name.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCamera\";\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"freeCamera.js","sourceRoot":"","sources":["../../../../lts/core/generated/Cameras/freeCamera.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { serializeAsVector3, serialize } from \"../Misc/decorators\";\r\nimport { Vector3, Vector2 } from \"../Maths/math.vector\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { TargetCamera } from \"./targetCamera\";\r\nimport { FreeCameraInputsManager } from \"./freeCameraInputsManager\";\r\nimport type { FreeCameraMouseInput } from \"../Cameras/Inputs/freeCameraMouseInput\";\r\nimport type { FreeCameraKeyboardMoveInput } from \"../Cameras/Inputs/freeCameraKeyboardMoveInput\";\r\nimport { Tools } from \"../Misc/tools\";\r\n\r\ndeclare type Collider = import(\"../Collisions/collider\").Collider;\r\n\r\n/**\r\n * This represents a free type of camera. It can be useful in First Person Shooter game for instance.\r\n * Please consider using the new UniversalCamera instead as it adds more functionality like the gamepad.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_introduction#universal-camera\r\n */\r\nexport class FreeCamera extends TargetCamera {\r\n /**\r\n * Define the collision ellipsoid of the camera.\r\n * This is helpful to simulate a camera body like the player body around the camera\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_collisions#arcrotatecamera\r\n */\r\n @serializeAsVector3()\r\n public ellipsoid = new Vector3(0.5, 1, 0.5);\r\n\r\n /**\r\n * Define an offset for the position of the ellipsoid around the camera.\r\n * This can be helpful to determine the center of the body near the gravity center of the body\r\n * instead of its head.\r\n */\r\n @serializeAsVector3()\r\n public ellipsoidOffset = new Vector3(0, 0, 0);\r\n\r\n /**\r\n * Enable or disable collisions of the camera with the rest of the scene objects.\r\n */\r\n @serialize()\r\n public checkCollisions = false;\r\n\r\n /**\r\n * Enable or disable gravity on the camera.\r\n */\r\n @serialize()\r\n public applyGravity = false;\r\n\r\n /**\r\n * Define the input manager associated to the camera.\r\n */\r\n public inputs: FreeCameraInputsManager;\r\n\r\n /**\r\n * Gets the input sensibility for a mouse input. (default is 2000.0)\r\n * Higher values reduce sensitivity.\r\n */\r\n public get angularSensibility(): number {\r\n const mouse = <FreeCameraMouseInput>this.inputs.attached[\"mouse\"];\r\n if (mouse) {\r\n return mouse.angularSensibility;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n /**\r\n * Sets the input sensibility for a mouse input. (default is 2000.0)\r\n * Higher values reduce sensitivity.\r\n */\r\n public set angularSensibility(value: number) {\r\n const mouse = <FreeCameraMouseInput>this.inputs.attached[\"mouse\"];\r\n if (mouse) {\r\n mouse.angularSensibility = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the forward move of the camera.\r\n */\r\n public get keysUp(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysUp;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysUp(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysUp = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the upward move of the camera.\r\n */\r\n public get keysUpward(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysUpward;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysUpward(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysUpward = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the backward move of the camera.\r\n */\r\n public get keysDown(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysDown;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysDown(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysDown = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the downward move of the camera.\r\n */\r\n public get keysDownward(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysDownward;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysDownward(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysDownward = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the left strafe move of the camera.\r\n */\r\n public get keysLeft(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysLeft;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysLeft(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysLeft = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the right strafe move of the camera.\r\n */\r\n public get keysRight(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysRight;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysRight(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysRight = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the left rotation move of the camera.\r\n */\r\n public get keysRotateLeft(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysRotateLeft;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysRotateLeft(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysRotateLeft = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the right rotation move of the camera.\r\n */\r\n public get keysRotateRight(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysRotateRight;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysRotateRight(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysRotateRight = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the up rotation move of the camera.\r\n */\r\n public get keysRotateUp(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysRotateUp;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysRotateUp(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysRotateUp = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or Set the list of keyboard keys used to control the down rotation move of the camera.\r\n */\r\n public get keysRotateDown(): number[] {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n return keyboard.keysRotateDown;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public set keysRotateDown(value: number[]) {\r\n const keyboard = <FreeCameraKeyboardMoveInput>this.inputs.attached[\"keyboard\"];\r\n if (keyboard) {\r\n keyboard.keysRotateDown = value;\r\n }\r\n }\r\n\r\n /**\r\n * Event raised when the camera collide with a mesh in the scene.\r\n */\r\n public onCollide: (collidedMesh: AbstractMesh) => void;\r\n\r\n private _collider: Collider;\r\n private _needMoveForGravity = false;\r\n private _oldPosition = Vector3.Zero();\r\n private _diffPosition = Vector3.Zero();\r\n private _newPosition = Vector3.Zero();\r\n\r\n /** @internal */\r\n public _localDirection: Vector3;\r\n /** @internal */\r\n public _transformedDirection: Vector3;\r\n\r\n /**\r\n * Instantiates a Free Camera.\r\n * This represents a free type of camera. It can be useful in First Person Shooter game for instance.\r\n * Please consider using the new UniversalCamera instead as it adds more functionality like touch to this camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_introduction#universal-camera\r\n * @param name Define the name of the camera in the scene\r\n * @param position Define the start position of the camera in the scene\r\n * @param scene Define the scene the camera belongs to\r\n * @param setActiveOnSceneIfNoneActive Defines whether the camera should be marked as active if not other active cameras have been defined\r\n */\r\n constructor(name: string, position: Vector3, scene?: Scene, setActiveOnSceneIfNoneActive = true) {\r\n super(name, position, scene, setActiveOnSceneIfNoneActive);\r\n this.inputs = new FreeCameraInputsManager(this);\r\n this.inputs.addKeyboard().addMouse();\r\n }\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n */\r\n public attachControl(noPreventDefault?: boolean): void;\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n * @param ignored defines an ignored parameter kept for backward compatibility.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n * BACK COMPAT SIGNATURE ONLY.\r\n */\r\n public attachControl(ignored: any, noPreventDefault?: boolean): void;\r\n /**\r\n * Attached controls to the current camera.\r\n * @param ignored defines an ignored parameter kept for backward compatibility.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n */\r\n public attachControl(ignored?: any, noPreventDefault?: boolean): void {\r\n // eslint-disable-next-line prefer-rest-params\r\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\r\n this.inputs.attachElement(noPreventDefault);\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.inputs.detachElement();\r\n\r\n this.cameraDirection = new Vector3(0, 0, 0);\r\n this.cameraRotation = new Vector2(0, 0);\r\n }\r\n\r\n // Collisions\r\n private _collisionMask = -1;\r\n\r\n /**\r\n * Define a collision mask to limit the list of object the camera can collide with\r\n */\r\n public get collisionMask(): number {\r\n return this._collisionMask;\r\n }\r\n\r\n public set collisionMask(mask: number) {\r\n this._collisionMask = !isNaN(mask) ? mask : -1;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _collideWithWorld(displacement: Vector3): void {\r\n let globalPosition: Vector3;\r\n\r\n if (this.parent) {\r\n globalPosition = Vector3.TransformCoordinates(this.position, this.parent.getWorldMatrix());\r\n } else {\r\n globalPosition = this.position;\r\n }\r\n\r\n globalPosition.subtractFromFloatsToRef(0, this.ellipsoid.y, 0, this._oldPosition);\r\n this._oldPosition.addInPlace(this.ellipsoidOffset);\r\n\r\n const coordinator = this.getScene().collisionCoordinator;\r\n if (!this._collider) {\r\n this._collider = coordinator.createCollider();\r\n }\r\n\r\n this._collider._radius = this.ellipsoid;\r\n this._collider.collisionMask = this._collisionMask;\r\n\r\n //no need for clone, as long as gravity is not on.\r\n let actualDisplacement = displacement;\r\n\r\n //add gravity to the direction to prevent the dual-collision checking\r\n if (this.applyGravity) {\r\n //this prevents mending with cameraDirection, a global variable of the free camera class.\r\n actualDisplacement = displacement.add(this.getScene().gravity);\r\n }\r\n\r\n coordinator.getNewPosition(this._oldPosition, actualDisplacement, this._collider, 3, null, this._onCollisionPositionChange, this.uniqueId);\r\n }\r\n\r\n private _onCollisionPositionChange = (collisionId: number, newPosition: Vector3, collidedMesh: Nullable<AbstractMesh> = null) => {\r\n const updatePosition = (newPos: Vector3) => {\r\n this._newPosition.copyFrom(newPos);\r\n\r\n this._newPosition.subtractToRef(this._oldPosition, this._diffPosition);\r\n\r\n if (this._diffPosition.length() > Engine.CollisionsEpsilon) {\r\n this.position.addInPlace(this._diffPosition);\r\n if (this.onCollide && collidedMesh) {\r\n this.onCollide(collidedMesh);\r\n }\r\n }\r\n };\r\n\r\n updatePosition(newPosition);\r\n };\r\n\r\n /** @internal */\r\n public _checkInputs(): void {\r\n if (!this._localDirection) {\r\n this._localDirection = Vector3.Zero();\r\n this._transformedDirection = Vector3.Zero();\r\n }\r\n\r\n this.inputs.checkInputs();\r\n\r\n super._checkInputs();\r\n }\r\n\r\n /** @internal */\r\n public _decideIfNeedsToMove(): boolean {\r\n return this._needMoveForGravity || Math.abs(this.cameraDirection.x) > 0 || Math.abs(this.cameraDirection.y) > 0 || Math.abs(this.cameraDirection.z) > 0;\r\n }\r\n\r\n /** @internal */\r\n public _updatePosition(): void {\r\n if (this.checkCollisions && this.getScene().collisionsEnabled) {\r\n this._collideWithWorld(this.cameraDirection);\r\n } else {\r\n super._updatePosition();\r\n }\r\n }\r\n\r\n /**\r\n * Destroy the camera and release the current resources hold by it.\r\n */\r\n public dispose(): void {\r\n this.inputs.clear();\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Gets the current object class name.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCamera\";\r\n }\r\n}\r\n"]}
|
package/Cameras/targetCamera.js
CHANGED
|
@@ -103,7 +103,10 @@ export class TargetCamera extends Camera {
|
|
|
103
103
|
return null;
|
|
104
104
|
}
|
|
105
105
|
if (this.lockedTarget.absolutePosition) {
|
|
106
|
-
this.lockedTarget
|
|
106
|
+
const lockedTarget = this.lockedTarget;
|
|
107
|
+
const m = lockedTarget.computeWorldMatrix();
|
|
108
|
+
// in some cases the absolute position resets externally, but doesn't update since the matrix is cached.
|
|
109
|
+
m.getTranslationToRef(lockedTarget.absolutePosition);
|
|
107
110
|
}
|
|
108
111
|
return this.lockedTarget.absolutePosition || this.lockedTarget;
|
|
109
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targetCamera.js","sourceRoot":"","sources":["../../../../lts/core/generated/Cameras/targetCamera.ts"],"names":[],"mappings":"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","sourcesContent":["import { serialize, serializeAsVector3, serializeAsMeshReference } from \"../Misc/decorators\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Camera } from \"./camera\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Quaternion, Matrix, Vector3, Vector2, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Epsilon } from \"../Maths/math.constants\";\r\nimport { Axis } from \"../Maths/math.axis\";\r\n/**\r\n * A target camera takes a mesh or position as a target and continues to look at it while it moves.\r\n * This is the base of the follow, arc rotate cameras and Free camera\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras\r\n */\r\nexport class TargetCamera extends Camera {\r\n private static _RigCamTransformMatrix = new Matrix();\r\n private static _TargetTransformMatrix = new Matrix();\r\n private static _TargetFocalPoint = new Vector3();\r\n\r\n private _tmpUpVector = Vector3.Zero();\r\n private _tmpTargetVector = Vector3.Zero();\r\n\r\n /**\r\n * Define the current direction the camera is moving to\r\n */\r\n public cameraDirection = new Vector3(0, 0, 0);\r\n /**\r\n * Define the current rotation the camera is rotating to\r\n */\r\n public cameraRotation = new Vector2(0, 0);\r\n\r\n /** Gets or sets a boolean indicating that the scaling of the parent hierarchy will not be taken in account by the camera */\r\n public ignoreParentScaling = false;\r\n\r\n /**\r\n * When set, the up vector of the camera will be updated by the rotation of the camera\r\n */\r\n public updateUpVectorFromRotation = false;\r\n private _tmpQuaternion = new Quaternion();\r\n\r\n /**\r\n * Define the current rotation of the camera\r\n */\r\n @serializeAsVector3()\r\n public rotation = new Vector3(0, 0, 0);\r\n\r\n /**\r\n * Define the current rotation of the camera as a quaternion to prevent Gimbal lock\r\n */\r\n public rotationQuaternion: Quaternion;\r\n\r\n /**\r\n * Define the current speed of the camera\r\n */\r\n @serialize()\r\n public speed = 2.0;\r\n\r\n /**\r\n * Add constraint to the camera to prevent it to move freely in all directions and\r\n * around all axis.\r\n */\r\n public noRotationConstraint = false;\r\n\r\n /**\r\n * Reverses mouselook direction to 'natural' panning as opposed to traditional direct\r\n * panning\r\n */\r\n public invertRotation = false;\r\n\r\n /**\r\n * Speed multiplier for inverse camera panning\r\n */\r\n public inverseRotationSpeed = 0.2;\r\n\r\n /**\r\n * Define the current target of the camera as an object or a position.\r\n * Please note that locking a target will disable panning.\r\n */\r\n @serializeAsMeshReference(\"lockedTargetId\")\r\n public lockedTarget: any = null;\r\n\r\n /** @internal */\r\n public _currentTarget = Vector3.Zero();\r\n /** @internal */\r\n public _initialFocalDistance = 1;\r\n /** @internal */\r\n public _viewMatrix = Matrix.Zero();\r\n /** @internal */\r\n public _camMatrix = Matrix.Zero();\r\n /** @internal */\r\n public _cameraTransformMatrix = Matrix.Zero();\r\n /** @internal */\r\n public _cameraRotationMatrix = Matrix.Zero();\r\n\r\n /** @internal */\r\n public _referencePoint = new Vector3(0, 0, 1);\r\n /** @internal */\r\n public _transformedReferencePoint = Vector3.Zero();\r\n\r\n /** @internal */\r\n public _reset: () => void;\r\n\r\n private _defaultUp = Vector3.Up();\r\n\r\n /**\r\n * Instantiates a target camera that takes a mesh or position as a target and continues to look at it while it moves.\r\n * This is the base of the follow, arc rotate cameras and Free camera\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras\r\n * @param name Defines the name of the camera in the scene\r\n * @param position Defines the start position of the camera in the scene\r\n * @param scene Defines the scene the camera belongs to\r\n * @param setActiveOnSceneIfNoneActive Defines whether the camera should be marked as active if not other active cameras have been defined\r\n */\r\n constructor(name: string, position: Vector3, scene?: Scene, setActiveOnSceneIfNoneActive = true) {\r\n super(name, position, scene, setActiveOnSceneIfNoneActive);\r\n }\r\n\r\n /**\r\n * Gets the position in front of the camera at a given distance.\r\n * @param distance The distance from the camera we want the position to be\r\n * @returns the position\r\n */\r\n public getFrontPosition(distance: number): Vector3 {\r\n this.getWorldMatrix();\r\n const direction = this.getTarget().subtract(this.position);\r\n direction.normalize();\r\n direction.scaleInPlace(distance);\r\n return this.globalPosition.add(direction);\r\n }\r\n\r\n /** @internal */\r\n public _getLockedTargetPosition(): Nullable<Vector3> {\r\n if (!this.lockedTarget) {\r\n return null;\r\n }\r\n\r\n if (this.lockedTarget.absolutePosition) {\r\n this.lockedTarget.computeWorldMatrix();\r\n }\r\n\r\n return this.lockedTarget.absolutePosition || this.lockedTarget;\r\n }\r\n\r\n private _storedPosition: Vector3;\r\n private _storedRotation: Vector3;\r\n private _storedRotationQuaternion: Quaternion;\r\n\r\n /**\r\n * Store current camera state of the camera (fov, position, rotation, etc..)\r\n * @returns the camera\r\n */\r\n public storeState(): Camera {\r\n this._storedPosition = this.position.clone();\r\n this._storedRotation = this.rotation.clone();\r\n if (this.rotationQuaternion) {\r\n this._storedRotationQuaternion = this.rotationQuaternion.clone();\r\n }\r\n\r\n return super.storeState();\r\n }\r\n\r\n /**\r\n * Restored camera state. You must call storeState() first\r\n * @returns whether it was successful or not\r\n * @internal\r\n */\r\n public _restoreStateValues(): boolean {\r\n if (!super._restoreStateValues()) {\r\n return false;\r\n }\r\n\r\n this.position = this._storedPosition.clone();\r\n this.rotation = this._storedRotation.clone();\r\n\r\n if (this.rotationQuaternion) {\r\n this.rotationQuaternion = this._storedRotationQuaternion.clone();\r\n }\r\n\r\n this.cameraDirection.copyFromFloats(0, 0, 0);\r\n this.cameraRotation.copyFromFloats(0, 0);\r\n\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n public _initCache() {\r\n super._initCache();\r\n this._cache.lockedTarget = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n this._cache.rotation = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n this._cache.rotationQuaternion = new Quaternion(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _updateCache(ignoreParentClass?: boolean): void {\r\n if (!ignoreParentClass) {\r\n super._updateCache();\r\n }\r\n\r\n const lockedTargetPosition = this._getLockedTargetPosition();\r\n if (!lockedTargetPosition) {\r\n this._cache.lockedTarget = null;\r\n } else {\r\n if (!this._cache.lockedTarget) {\r\n this._cache.lockedTarget = lockedTargetPosition.clone();\r\n } else {\r\n this._cache.lockedTarget.copyFrom(lockedTargetPosition);\r\n }\r\n }\r\n\r\n this._cache.rotation.copyFrom(this.rotation);\r\n if (this.rotationQuaternion) {\r\n this._cache.rotationQuaternion.copyFrom(this.rotationQuaternion);\r\n }\r\n }\r\n\r\n // Synchronized\r\n /** @internal */\r\n public _isSynchronizedViewMatrix(): boolean {\r\n if (!super._isSynchronizedViewMatrix()) {\r\n return false;\r\n }\r\n\r\n const lockedTargetPosition = this._getLockedTargetPosition();\r\n\r\n return (\r\n (this._cache.lockedTarget ? this._cache.lockedTarget.equals(lockedTargetPosition) : !lockedTargetPosition) &&\r\n (this.rotationQuaternion ? this.rotationQuaternion.equals(this._cache.rotationQuaternion) : this._cache.rotation.equals(this.rotation))\r\n );\r\n }\r\n\r\n // Methods\r\n /** @internal */\r\n public _computeLocalCameraSpeed(): number {\r\n const engine = this.getEngine();\r\n return this.speed * Math.sqrt(engine.getDeltaTime() / (engine.getFps() * 100.0));\r\n }\r\n\r\n // Target\r\n\r\n /**\r\n * Defines the target the camera should look at.\r\n * @param target Defines the new target as a Vector\r\n */\r\n public setTarget(target: Vector3): void {\r\n this.upVector.normalize();\r\n\r\n this._initialFocalDistance = target.subtract(this.position).length();\r\n\r\n if (this.position.z === target.z) {\r\n this.position.z += Epsilon;\r\n }\r\n\r\n this._referencePoint.normalize().scaleInPlace(this._initialFocalDistance);\r\n\r\n Matrix.LookAtLHToRef(this.position, target, this._defaultUp, this._camMatrix);\r\n this._camMatrix.invert();\r\n\r\n this.rotation.x = Math.atan(this._camMatrix.m[6] / this._camMatrix.m[10]);\r\n\r\n const vDir = target.subtract(this.position);\r\n\r\n if (vDir.x >= 0.0) {\r\n this.rotation.y = -Math.atan(vDir.z / vDir.x) + Math.PI / 2.0;\r\n } else {\r\n this.rotation.y = -Math.atan(vDir.z / vDir.x) - Math.PI / 2.0;\r\n }\r\n\r\n this.rotation.z = 0;\r\n\r\n if (isNaN(this.rotation.x)) {\r\n this.rotation.x = 0;\r\n }\r\n\r\n if (isNaN(this.rotation.y)) {\r\n this.rotation.y = 0;\r\n }\r\n\r\n if (isNaN(this.rotation.z)) {\r\n this.rotation.z = 0;\r\n }\r\n\r\n if (this.rotationQuaternion) {\r\n Quaternion.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this.rotationQuaternion);\r\n }\r\n }\r\n\r\n /**\r\n * Defines the target point of the camera.\r\n * The camera looks towards it form the radius distance.\r\n */\r\n public get target(): Vector3 {\r\n return this.getTarget();\r\n }\r\n public set target(value: Vector3) {\r\n this.setTarget(value);\r\n }\r\n\r\n /**\r\n * Return the current target position of the camera. This value is expressed in local space.\r\n * @returns the target position\r\n */\r\n public getTarget(): Vector3 {\r\n return this._currentTarget;\r\n }\r\n\r\n /** @internal */\r\n public _decideIfNeedsToMove(): boolean {\r\n return Math.abs(this.cameraDirection.x) > 0 || Math.abs(this.cameraDirection.y) > 0 || Math.abs(this.cameraDirection.z) > 0;\r\n }\r\n\r\n /** @internal */\r\n public _updatePosition(): void {\r\n if (this.parent) {\r\n this.parent.getWorldMatrix().invertToRef(TmpVectors.Matrix[0]);\r\n Vector3.TransformNormalToRef(this.cameraDirection, TmpVectors.Matrix[0], TmpVectors.Vector3[0]);\r\n this.position.addInPlace(TmpVectors.Vector3[0]);\r\n return;\r\n }\r\n this.position.addInPlace(this.cameraDirection);\r\n }\r\n\r\n /** @internal */\r\n public _checkInputs(): void {\r\n const directionMultiplier = this.invertRotation ? -this.inverseRotationSpeed : 1.0;\r\n const needToMove = this._decideIfNeedsToMove();\r\n const needToRotate = Math.abs(this.cameraRotation.x) > 0 || Math.abs(this.cameraRotation.y) > 0;\r\n\r\n // Move\r\n if (needToMove) {\r\n this._updatePosition();\r\n }\r\n\r\n // Rotate\r\n if (needToRotate) {\r\n //rotate, if quaternion is set and rotation was used\r\n if (this.rotationQuaternion) {\r\n this.rotationQuaternion.toEulerAnglesToRef(this.rotation);\r\n }\r\n\r\n this.rotation.x += this.cameraRotation.x * directionMultiplier;\r\n this.rotation.y += this.cameraRotation.y * directionMultiplier;\r\n\r\n // Apply constraints\r\n if (!this.noRotationConstraint) {\r\n const limit = 1.570796;\r\n\r\n if (this.rotation.x > limit) {\r\n this.rotation.x = limit;\r\n }\r\n if (this.rotation.x < -limit) {\r\n this.rotation.x = -limit;\r\n }\r\n }\r\n\r\n //rotate, if quaternion is set and rotation was used\r\n if (this.rotationQuaternion) {\r\n const len = this.rotation.lengthSquared();\r\n if (len) {\r\n Quaternion.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this.rotationQuaternion);\r\n }\r\n }\r\n }\r\n\r\n // Inertia\r\n if (needToMove) {\r\n if (Math.abs(this.cameraDirection.x) < this.speed * Epsilon) {\r\n this.cameraDirection.x = 0;\r\n }\r\n\r\n if (Math.abs(this.cameraDirection.y) < this.speed * Epsilon) {\r\n this.cameraDirection.y = 0;\r\n }\r\n\r\n if (Math.abs(this.cameraDirection.z) < this.speed * Epsilon) {\r\n this.cameraDirection.z = 0;\r\n }\r\n\r\n this.cameraDirection.scaleInPlace(this.inertia);\r\n }\r\n if (needToRotate) {\r\n if (Math.abs(this.cameraRotation.x) < this.speed * Epsilon) {\r\n this.cameraRotation.x = 0;\r\n }\r\n\r\n if (Math.abs(this.cameraRotation.y) < this.speed * Epsilon) {\r\n this.cameraRotation.y = 0;\r\n }\r\n this.cameraRotation.scaleInPlace(this.inertia);\r\n }\r\n\r\n super._checkInputs();\r\n }\r\n\r\n protected _updateCameraRotationMatrix() {\r\n if (this.rotationQuaternion) {\r\n this.rotationQuaternion.toRotationMatrix(this._cameraRotationMatrix);\r\n } else {\r\n Matrix.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this._cameraRotationMatrix);\r\n }\r\n }\r\n\r\n /**\r\n * Update the up vector to apply the rotation of the camera (So if you changed the camera rotation.z this will let you update the up vector as well)\r\n * @returns the current camera\r\n */\r\n private _rotateUpVectorWithCameraRotationMatrix(): TargetCamera {\r\n Vector3.TransformNormalToRef(this._defaultUp, this._cameraRotationMatrix, this.upVector);\r\n return this;\r\n }\r\n\r\n private _cachedRotationZ = 0;\r\n private _cachedQuaternionRotationZ = 0;\r\n /** @internal */\r\n public _getViewMatrix(): Matrix {\r\n if (this.lockedTarget) {\r\n this.setTarget(this._getLockedTargetPosition()!);\r\n }\r\n\r\n // Compute\r\n this._updateCameraRotationMatrix();\r\n\r\n // Apply the changed rotation to the upVector\r\n if (this.rotationQuaternion && this._cachedQuaternionRotationZ != this.rotationQuaternion.z) {\r\n this._rotateUpVectorWithCameraRotationMatrix();\r\n this._cachedQuaternionRotationZ = this.rotationQuaternion.z;\r\n } else if (this._cachedRotationZ !== this.rotation.z) {\r\n this._rotateUpVectorWithCameraRotationMatrix();\r\n this._cachedRotationZ = this.rotation.z;\r\n }\r\n\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 if (this.updateUpVectorFromRotation) {\r\n if (this.rotationQuaternion) {\r\n Axis.Y.rotateByQuaternionToRef(this.rotationQuaternion, this.upVector);\r\n } else {\r\n Quaternion.FromEulerVectorToRef(this.rotation, this._tmpQuaternion);\r\n Axis.Y.rotateByQuaternionToRef(this._tmpQuaternion, this.upVector);\r\n }\r\n }\r\n this._computeViewMatrix(this.position, this._currentTarget, this.upVector);\r\n return this._viewMatrix;\r\n }\r\n\r\n protected _computeViewMatrix(position: Vector3, target: Vector3, up: Vector3): void {\r\n if (this.ignoreParentScaling) {\r\n if (this.parent) {\r\n const parentWorldMatrix = this.parent.getWorldMatrix();\r\n Vector3.TransformCoordinatesToRef(position, parentWorldMatrix, this._globalPosition);\r\n Vector3.TransformCoordinatesToRef(target, parentWorldMatrix, this._tmpTargetVector);\r\n Vector3.TransformNormalToRef(up, parentWorldMatrix, this._tmpUpVector);\r\n this._markSyncedWithParent();\r\n } else {\r\n this._globalPosition.copyFrom(position);\r\n this._tmpTargetVector.copyFrom(target);\r\n this._tmpUpVector.copyFrom(up);\r\n }\r\n\r\n if (this.getScene().useRightHandedSystem) {\r\n Matrix.LookAtRHToRef(this._globalPosition, this._tmpTargetVector, this._tmpUpVector, this._viewMatrix);\r\n } else {\r\n Matrix.LookAtLHToRef(this._globalPosition, this._tmpTargetVector, this._tmpUpVector, this._viewMatrix);\r\n }\r\n return;\r\n }\r\n\r\n if (this.getScene().useRightHandedSystem) {\r\n Matrix.LookAtRHToRef(position, target, up, this._viewMatrix);\r\n } else {\r\n Matrix.LookAtLHToRef(position, target, up, this._viewMatrix);\r\n }\r\n\r\n if (this.parent) {\r\n const parentWorldMatrix = this.parent.getWorldMatrix();\r\n this._viewMatrix.invert();\r\n this._viewMatrix.multiplyToRef(parentWorldMatrix, this._viewMatrix);\r\n this._viewMatrix.getTranslationToRef(this._globalPosition);\r\n this._viewMatrix.invert();\r\n this._markSyncedWithParent();\r\n } else {\r\n this._globalPosition.copyFrom(position);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public createRigCamera(name: string, cameraIndex: number): Nullable<Camera> {\r\n if (this.cameraRigMode !== Camera.RIG_MODE_NONE) {\r\n const rigCamera = new TargetCamera(name, this.position.clone(), this.getScene());\r\n rigCamera.isRigCamera = true;\r\n rigCamera.rigParent = this;\r\n if (this.cameraRigMode === Camera.RIG_MODE_VR || this.cameraRigMode === Camera.RIG_MODE_WEBVR) {\r\n if (!this.rotationQuaternion) {\r\n this.rotationQuaternion = new Quaternion();\r\n }\r\n rigCamera._cameraRigParams = {};\r\n rigCamera.rotationQuaternion = new Quaternion();\r\n }\r\n\r\n rigCamera.mode = this.mode;\r\n rigCamera.orthoLeft = this.orthoLeft;\r\n rigCamera.orthoRight = this.orthoRight;\r\n rigCamera.orthoTop = this.orthoTop;\r\n rigCamera.orthoBottom = this.orthoBottom;\r\n\r\n return rigCamera;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _updateRigCameras() {\r\n const camLeft = <TargetCamera>this._rigCameras[0];\r\n const camRight = <TargetCamera>this._rigCameras[1];\r\n\r\n this.computeWorldMatrix();\r\n\r\n switch (this.cameraRigMode) {\r\n case Camera.RIG_MODE_STEREOSCOPIC_ANAGLYPH:\r\n case Camera.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:\r\n case Camera.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED:\r\n case Camera.RIG_MODE_STEREOSCOPIC_OVERUNDER:\r\n case Camera.RIG_MODE_STEREOSCOPIC_INTERLACED: {\r\n //provisionnaly using _cameraRigParams.stereoHalfAngle instead of calculations based on _cameraRigParams.interaxialDistance:\r\n const leftSign = this.cameraRigMode === Camera.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED ? 1 : -1;\r\n const rightSign = this.cameraRigMode === Camera.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED ? -1 : 1;\r\n this._getRigCamPositionAndTarget(this._cameraRigParams.stereoHalfAngle * leftSign, camLeft);\r\n this._getRigCamPositionAndTarget(this._cameraRigParams.stereoHalfAngle * rightSign, camRight);\r\n break;\r\n }\r\n case Camera.RIG_MODE_VR:\r\n if (camLeft.rotationQuaternion) {\r\n camLeft.rotationQuaternion.copyFrom(this.rotationQuaternion);\r\n camRight.rotationQuaternion.copyFrom(this.rotationQuaternion);\r\n } else {\r\n camLeft.rotation.copyFrom(this.rotation);\r\n camRight.rotation.copyFrom(this.rotation);\r\n }\r\n camLeft.position.copyFrom(this.position);\r\n camRight.position.copyFrom(this.position);\r\n\r\n break;\r\n }\r\n super._updateRigCameras();\r\n }\r\n\r\n private _getRigCamPositionAndTarget(halfSpace: number, rigCamera: TargetCamera) {\r\n const target = this.getTarget();\r\n target.subtractToRef(this.position, TargetCamera._TargetFocalPoint);\r\n\r\n TargetCamera._TargetFocalPoint.normalize().scaleInPlace(this._initialFocalDistance);\r\n const newFocalTarget = TargetCamera._TargetFocalPoint.addInPlace(this.position);\r\n\r\n Matrix.TranslationToRef(-newFocalTarget.x, -newFocalTarget.y, -newFocalTarget.z, TargetCamera._TargetTransformMatrix);\r\n TargetCamera._TargetTransformMatrix.multiplyToRef(Matrix.RotationAxis(rigCamera.upVector, halfSpace), TargetCamera._RigCamTransformMatrix);\r\n Matrix.TranslationToRef(newFocalTarget.x, newFocalTarget.y, newFocalTarget.z, TargetCamera._TargetTransformMatrix);\r\n\r\n TargetCamera._RigCamTransformMatrix.multiplyToRef(TargetCamera._TargetTransformMatrix, TargetCamera._RigCamTransformMatrix);\r\n\r\n Vector3.TransformCoordinatesToRef(this.position, TargetCamera._RigCamTransformMatrix, rigCamera.position);\r\n rigCamera.setTarget(newFocalTarget);\r\n }\r\n\r\n /**\r\n * Gets the current object class name.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"TargetCamera\";\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"targetCamera.js","sourceRoot":"","sources":["../../../../lts/core/generated/Cameras/targetCamera.ts"],"names":[],"mappings":"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","sourcesContent":["import { serialize, serializeAsVector3, serializeAsMeshReference } from \"../Misc/decorators\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Camera } from \"./camera\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Quaternion, Matrix, Vector3, Vector2, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Epsilon } from \"../Maths/math.constants\";\r\nimport { Axis } from \"../Maths/math.axis\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\n/**\r\n * A target camera takes a mesh or position as a target and continues to look at it while it moves.\r\n * This is the base of the follow, arc rotate cameras and Free camera\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras\r\n */\r\nexport class TargetCamera extends Camera {\r\n private static _RigCamTransformMatrix = new Matrix();\r\n private static _TargetTransformMatrix = new Matrix();\r\n private static _TargetFocalPoint = new Vector3();\r\n\r\n private _tmpUpVector = Vector3.Zero();\r\n private _tmpTargetVector = Vector3.Zero();\r\n\r\n /**\r\n * Define the current direction the camera is moving to\r\n */\r\n public cameraDirection = new Vector3(0, 0, 0);\r\n /**\r\n * Define the current rotation the camera is rotating to\r\n */\r\n public cameraRotation = new Vector2(0, 0);\r\n\r\n /** Gets or sets a boolean indicating that the scaling of the parent hierarchy will not be taken in account by the camera */\r\n public ignoreParentScaling = false;\r\n\r\n /**\r\n * When set, the up vector of the camera will be updated by the rotation of the camera\r\n */\r\n public updateUpVectorFromRotation = false;\r\n private _tmpQuaternion = new Quaternion();\r\n\r\n /**\r\n * Define the current rotation of the camera\r\n */\r\n @serializeAsVector3()\r\n public rotation = new Vector3(0, 0, 0);\r\n\r\n /**\r\n * Define the current rotation of the camera as a quaternion to prevent Gimbal lock\r\n */\r\n public rotationQuaternion: Quaternion;\r\n\r\n /**\r\n * Define the current speed of the camera\r\n */\r\n @serialize()\r\n public speed = 2.0;\r\n\r\n /**\r\n * Add constraint to the camera to prevent it to move freely in all directions and\r\n * around all axis.\r\n */\r\n public noRotationConstraint = false;\r\n\r\n /**\r\n * Reverses mouselook direction to 'natural' panning as opposed to traditional direct\r\n * panning\r\n */\r\n public invertRotation = false;\r\n\r\n /**\r\n * Speed multiplier for inverse camera panning\r\n */\r\n public inverseRotationSpeed = 0.2;\r\n\r\n /**\r\n * Define the current target of the camera as an object or a position.\r\n * Please note that locking a target will disable panning.\r\n */\r\n @serializeAsMeshReference(\"lockedTargetId\")\r\n public lockedTarget: any = null;\r\n\r\n /** @internal */\r\n public _currentTarget = Vector3.Zero();\r\n /** @internal */\r\n public _initialFocalDistance = 1;\r\n /** @internal */\r\n public _viewMatrix = Matrix.Zero();\r\n /** @internal */\r\n public _camMatrix = Matrix.Zero();\r\n /** @internal */\r\n public _cameraTransformMatrix = Matrix.Zero();\r\n /** @internal */\r\n public _cameraRotationMatrix = Matrix.Zero();\r\n\r\n /** @internal */\r\n public _referencePoint = new Vector3(0, 0, 1);\r\n /** @internal */\r\n public _transformedReferencePoint = Vector3.Zero();\r\n\r\n /** @internal */\r\n public _reset: () => void;\r\n\r\n private _defaultUp = Vector3.Up();\r\n\r\n /**\r\n * Instantiates a target camera that takes a mesh or position as a target and continues to look at it while it moves.\r\n * This is the base of the follow, arc rotate cameras and Free camera\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras\r\n * @param name Defines the name of the camera in the scene\r\n * @param position Defines the start position of the camera in the scene\r\n * @param scene Defines the scene the camera belongs to\r\n * @param setActiveOnSceneIfNoneActive Defines whether the camera should be marked as active if not other active cameras have been defined\r\n */\r\n constructor(name: string, position: Vector3, scene?: Scene, setActiveOnSceneIfNoneActive = true) {\r\n super(name, position, scene, setActiveOnSceneIfNoneActive);\r\n }\r\n\r\n /**\r\n * Gets the position in front of the camera at a given distance.\r\n * @param distance The distance from the camera we want the position to be\r\n * @returns the position\r\n */\r\n public getFrontPosition(distance: number): Vector3 {\r\n this.getWorldMatrix();\r\n const direction = this.getTarget().subtract(this.position);\r\n direction.normalize();\r\n direction.scaleInPlace(distance);\r\n return this.globalPosition.add(direction);\r\n }\r\n\r\n /** @internal */\r\n public _getLockedTargetPosition(): Nullable<Vector3> {\r\n if (!this.lockedTarget) {\r\n return null;\r\n }\r\n\r\n if (this.lockedTarget.absolutePosition) {\r\n const lockedTarget = this.lockedTarget as AbstractMesh;\r\n const m = lockedTarget.computeWorldMatrix();\r\n // in some cases the absolute position resets externally, but doesn't update since the matrix is cached.\r\n m.getTranslationToRef(lockedTarget.absolutePosition);\r\n }\r\n\r\n return this.lockedTarget.absolutePosition || this.lockedTarget;\r\n }\r\n\r\n private _storedPosition: Vector3;\r\n private _storedRotation: Vector3;\r\n private _storedRotationQuaternion: Quaternion;\r\n\r\n /**\r\n * Store current camera state of the camera (fov, position, rotation, etc..)\r\n * @returns the camera\r\n */\r\n public storeState(): Camera {\r\n this._storedPosition = this.position.clone();\r\n this._storedRotation = this.rotation.clone();\r\n if (this.rotationQuaternion) {\r\n this._storedRotationQuaternion = this.rotationQuaternion.clone();\r\n }\r\n\r\n return super.storeState();\r\n }\r\n\r\n /**\r\n * Restored camera state. You must call storeState() first\r\n * @returns whether it was successful or not\r\n * @internal\r\n */\r\n public _restoreStateValues(): boolean {\r\n if (!super._restoreStateValues()) {\r\n return false;\r\n }\r\n\r\n this.position = this._storedPosition.clone();\r\n this.rotation = this._storedRotation.clone();\r\n\r\n if (this.rotationQuaternion) {\r\n this.rotationQuaternion = this._storedRotationQuaternion.clone();\r\n }\r\n\r\n this.cameraDirection.copyFromFloats(0, 0, 0);\r\n this.cameraRotation.copyFromFloats(0, 0);\r\n\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n public _initCache() {\r\n super._initCache();\r\n this._cache.lockedTarget = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n this._cache.rotation = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n this._cache.rotationQuaternion = new Quaternion(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _updateCache(ignoreParentClass?: boolean): void {\r\n if (!ignoreParentClass) {\r\n super._updateCache();\r\n }\r\n\r\n const lockedTargetPosition = this._getLockedTargetPosition();\r\n if (!lockedTargetPosition) {\r\n this._cache.lockedTarget = null;\r\n } else {\r\n if (!this._cache.lockedTarget) {\r\n this._cache.lockedTarget = lockedTargetPosition.clone();\r\n } else {\r\n this._cache.lockedTarget.copyFrom(lockedTargetPosition);\r\n }\r\n }\r\n\r\n this._cache.rotation.copyFrom(this.rotation);\r\n if (this.rotationQuaternion) {\r\n this._cache.rotationQuaternion.copyFrom(this.rotationQuaternion);\r\n }\r\n }\r\n\r\n // Synchronized\r\n /** @internal */\r\n public _isSynchronizedViewMatrix(): boolean {\r\n if (!super._isSynchronizedViewMatrix()) {\r\n return false;\r\n }\r\n\r\n const lockedTargetPosition = this._getLockedTargetPosition();\r\n\r\n return (\r\n (this._cache.lockedTarget ? this._cache.lockedTarget.equals(lockedTargetPosition) : !lockedTargetPosition) &&\r\n (this.rotationQuaternion ? this.rotationQuaternion.equals(this._cache.rotationQuaternion) : this._cache.rotation.equals(this.rotation))\r\n );\r\n }\r\n\r\n // Methods\r\n /** @internal */\r\n public _computeLocalCameraSpeed(): number {\r\n const engine = this.getEngine();\r\n return this.speed * Math.sqrt(engine.getDeltaTime() / (engine.getFps() * 100.0));\r\n }\r\n\r\n // Target\r\n\r\n /**\r\n * Defines the target the camera should look at.\r\n * @param target Defines the new target as a Vector\r\n */\r\n public setTarget(target: Vector3): void {\r\n this.upVector.normalize();\r\n\r\n this._initialFocalDistance = target.subtract(this.position).length();\r\n\r\n if (this.position.z === target.z) {\r\n this.position.z += Epsilon;\r\n }\r\n\r\n this._referencePoint.normalize().scaleInPlace(this._initialFocalDistance);\r\n\r\n Matrix.LookAtLHToRef(this.position, target, this._defaultUp, this._camMatrix);\r\n this._camMatrix.invert();\r\n\r\n this.rotation.x = Math.atan(this._camMatrix.m[6] / this._camMatrix.m[10]);\r\n\r\n const vDir = target.subtract(this.position);\r\n\r\n if (vDir.x >= 0.0) {\r\n this.rotation.y = -Math.atan(vDir.z / vDir.x) + Math.PI / 2.0;\r\n } else {\r\n this.rotation.y = -Math.atan(vDir.z / vDir.x) - Math.PI / 2.0;\r\n }\r\n\r\n this.rotation.z = 0;\r\n\r\n if (isNaN(this.rotation.x)) {\r\n this.rotation.x = 0;\r\n }\r\n\r\n if (isNaN(this.rotation.y)) {\r\n this.rotation.y = 0;\r\n }\r\n\r\n if (isNaN(this.rotation.z)) {\r\n this.rotation.z = 0;\r\n }\r\n\r\n if (this.rotationQuaternion) {\r\n Quaternion.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this.rotationQuaternion);\r\n }\r\n }\r\n\r\n /**\r\n * Defines the target point of the camera.\r\n * The camera looks towards it form the radius distance.\r\n */\r\n public get target(): Vector3 {\r\n return this.getTarget();\r\n }\r\n public set target(value: Vector3) {\r\n this.setTarget(value);\r\n }\r\n\r\n /**\r\n * Return the current target position of the camera. This value is expressed in local space.\r\n * @returns the target position\r\n */\r\n public getTarget(): Vector3 {\r\n return this._currentTarget;\r\n }\r\n\r\n /** @internal */\r\n public _decideIfNeedsToMove(): boolean {\r\n return Math.abs(this.cameraDirection.x) > 0 || Math.abs(this.cameraDirection.y) > 0 || Math.abs(this.cameraDirection.z) > 0;\r\n }\r\n\r\n /** @internal */\r\n public _updatePosition(): void {\r\n if (this.parent) {\r\n this.parent.getWorldMatrix().invertToRef(TmpVectors.Matrix[0]);\r\n Vector3.TransformNormalToRef(this.cameraDirection, TmpVectors.Matrix[0], TmpVectors.Vector3[0]);\r\n this.position.addInPlace(TmpVectors.Vector3[0]);\r\n return;\r\n }\r\n this.position.addInPlace(this.cameraDirection);\r\n }\r\n\r\n /** @internal */\r\n public _checkInputs(): void {\r\n const directionMultiplier = this.invertRotation ? -this.inverseRotationSpeed : 1.0;\r\n const needToMove = this._decideIfNeedsToMove();\r\n const needToRotate = Math.abs(this.cameraRotation.x) > 0 || Math.abs(this.cameraRotation.y) > 0;\r\n\r\n // Move\r\n if (needToMove) {\r\n this._updatePosition();\r\n }\r\n\r\n // Rotate\r\n if (needToRotate) {\r\n //rotate, if quaternion is set and rotation was used\r\n if (this.rotationQuaternion) {\r\n this.rotationQuaternion.toEulerAnglesToRef(this.rotation);\r\n }\r\n\r\n this.rotation.x += this.cameraRotation.x * directionMultiplier;\r\n this.rotation.y += this.cameraRotation.y * directionMultiplier;\r\n\r\n // Apply constraints\r\n if (!this.noRotationConstraint) {\r\n const limit = 1.570796;\r\n\r\n if (this.rotation.x > limit) {\r\n this.rotation.x = limit;\r\n }\r\n if (this.rotation.x < -limit) {\r\n this.rotation.x = -limit;\r\n }\r\n }\r\n\r\n //rotate, if quaternion is set and rotation was used\r\n if (this.rotationQuaternion) {\r\n const len = this.rotation.lengthSquared();\r\n if (len) {\r\n Quaternion.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this.rotationQuaternion);\r\n }\r\n }\r\n }\r\n\r\n // Inertia\r\n if (needToMove) {\r\n if (Math.abs(this.cameraDirection.x) < this.speed * Epsilon) {\r\n this.cameraDirection.x = 0;\r\n }\r\n\r\n if (Math.abs(this.cameraDirection.y) < this.speed * Epsilon) {\r\n this.cameraDirection.y = 0;\r\n }\r\n\r\n if (Math.abs(this.cameraDirection.z) < this.speed * Epsilon) {\r\n this.cameraDirection.z = 0;\r\n }\r\n\r\n this.cameraDirection.scaleInPlace(this.inertia);\r\n }\r\n if (needToRotate) {\r\n if (Math.abs(this.cameraRotation.x) < this.speed * Epsilon) {\r\n this.cameraRotation.x = 0;\r\n }\r\n\r\n if (Math.abs(this.cameraRotation.y) < this.speed * Epsilon) {\r\n this.cameraRotation.y = 0;\r\n }\r\n this.cameraRotation.scaleInPlace(this.inertia);\r\n }\r\n\r\n super._checkInputs();\r\n }\r\n\r\n protected _updateCameraRotationMatrix() {\r\n if (this.rotationQuaternion) {\r\n this.rotationQuaternion.toRotationMatrix(this._cameraRotationMatrix);\r\n } else {\r\n Matrix.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this._cameraRotationMatrix);\r\n }\r\n }\r\n\r\n /**\r\n * Update the up vector to apply the rotation of the camera (So if you changed the camera rotation.z this will let you update the up vector as well)\r\n * @returns the current camera\r\n */\r\n private _rotateUpVectorWithCameraRotationMatrix(): TargetCamera {\r\n Vector3.TransformNormalToRef(this._defaultUp, this._cameraRotationMatrix, this.upVector);\r\n return this;\r\n }\r\n\r\n private _cachedRotationZ = 0;\r\n private _cachedQuaternionRotationZ = 0;\r\n /** @internal */\r\n public _getViewMatrix(): Matrix {\r\n if (this.lockedTarget) {\r\n this.setTarget(this._getLockedTargetPosition()!);\r\n }\r\n\r\n // Compute\r\n this._updateCameraRotationMatrix();\r\n\r\n // Apply the changed rotation to the upVector\r\n if (this.rotationQuaternion && this._cachedQuaternionRotationZ != this.rotationQuaternion.z) {\r\n this._rotateUpVectorWithCameraRotationMatrix();\r\n this._cachedQuaternionRotationZ = this.rotationQuaternion.z;\r\n } else if (this._cachedRotationZ !== this.rotation.z) {\r\n this._rotateUpVectorWithCameraRotationMatrix();\r\n this._cachedRotationZ = this.rotation.z;\r\n }\r\n\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 if (this.updateUpVectorFromRotation) {\r\n if (this.rotationQuaternion) {\r\n Axis.Y.rotateByQuaternionToRef(this.rotationQuaternion, this.upVector);\r\n } else {\r\n Quaternion.FromEulerVectorToRef(this.rotation, this._tmpQuaternion);\r\n Axis.Y.rotateByQuaternionToRef(this._tmpQuaternion, this.upVector);\r\n }\r\n }\r\n this._computeViewMatrix(this.position, this._currentTarget, this.upVector);\r\n return this._viewMatrix;\r\n }\r\n\r\n protected _computeViewMatrix(position: Vector3, target: Vector3, up: Vector3): void {\r\n if (this.ignoreParentScaling) {\r\n if (this.parent) {\r\n const parentWorldMatrix = this.parent.getWorldMatrix();\r\n Vector3.TransformCoordinatesToRef(position, parentWorldMatrix, this._globalPosition);\r\n Vector3.TransformCoordinatesToRef(target, parentWorldMatrix, this._tmpTargetVector);\r\n Vector3.TransformNormalToRef(up, parentWorldMatrix, this._tmpUpVector);\r\n this._markSyncedWithParent();\r\n } else {\r\n this._globalPosition.copyFrom(position);\r\n this._tmpTargetVector.copyFrom(target);\r\n this._tmpUpVector.copyFrom(up);\r\n }\r\n\r\n if (this.getScene().useRightHandedSystem) {\r\n Matrix.LookAtRHToRef(this._globalPosition, this._tmpTargetVector, this._tmpUpVector, this._viewMatrix);\r\n } else {\r\n Matrix.LookAtLHToRef(this._globalPosition, this._tmpTargetVector, this._tmpUpVector, this._viewMatrix);\r\n }\r\n return;\r\n }\r\n\r\n if (this.getScene().useRightHandedSystem) {\r\n Matrix.LookAtRHToRef(position, target, up, this._viewMatrix);\r\n } else {\r\n Matrix.LookAtLHToRef(position, target, up, this._viewMatrix);\r\n }\r\n\r\n if (this.parent) {\r\n const parentWorldMatrix = this.parent.getWorldMatrix();\r\n this._viewMatrix.invert();\r\n this._viewMatrix.multiplyToRef(parentWorldMatrix, this._viewMatrix);\r\n this._viewMatrix.getTranslationToRef(this._globalPosition);\r\n this._viewMatrix.invert();\r\n this._markSyncedWithParent();\r\n } else {\r\n this._globalPosition.copyFrom(position);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public createRigCamera(name: string, cameraIndex: number): Nullable<Camera> {\r\n if (this.cameraRigMode !== Camera.RIG_MODE_NONE) {\r\n const rigCamera = new TargetCamera(name, this.position.clone(), this.getScene());\r\n rigCamera.isRigCamera = true;\r\n rigCamera.rigParent = this;\r\n if (this.cameraRigMode === Camera.RIG_MODE_VR || this.cameraRigMode === Camera.RIG_MODE_WEBVR) {\r\n if (!this.rotationQuaternion) {\r\n this.rotationQuaternion = new Quaternion();\r\n }\r\n rigCamera._cameraRigParams = {};\r\n rigCamera.rotationQuaternion = new Quaternion();\r\n }\r\n\r\n rigCamera.mode = this.mode;\r\n rigCamera.orthoLeft = this.orthoLeft;\r\n rigCamera.orthoRight = this.orthoRight;\r\n rigCamera.orthoTop = this.orthoTop;\r\n rigCamera.orthoBottom = this.orthoBottom;\r\n\r\n return rigCamera;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _updateRigCameras() {\r\n const camLeft = <TargetCamera>this._rigCameras[0];\r\n const camRight = <TargetCamera>this._rigCameras[1];\r\n\r\n this.computeWorldMatrix();\r\n\r\n switch (this.cameraRigMode) {\r\n case Camera.RIG_MODE_STEREOSCOPIC_ANAGLYPH:\r\n case Camera.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:\r\n case Camera.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED:\r\n case Camera.RIG_MODE_STEREOSCOPIC_OVERUNDER:\r\n case Camera.RIG_MODE_STEREOSCOPIC_INTERLACED: {\r\n //provisionnaly using _cameraRigParams.stereoHalfAngle instead of calculations based on _cameraRigParams.interaxialDistance:\r\n const leftSign = this.cameraRigMode === Camera.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED ? 1 : -1;\r\n const rightSign = this.cameraRigMode === Camera.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED ? -1 : 1;\r\n this._getRigCamPositionAndTarget(this._cameraRigParams.stereoHalfAngle * leftSign, camLeft);\r\n this._getRigCamPositionAndTarget(this._cameraRigParams.stereoHalfAngle * rightSign, camRight);\r\n break;\r\n }\r\n case Camera.RIG_MODE_VR:\r\n if (camLeft.rotationQuaternion) {\r\n camLeft.rotationQuaternion.copyFrom(this.rotationQuaternion);\r\n camRight.rotationQuaternion.copyFrom(this.rotationQuaternion);\r\n } else {\r\n camLeft.rotation.copyFrom(this.rotation);\r\n camRight.rotation.copyFrom(this.rotation);\r\n }\r\n camLeft.position.copyFrom(this.position);\r\n camRight.position.copyFrom(this.position);\r\n\r\n break;\r\n }\r\n super._updateRigCameras();\r\n }\r\n\r\n private _getRigCamPositionAndTarget(halfSpace: number, rigCamera: TargetCamera) {\r\n const target = this.getTarget();\r\n target.subtractToRef(this.position, TargetCamera._TargetFocalPoint);\r\n\r\n TargetCamera._TargetFocalPoint.normalize().scaleInPlace(this._initialFocalDistance);\r\n const newFocalTarget = TargetCamera._TargetFocalPoint.addInPlace(this.position);\r\n\r\n Matrix.TranslationToRef(-newFocalTarget.x, -newFocalTarget.y, -newFocalTarget.z, TargetCamera._TargetTransformMatrix);\r\n TargetCamera._TargetTransformMatrix.multiplyToRef(Matrix.RotationAxis(rigCamera.upVector, halfSpace), TargetCamera._RigCamTransformMatrix);\r\n Matrix.TranslationToRef(newFocalTarget.x, newFocalTarget.y, newFocalTarget.z, TargetCamera._TargetTransformMatrix);\r\n\r\n TargetCamera._RigCamTransformMatrix.multiplyToRef(TargetCamera._TargetTransformMatrix, TargetCamera._RigCamTransformMatrix);\r\n\r\n Vector3.TransformCoordinatesToRef(this.position, TargetCamera._RigCamTransformMatrix, rigCamera.position);\r\n rigCamera.setTarget(newFocalTarget);\r\n }\r\n\r\n /**\r\n * Gets the current object class name.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"TargetCamera\";\r\n }\r\n}\r\n"]}
|
|
@@ -68,6 +68,8 @@ export interface EngineCapabilities {
|
|
|
68
68
|
textureHalfFloatRender: boolean;
|
|
69
69
|
/** Defines if textureLOD shader command is supported */
|
|
70
70
|
textureLOD: boolean;
|
|
71
|
+
/** Defines if texelFetch shader command is supported */
|
|
72
|
+
texelFetch: boolean;
|
|
71
73
|
/** Defines if draw buffers extension is supported */
|
|
72
74
|
drawBuffersExtension: boolean;
|
|
73
75
|
/** Defines if depth textures are supported */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engineCapabilities.js","sourceRoot":"","sources":["../../../../lts/core/generated/Engines/engineCapabilities.ts"],"names":[],"mappings":"","sourcesContent":["/**\r\n * Interface used to describe the capabilities of the engine relatively to the current browser\r\n */\r\nexport interface EngineCapabilities {\r\n /** Maximum textures units per fragment shader */\r\n maxTexturesImageUnits: number;\r\n /** Maximum texture units per vertex shader */\r\n maxVertexTextureImageUnits: number;\r\n /** Maximum textures units in the entire pipeline */\r\n maxCombinedTexturesImageUnits: number;\r\n /** Maximum texture size */\r\n maxTextureSize: number;\r\n /** Maximum texture samples */\r\n maxSamples?: number;\r\n /** Maximum cube texture size */\r\n maxCubemapTextureSize: number;\r\n /** Maximum render texture size */\r\n maxRenderTextureSize: number;\r\n /** Maximum number of vertex attributes */\r\n maxVertexAttribs: number;\r\n /** Maximum number of varyings */\r\n maxVaryingVectors: number;\r\n /** Maximum number of uniforms per vertex shader */\r\n maxVertexUniformVectors: number;\r\n /** Maximum number of uniforms per fragment shader */\r\n maxFragmentUniformVectors: number;\r\n /** Defines if standard derivatives (dx/dy) are supported */\r\n standardDerivatives: boolean;\r\n /** Defines if s3tc texture compression is supported */\r\n s3tc?: WEBGL_compressed_texture_s3tc;\r\n /** Defines if s3tc sRGB texture compression is supported */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n s3tc_srgb?: WEBGL_compressed_texture_s3tc_srgb;\r\n /** Defines if pvrtc texture compression is supported */\r\n pvrtc: any; //WEBGL_compressed_texture_pvrtc;\r\n /** Defines if etc1 texture compression is supported */\r\n etc1: any; //WEBGL_compressed_texture_etc1;\r\n /** Defines if etc2 texture compression is supported */\r\n etc2: any; //WEBGL_compressed_texture_etc;\r\n /** Defines if astc texture compression is supported */\r\n astc: any; //WEBGL_compressed_texture_astc;\r\n /** Defines if bptc texture compression is supported */\r\n bptc: any; //EXT_texture_compression_bptc;\r\n /** Defines if float textures are supported */\r\n textureFloat: boolean;\r\n /** Defines if vertex array objects are supported */\r\n vertexArrayObject: boolean;\r\n /** Gets the webgl extension for anisotropic filtering (null if not supported) */\r\n textureAnisotropicFilterExtension?: EXT_texture_filter_anisotropic;\r\n /** Gets the maximum level of anisotropy supported */\r\n maxAnisotropy: number;\r\n /** Defines if instancing is supported */\r\n instancedArrays: boolean;\r\n /** Defines if 32 bits indices are supported */\r\n uintIndices: boolean;\r\n /** Defines if high precision shaders are supported */\r\n highPrecisionShaderSupported: boolean;\r\n /** Defines if depth reading in the fragment shader is supported */\r\n fragmentDepthSupported: boolean;\r\n /** Defines if float texture linear filtering is supported*/\r\n textureFloatLinearFiltering: boolean;\r\n /** Defines if rendering to float textures is supported */\r\n textureFloatRender: boolean;\r\n /** Defines if half float textures are supported*/\r\n textureHalfFloat: boolean;\r\n /** Defines if half float texture linear filtering is supported*/\r\n textureHalfFloatLinearFiltering: boolean;\r\n /** Defines if rendering to half float textures is supported */\r\n textureHalfFloatRender: boolean;\r\n /** Defines if textureLOD shader command is supported */\r\n textureLOD: boolean;\r\n /** Defines if draw buffers extension is supported */\r\n drawBuffersExtension: boolean;\r\n /** Defines if depth textures are supported */\r\n depthTextureExtension: boolean;\r\n /** Defines if float color buffer are supported */\r\n colorBufferFloat: boolean;\r\n /** Gets disjoint timer query extension (null if not supported) */\r\n timerQuery?: EXT_disjoint_timer_query;\r\n /** Defines if timestamp can be used with timer query */\r\n canUseTimestampForTimerQuery: boolean;\r\n /** Defines if occlusion queries are supported by the engine */\r\n supportOcclusionQuery: boolean;\r\n /** Defines if multiview is supported (https://www.khronos.org/registry/webgl/extensions/WEBGL_multiview/) */\r\n multiview?: any;\r\n /** Defines if oculus multiview is supported (https://developer.oculus.com/documentation/oculus-browser/latest/concepts/browser-multiview/) */\r\n oculusMultiview?: any;\r\n /** Function used to let the system compiles shaders in background */\r\n parallelShaderCompile?: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n COMPLETION_STATUS_KHR: number;\r\n };\r\n /** Max number of texture samples for MSAA */\r\n maxMSAASamples: number;\r\n /** Defines if the blend min max extension is supported */\r\n blendMinMax: boolean;\r\n /** In some iOS + WebGL1, gl_InstanceID (and gl_InstanceIDEXT) is undefined even if instancedArrays is true. So don't use gl_InstanceID in those cases */\r\n canUseGLInstanceID: boolean;\r\n /** Defines if gl_vertexID is available */\r\n canUseGLVertexID: boolean;\r\n /** Defines if compute shaders are supported by the engine */\r\n supportComputeShaders: boolean;\r\n /** Defines if sRGB texture formats are supported */\r\n supportSRGBBuffers: boolean;\r\n /** Defines if transform feedbacks are supported */\r\n supportTransformFeedbacks: boolean;\r\n /** Defines if texture max level are supported */\r\n textureMaxLevel: boolean;\r\n\r\n /** Defines the maximum layer count for a 2D Texture array. */\r\n texture2DArrayMaxLayerCount: number;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"engineCapabilities.js","sourceRoot":"","sources":["../../../../lts/core/generated/Engines/engineCapabilities.ts"],"names":[],"mappings":"","sourcesContent":["/**\r\n * Interface used to describe the capabilities of the engine relatively to the current browser\r\n */\r\nexport interface EngineCapabilities {\r\n /** Maximum textures units per fragment shader */\r\n maxTexturesImageUnits: number;\r\n /** Maximum texture units per vertex shader */\r\n maxVertexTextureImageUnits: number;\r\n /** Maximum textures units in the entire pipeline */\r\n maxCombinedTexturesImageUnits: number;\r\n /** Maximum texture size */\r\n maxTextureSize: number;\r\n /** Maximum texture samples */\r\n maxSamples?: number;\r\n /** Maximum cube texture size */\r\n maxCubemapTextureSize: number;\r\n /** Maximum render texture size */\r\n maxRenderTextureSize: number;\r\n /** Maximum number of vertex attributes */\r\n maxVertexAttribs: number;\r\n /** Maximum number of varyings */\r\n maxVaryingVectors: number;\r\n /** Maximum number of uniforms per vertex shader */\r\n maxVertexUniformVectors: number;\r\n /** Maximum number of uniforms per fragment shader */\r\n maxFragmentUniformVectors: number;\r\n /** Defines if standard derivatives (dx/dy) are supported */\r\n standardDerivatives: boolean;\r\n /** Defines if s3tc texture compression is supported */\r\n s3tc?: WEBGL_compressed_texture_s3tc;\r\n /** Defines if s3tc sRGB texture compression is supported */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n s3tc_srgb?: WEBGL_compressed_texture_s3tc_srgb;\r\n /** Defines if pvrtc texture compression is supported */\r\n pvrtc: any; //WEBGL_compressed_texture_pvrtc;\r\n /** Defines if etc1 texture compression is supported */\r\n etc1: any; //WEBGL_compressed_texture_etc1;\r\n /** Defines if etc2 texture compression is supported */\r\n etc2: any; //WEBGL_compressed_texture_etc;\r\n /** Defines if astc texture compression is supported */\r\n astc: any; //WEBGL_compressed_texture_astc;\r\n /** Defines if bptc texture compression is supported */\r\n bptc: any; //EXT_texture_compression_bptc;\r\n /** Defines if float textures are supported */\r\n textureFloat: boolean;\r\n /** Defines if vertex array objects are supported */\r\n vertexArrayObject: boolean;\r\n /** Gets the webgl extension for anisotropic filtering (null if not supported) */\r\n textureAnisotropicFilterExtension?: EXT_texture_filter_anisotropic;\r\n /** Gets the maximum level of anisotropy supported */\r\n maxAnisotropy: number;\r\n /** Defines if instancing is supported */\r\n instancedArrays: boolean;\r\n /** Defines if 32 bits indices are supported */\r\n uintIndices: boolean;\r\n /** Defines if high precision shaders are supported */\r\n highPrecisionShaderSupported: boolean;\r\n /** Defines if depth reading in the fragment shader is supported */\r\n fragmentDepthSupported: boolean;\r\n /** Defines if float texture linear filtering is supported*/\r\n textureFloatLinearFiltering: boolean;\r\n /** Defines if rendering to float textures is supported */\r\n textureFloatRender: boolean;\r\n /** Defines if half float textures are supported*/\r\n textureHalfFloat: boolean;\r\n /** Defines if half float texture linear filtering is supported*/\r\n textureHalfFloatLinearFiltering: boolean;\r\n /** Defines if rendering to half float textures is supported */\r\n textureHalfFloatRender: boolean;\r\n /** Defines if textureLOD shader command is supported */\r\n textureLOD: boolean;\r\n /** Defines if texelFetch shader command is supported */\r\n texelFetch: boolean;\r\n /** Defines if draw buffers extension is supported */\r\n drawBuffersExtension: boolean;\r\n /** Defines if depth textures are supported */\r\n depthTextureExtension: boolean;\r\n /** Defines if float color buffer are supported */\r\n colorBufferFloat: boolean;\r\n /** Gets disjoint timer query extension (null if not supported) */\r\n timerQuery?: EXT_disjoint_timer_query;\r\n /** Defines if timestamp can be used with timer query */\r\n canUseTimestampForTimerQuery: boolean;\r\n /** Defines if occlusion queries are supported by the engine */\r\n supportOcclusionQuery: boolean;\r\n /** Defines if multiview is supported (https://www.khronos.org/registry/webgl/extensions/WEBGL_multiview/) */\r\n multiview?: any;\r\n /** Defines if oculus multiview is supported (https://developer.oculus.com/documentation/oculus-browser/latest/concepts/browser-multiview/) */\r\n oculusMultiview?: any;\r\n /** Function used to let the system compiles shaders in background */\r\n parallelShaderCompile?: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n COMPLETION_STATUS_KHR: number;\r\n };\r\n /** Max number of texture samples for MSAA */\r\n maxMSAASamples: number;\r\n /** Defines if the blend min max extension is supported */\r\n blendMinMax: boolean;\r\n /** In some iOS + WebGL1, gl_InstanceID (and gl_InstanceIDEXT) is undefined even if instancedArrays is true. So don't use gl_InstanceID in those cases */\r\n canUseGLInstanceID: boolean;\r\n /** Defines if gl_vertexID is available */\r\n canUseGLVertexID: boolean;\r\n /** Defines if compute shaders are supported by the engine */\r\n supportComputeShaders: boolean;\r\n /** Defines if sRGB texture formats are supported */\r\n supportSRGBBuffers: boolean;\r\n /** Defines if transform feedbacks are supported */\r\n supportTransformFeedbacks: boolean;\r\n /** Defines if texture max level are supported */\r\n textureMaxLevel: boolean;\r\n\r\n /** Defines the maximum layer count for a 2D Texture array. */\r\n texture2DArrayMaxLayerCount: number;\r\n}\r\n"]}
|
package/Engines/nativeEngine.js
CHANGED
|
@@ -174,6 +174,7 @@ export class NativeEngine extends Engine {
|
|
|
174
174
|
textureHalfFloatLinearFiltering: false,
|
|
175
175
|
textureHalfFloatRender: false,
|
|
176
176
|
textureLOD: true,
|
|
177
|
+
texelFetch: false,
|
|
177
178
|
drawBuffersExtension: false,
|
|
178
179
|
depthTextureExtension: false,
|
|
179
180
|
vertexArrayObject: true,
|