|
@@ -24614,6 +24614,7 @@ var BABYLON;
|
|
|
this._rigCameras[i].minZ = this.minZ;
|
|
|
this._rigCameras[i].maxZ = this.maxZ;
|
|
|
this._rigCameras[i].fov = this.fov;
|
|
|
+ this._rigCameras[i].upVector.copyFrom(this.upVector);
|
|
|
}
|
|
|
// only update viewport when ANAGLYPH
|
|
|
if (this.cameraRigMode === Camera.RIG_MODE_STEREOSCOPIC_ANAGLYPH) {
|
|
@@ -49055,6 +49056,8 @@ var BABYLON;
|
|
|
/** @hidden */
|
|
|
_this._currentTarget = BABYLON.Vector3.Zero();
|
|
|
/** @hidden */
|
|
|
+ _this._initialFocalDistance = 1;
|
|
|
+ /** @hidden */
|
|
|
_this._viewMatrix = BABYLON.Matrix.Zero();
|
|
|
/** @hidden */
|
|
|
_this._camMatrix = BABYLON.Matrix.Zero();
|
|
@@ -49174,6 +49177,7 @@ var BABYLON;
|
|
|
/** @hidden */
|
|
|
TargetCamera.prototype.setTarget = function (target) {
|
|
|
this.upVector.normalize();
|
|
|
+ this._initialFocalDistance = target.subtract(this.position).length();
|
|
|
if (this.position.z === target.z) {
|
|
|
this.position.z += BABYLON.Epsilon;
|
|
|
}
|
|
@@ -49374,10 +49378,8 @@ var BABYLON;
|
|
|
//provisionnaly using _cameraRigParams.stereoHalfAngle instead of calculations based on _cameraRigParams.interaxialDistance:
|
|
|
var leftSign = (this.cameraRigMode === BABYLON.Camera.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED) ? 1 : -1;
|
|
|
var rightSign = (this.cameraRigMode === BABYLON.Camera.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED) ? -1 : 1;
|
|
|
- this._getRigCamPosition(this._cameraRigParams.stereoHalfAngle * leftSign, camLeft.position);
|
|
|
- this._getRigCamPosition(this._cameraRigParams.stereoHalfAngle * rightSign, camRight.position);
|
|
|
- camLeft.setTarget(this.getTarget());
|
|
|
- camRight.setTarget(this.getTarget());
|
|
|
+ this._getRigCamPositionAndTarget(this._cameraRigParams.stereoHalfAngle * leftSign, camLeft);
|
|
|
+ this._getRigCamPositionAndTarget(this._cameraRigParams.stereoHalfAngle * rightSign, camRight);
|
|
|
break;
|
|
|
case BABYLON.Camera.RIG_MODE_VR:
|
|
|
if (camLeft.rotationQuaternion) {
|
|
@@ -49394,13 +49396,17 @@ var BABYLON;
|
|
|
}
|
|
|
_super.prototype._updateRigCameras.call(this);
|
|
|
};
|
|
|
- TargetCamera.prototype._getRigCamPosition = function (halfSpace, result) {
|
|
|
+ TargetCamera.prototype._getRigCamPositionAndTarget = function (halfSpace, rigCamera) {
|
|
|
var target = this.getTarget();
|
|
|
- BABYLON.Matrix.TranslationToRef(-target.x, -target.y, -target.z, TargetCamera._TargetTransformMatrix);
|
|
|
+ target.subtractToRef(this.position, TargetCamera._TargetFocalPoint);
|
|
|
+ TargetCamera._TargetFocalPoint.normalize().scaleInPlace(this._initialFocalDistance);
|
|
|
+ var newFocalTarget = TargetCamera._TargetFocalPoint.addInPlace(this.position);
|
|
|
+ BABYLON.Matrix.TranslationToRef(-newFocalTarget.x, -newFocalTarget.y, -newFocalTarget.z, TargetCamera._TargetTransformMatrix);
|
|
|
TargetCamera._TargetTransformMatrix.multiplyToRef(BABYLON.Matrix.RotationY(halfSpace), TargetCamera._RigCamTransformMatrix);
|
|
|
- BABYLON.Matrix.TranslationToRef(target.x, target.y, target.z, TargetCamera._TargetTransformMatrix);
|
|
|
+ BABYLON.Matrix.TranslationToRef(newFocalTarget.x, newFocalTarget.y, newFocalTarget.z, TargetCamera._TargetTransformMatrix);
|
|
|
TargetCamera._RigCamTransformMatrix.multiplyToRef(TargetCamera._TargetTransformMatrix, TargetCamera._RigCamTransformMatrix);
|
|
|
- BABYLON.Vector3.TransformCoordinatesToRef(this.position, TargetCamera._RigCamTransformMatrix, result);
|
|
|
+ BABYLON.Vector3.TransformCoordinatesToRef(this.position, TargetCamera._RigCamTransformMatrix, rigCamera.position);
|
|
|
+ rigCamera.setTarget(newFocalTarget);
|
|
|
};
|
|
|
/**
|
|
|
* Gets the current object class name.
|
|
@@ -49411,6 +49417,7 @@ var BABYLON;
|
|
|
};
|
|
|
TargetCamera._RigCamTransformMatrix = new BABYLON.Matrix();
|
|
|
TargetCamera._TargetTransformMatrix = new BABYLON.Matrix();
|
|
|
+ TargetCamera._TargetFocalPoint = new BABYLON.Vector3();
|
|
|
__decorate([
|
|
|
BABYLON.serializeAsVector3()
|
|
|
], TargetCamera.prototype, "rotation", void 0);
|