Моя проблема сейчас в том, что когда я переключаюсь с ортогональной камеры на перспективную, я не всегда могу правильно рассчитать положение камеры. Вот мой код:
function toPerspective() {
var fov_y = 60;
var depht_s = Math.tan(fov_y / 2.0 * Math.PI / 180.0) * 2.0;
var size_y = cameraOrtho.top * 2;
var Z = size_y / depht_s;
var normal = cameraPerspective.position.normalize();
cameraPerspective.position.copy(normal.multiplyScalar(Z));
//controls.update();
cameraPerspective.updateProjectionMatrix();
};
function toOrthographic() {
var fov_y = 60;
var depht_s = Math.tan(fov_y / 2.0 * Math.PI / 180.0) * 2.0;
var Z = activeCamera.position.distanceTo(controls.target);
var size_y = depht_s * Z;
var size_x = depht_s * Z * aspect;
cameraOrtho.left = -size_x / 2;
cameraOrtho.right = size_x / 2;
cameraOrtho.top = size_y / 2;
cameraOrtho.bottom = -size_y / 2;
cameraOrtho.zoom = 1;
//cameraOrtho.updateProjectionMatrix();
};
function onKeyDown(event) {
switch (event.keyCode) {
case 79: /*O*/
if (type === "Ortho") return;
var old = controls.target.clone();
cameraOrtho.position.copy(cameraPerspective.position);
activeCamera = cameraOrtho;
controls.object = activeCamera;
toOrthographic();
controls.update();
activeCamera.updateProjectionMatrix();
type = "Ortho"
break;
case 80: /*P*/
if (type === "Perspective") return;
var old = controls.target.clone();
cameraPerspective.position.copy(cameraOrtho.position);
activeCamera = cameraPerspective;
controls.object = activeCamera;
toPerspective();
controls.update();
activeCamera.updateProjectionMatrix();
type = "Perspective"
break;
}
console.log(activeCamera);
}
Переключение перспективы камеры на метод ортогональной камеры по этой ссылке: Как переключаться между камерами Perspective и Orthographi c, сохраняя размер нужного объекта .
С перспективной камерой, используя OrbitControls, чтобы щелкнуть правой кнопкой мыши по Панорамированию, затем переключение на ортогональную камеру снова покажет смещение. Но я не знаю, в чем проблема. Надеюсь, кто-нибудь может мне помочь, спасибо!