|
@@ -12208,59 +12208,56 @@ var BABYLON;
|
|
|
BABYLON.CameraInputTypes["FreeCameraTouchInput"] = FreeCameraTouchInput;
|
|
|
})(BABYLON || (BABYLON = {}));
|
|
|
|
|
|
-
|
|
|
var BABYLON;
|
|
|
(function (BABYLON) {
|
|
|
var FreeCameraDeviceOrientationInput = (function () {
|
|
|
function FreeCameraDeviceOrientationInput() {
|
|
|
- this._offsetX = null;
|
|
|
- this._offsetY = null;
|
|
|
- this._orientationGamma = 0;
|
|
|
- this._orientationBeta = 0;
|
|
|
- this._initialOrientationGamma = 0;
|
|
|
- this._initialOrientationBeta = 0;
|
|
|
- this.angularSensibility = 10000.0;
|
|
|
- this.moveSensibility = 50.0;
|
|
|
- this._resetOrientationGamma = this.resetOrientationGamma.bind(this);
|
|
|
- this._orientationChanged = this.orientationChanged.bind(this);
|
|
|
+ var _this = this;
|
|
|
+ this._screenOrientationAngle = 0;
|
|
|
+ this._screenQuaternion = new BABYLON.Quaternion();
|
|
|
+ this._alpha = 0;
|
|
|
+ this._beta = 0;
|
|
|
+ this._gamma = 0;
|
|
|
+ this._orientationChanged = function () {
|
|
|
+ _this._screenOrientationAngle = (window.orientation !== undefined ? +window.orientation : (window.screen.orientation && window.screen.orientation['angle'] ? window.screen.orientation.angle : 0));
|
|
|
+ _this._screenOrientationAngle = -BABYLON.Tools.ToRadians(_this._screenOrientationAngle / 2);
|
|
|
+ _this._screenQuaternion.copyFromFloats(0, Math.sin(_this._screenOrientationAngle), 0, Math.cos(_this._screenOrientationAngle));
|
|
|
+ };
|
|
|
+ this._deviceOrientation = function (evt) {
|
|
|
+ _this._alpha = evt.alpha;
|
|
|
+ _this._beta = evt.beta;
|
|
|
+ _this._gamma = evt.gamma;
|
|
|
+ };
|
|
|
+ this._constantTranform = new BABYLON.Quaternion(-Math.sqrt(0.5), 0, 0, Math.sqrt(0.5));
|
|
|
+ this._orientationChanged();
|
|
|
}
|
|
|
+ Object.defineProperty(FreeCameraDeviceOrientationInput.prototype, "camera", {
|
|
|
+ get: function () {
|
|
|
+ return this._camera;
|
|
|
+ },
|
|
|
+ set: function (camera) {
|
|
|
+ this._camera = camera;
|
|
|
+ if (!this._camera.rotationQuaternion)
|
|
|
+ this._camera.rotationQuaternion = new BABYLON.Quaternion();
|
|
|
+ },
|
|
|
+ enumerable: true,
|
|
|
+ configurable: true
|
|
|
+ });
|
|
|
FreeCameraDeviceOrientationInput.prototype.attachControl = function (element, noPreventDefault) {
|
|
|
- window.addEventListener("resize", this._resetOrientationGamma, false);
|
|
|
- window.addEventListener("deviceorientation", this._orientationChanged);
|
|
|
- };
|
|
|
- FreeCameraDeviceOrientationInput.prototype.resetOrientationGamma = function () {
|
|
|
- this._initialOrientationGamma = null;
|
|
|
- };
|
|
|
- FreeCameraDeviceOrientationInput.prototype.orientationChanged = function (evt) {
|
|
|
- if (!this._initialOrientationGamma) {
|
|
|
- this._initialOrientationGamma = evt.gamma;
|
|
|
- this._initialOrientationBeta = evt.beta;
|
|
|
- }
|
|
|
- this._orientationGamma = evt.gamma;
|
|
|
- this._orientationBeta = evt.beta;
|
|
|
- this._offsetY = (this._initialOrientationBeta - this._orientationBeta);
|
|
|
- this._offsetX = (this._initialOrientationGamma - this._orientationGamma);
|
|
|
+ window.addEventListener("orientationchange", this._orientationChanged);
|
|
|
+ window.addEventListener("deviceorientation", this._deviceOrientation);
|
|
|
};
|
|
|
FreeCameraDeviceOrientationInput.prototype.detachControl = function (element) {
|
|
|
- window.removeEventListener("resize", this._resetOrientationGamma);
|
|
|
- window.removeEventListener("deviceorientation", this._orientationChanged);
|
|
|
- this._orientationGamma = 0;
|
|
|
- this._orientationBeta = 0;
|
|
|
- this._initialOrientationGamma = 0;
|
|
|
- this._initialOrientationBeta = 0;
|
|
|
- this._offsetX = null;
|
|
|
- this._offsetY = null;
|
|
|
+ window.removeEventListener("orientationchange", this._orientationChanged);
|
|
|
+ window.removeEventListener("deviceorientation", this._deviceOrientation);
|
|
|
};
|
|
|
FreeCameraDeviceOrientationInput.prototype.checkInputs = function () {
|
|
|
- if (!this._offsetX) {
|
|
|
- return;
|
|
|
- }
|
|
|
- var camera = this.camera;
|
|
|
- camera.cameraRotation.y -= this._offsetX / this.angularSensibility;
|
|
|
- var speed = camera._computeLocalCameraSpeed();
|
|
|
- var direction = new BABYLON.Vector3(0, 0, speed * this._offsetY / this.moveSensibility);
|
|
|
- BABYLON.Matrix.RotationYawPitchRollToRef(camera.rotation.y, camera.rotation.x, 0, camera._cameraRotationMatrix);
|
|
|
- camera.cameraDirection.addInPlace(BABYLON.Vector3.TransformCoordinates(direction, camera._cameraRotationMatrix));
|
|
|
+ BABYLON.Quaternion.RotationYawPitchRollToRef(BABYLON.Tools.ToRadians(this._alpha), BABYLON.Tools.ToRadians(this._beta), -BABYLON.Tools.ToRadians(this._gamma), this.camera.rotationQuaternion);
|
|
|
+ this._camera.rotationQuaternion.multiplyInPlace(this._screenQuaternion);
|
|
|
+ this._camera.rotationQuaternion.multiplyInPlace(this._constantTranform);
|
|
|
+ //Mirror on XY Plane
|
|
|
+ this._camera.rotationQuaternion.z *= -1;
|
|
|
+ this._camera.rotationQuaternion.w *= -1;
|
|
|
};
|
|
|
FreeCameraDeviceOrientationInput.prototype.getTypeName = function () {
|
|
|
return "FreeCameraDeviceOrientationInput";
|
|
@@ -12268,12 +12265,6 @@ var BABYLON;
|
|
|
FreeCameraDeviceOrientationInput.prototype.getSimpleName = function () {
|
|
|
return "deviceOrientation";
|
|
|
};
|
|
|
- __decorate([
|
|
|
- BABYLON.serialize()
|
|
|
- ], FreeCameraDeviceOrientationInput.prototype, "angularSensibility", void 0);
|
|
|
- __decorate([
|
|
|
- BABYLON.serialize()
|
|
|
- ], FreeCameraDeviceOrientationInput.prototype, "moveSensibility", void 0);
|
|
|
return FreeCameraDeviceOrientationInput;
|
|
|
})();
|
|
|
BABYLON.FreeCameraDeviceOrientationInput = FreeCameraDeviceOrientationInput;
|
|
@@ -12913,6 +12904,7 @@ var BABYLON;
|
|
|
this._cameraTransformMatrix = BABYLON.Matrix.Zero();
|
|
|
this._cameraRotationMatrix = BABYLON.Matrix.Zero();
|
|
|
this._referencePoint = new BABYLON.Vector3(0, 0, 1);
|
|
|
+ this._defaultUpVector = new BABYLON.Vector3(0, 1, 0);
|
|
|
this._transformedReferencePoint = BABYLON.Vector3.Zero();
|
|
|
this._lookAtTemp = BABYLON.Matrix.Zero();
|
|
|
this._tempMatrix = BABYLON.Matrix.Zero();
|
|
@@ -12934,6 +12926,7 @@ var BABYLON;
|
|
|
_super.prototype._initCache.call(this);
|
|
|
this._cache.lockedTarget = new BABYLON.Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
|
|
|
this._cache.rotation = new BABYLON.Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
|
|
|
+ this._cache.rotationQuaternion = new BABYLON.Quaternion(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
|
|
|
};
|
|
|
TargetCamera.prototype._updateCache = function (ignoreParentClass) {
|
|
|
if (!ignoreParentClass) {
|
|
@@ -12952,6 +12945,8 @@ var BABYLON;
|
|
|
}
|
|
|
}
|
|
|
this._cache.rotation.copyFrom(this.rotation);
|
|
|
+ if (this.rotationQuaternion)
|
|
|
+ this._cache.rotationQuaternion.copyFrom(this.rotationQuaternion);
|
|
|
};
|
|
|
// Synchronized
|
|
|
TargetCamera.prototype._isSynchronizedViewMatrix = function () {
|
|
@@ -12960,7 +12955,7 @@ var BABYLON;
|
|
|
}
|
|
|
var lockedTargetPosition = this._getLockedTargetPosition();
|
|
|
return (this._cache.lockedTarget ? this._cache.lockedTarget.equals(lockedTargetPosition) : !lockedTargetPosition)
|
|
|
- && this._cache.rotation.equals(this.rotation);
|
|
|
+ && (this.rotationQuaternion ? this.rotationQuaternion.equals(this._cache.rotationQuaternion) : this._cache.rotation.equals(this.rotation));
|
|
|
};
|
|
|
// Methods
|
|
|
TargetCamera.prototype._computeLocalCameraSpeed = function () {
|
|
@@ -12990,6 +12985,9 @@ var BABYLON;
|
|
|
if (isNaN(this.rotation.z)) {
|
|
|
this.rotation.z = 0;
|
|
|
}
|
|
|
+ if (this.rotationQuaternion) {
|
|
|
+ BABYLON.Quaternion.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this.rotationQuaternion);
|
|
|
+ }
|
|
|
};
|
|
|
TargetCamera.prototype.getTarget = function () {
|
|
|
return this._currentTarget;
|
|
@@ -13043,19 +13041,26 @@ var BABYLON;
|
|
|
}
|
|
|
_super.prototype._checkInputs.call(this);
|
|
|
};
|
|
|
- TargetCamera.prototype._getViewMatrix = function () {
|
|
|
- if (!this.lockedTarget) {
|
|
|
- // Compute
|
|
|
+ TargetCamera.prototype._updateCameraRotationMatrix = function () {
|
|
|
+ if (this.rotationQuaternion) {
|
|
|
+ this.rotationQuaternion.toRotationMatrix(this._cameraRotationMatrix);
|
|
|
+ //update the up vector!
|
|
|
+ BABYLON.Vector3.TransformNormalToRef(this._defaultUpVector, this._cameraRotationMatrix, this.upVector);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ BABYLON.Matrix.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this._cameraRotationMatrix);
|
|
|
if (this.upVector.x !== 0 || this.upVector.y !== 1.0 || this.upVector.z !== 0) {
|
|
|
BABYLON.Matrix.LookAtLHToRef(BABYLON.Vector3.Zero(), this._referencePoint, this.upVector, this._lookAtTemp);
|
|
|
- BABYLON.Matrix.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this._cameraRotationMatrix);
|
|
|
this._lookAtTemp.multiplyToRef(this._cameraRotationMatrix, this._tempMatrix);
|
|
|
this._lookAtTemp.invert();
|
|
|
this._tempMatrix.multiplyToRef(this._lookAtTemp, this._cameraRotationMatrix);
|
|
|
}
|
|
|
- else {
|
|
|
- BABYLON.Matrix.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this._cameraRotationMatrix);
|
|
|
- }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ TargetCamera.prototype._getViewMatrix = function () {
|
|
|
+ if (!this.lockedTarget) {
|
|
|
+ // Compute
|
|
|
+ this._updateCameraRotationMatrix();
|
|
|
BABYLON.Vector3.TransformCoordinatesToRef(this._referencePoint, this._cameraRotationMatrix, this._transformedReferencePoint);
|
|
|
// Computing target and final matrix
|
|
|
this.position.addToRef(this._transformedReferencePoint, this._currentTarget);
|
|
@@ -13067,9 +13072,9 @@ var BABYLON;
|
|
|
return this._viewMatrix;
|
|
|
};
|
|
|
TargetCamera.prototype._getVRViewMatrix = function () {
|
|
|
- BABYLON.Matrix.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this._cameraRotationMatrix);
|
|
|
+ this._updateCameraRotationMatrix();
|
|
|
BABYLON.Vector3.TransformCoordinatesToRef(this._referencePoint, this._cameraRotationMatrix, this._transformedReferencePoint);
|
|
|
- BABYLON.Vector3.TransformNormalToRef(this.upVector, this._cameraRotationMatrix, this._cameraRigParams.vrActualUp);
|
|
|
+ BABYLON.Vector3.TransformNormalToRef(this._defaultUpVector, this._cameraRotationMatrix, this._cameraRigParams.vrActualUp);
|
|
|
// Computing target and final matrix
|
|
|
this.position.addToRef(this._transformedReferencePoint, this._currentTarget);
|
|
|
BABYLON.Matrix.LookAtLHToRef(this.position, this._currentTarget, this._cameraRigParams.vrActualUp, this._cameraRigParams.vrWorkMatrix);
|
|
@@ -13084,9 +13089,13 @@ var BABYLON;
|
|
|
if (this.cameraRigMode !== BABYLON.Camera.RIG_MODE_NONE) {
|
|
|
var rigCamera = new TargetCamera(name, this.position.clone(), this.getScene());
|
|
|
if (this.cameraRigMode === BABYLON.Camera.RIG_MODE_VR) {
|
|
|
+ if (!this.rotationQuaternion) {
|
|
|
+ this.rotationQuaternion = new BABYLON.Quaternion();
|
|
|
+ }
|
|
|
rigCamera._cameraRigParams = {};
|
|
|
rigCamera._cameraRigParams.vrActualUp = new BABYLON.Vector3(0, 0, 0);
|
|
|
rigCamera._getViewMatrix = rigCamera._getVRViewMatrix;
|
|
|
+ rigCamera.rotationQuaternion = new BABYLON.Quaternion();
|
|
|
}
|
|
|
return rigCamera;
|
|
|
}
|
|
@@ -13113,9 +13122,8 @@ var BABYLON;
|
|
|
camRight.setTarget(this.getTarget());
|
|
|
break;
|
|
|
case BABYLON.Camera.RIG_MODE_VR:
|
|
|
- camLeft.rotation.x = camRight.rotation.x = this.rotation.x;
|
|
|
- camLeft.rotation.y = camRight.rotation.y = this.rotation.y;
|
|
|
- camLeft.rotation.z = camRight.rotation.z = this.rotation.z;
|
|
|
+ camLeft.rotationQuaternion.copyFrom(this.rotationQuaternion);
|
|
|
+ camRight.rotationQuaternion.copyFrom(this.rotationQuaternion);
|
|
|
camLeft.position.copyFrom(this.position);
|
|
|
camRight.position.copyFrom(this.position);
|
|
|
break;
|
|
@@ -43724,10 +43732,11 @@ var BABYLON;
|
|
|
function VRDeviceOrientationFreeCamera(name, position, scene, compensateDistortion) {
|
|
|
if (compensateDistortion === void 0) { compensateDistortion = true; }
|
|
|
_super.call(this, name, position, scene);
|
|
|
+ this.rotationQuaternion = new BABYLON.Quaternion();
|
|
|
var metrics = BABYLON.VRCameraMetrics.GetDefault();
|
|
|
metrics.compensateDistortion = compensateDistortion;
|
|
|
this.setCameraRigMode(BABYLON.Camera.RIG_MODE_VR, { vrCameraMetrics: metrics });
|
|
|
- this.inputs.addVRDeviceOrientation();
|
|
|
+ this.inputs.addDeviceOrientation();
|
|
|
}
|
|
|
VRDeviceOrientationFreeCamera.prototype.getTypeName = function () {
|
|
|
return "VRDeviceOrientationFreeCamera";
|
|
@@ -45150,28 +45159,18 @@ var BABYLON;
|
|
|
Object.defineProperty(DeviceOrientationCamera.prototype, "angularSensibility", {
|
|
|
//-- Begin properties for backward compatibility for inputs
|
|
|
get: function () {
|
|
|
- var deviceOrientation = this.inputs.attached["deviceOrientation"];
|
|
|
- if (deviceOrientation)
|
|
|
- return deviceOrientation.angularSensibility;
|
|
|
+ return 0;
|
|
|
},
|
|
|
set: function (value) {
|
|
|
- var deviceOrientation = this.inputs.attached["deviceOrientation"];
|
|
|
- if (deviceOrientation)
|
|
|
- deviceOrientation.angularSensibility = value;
|
|
|
},
|
|
|
enumerable: true,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(DeviceOrientationCamera.prototype, "moveSensibility", {
|
|
|
get: function () {
|
|
|
- var deviceOrientation = this.inputs.attached["deviceOrientation"];
|
|
|
- if (deviceOrientation)
|
|
|
- return deviceOrientation.moveSensibility;
|
|
|
+ return 0;
|
|
|
},
|
|
|
set: function (value) {
|
|
|
- var deviceOrientation = this.inputs.attached["deviceOrientation"];
|
|
|
- if (deviceOrientation)
|
|
|
- deviceOrientation.moveSensibility = value;
|
|
|
},
|
|
|
enumerable: true,
|
|
|
configurable: true
|