Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确切换透视相机和正交相机?_Javascript_Camera - Fatal编程技术网

Javascript 如何正确切换透视相机和正交相机?

Javascript 如何正确切换透视相机和正交相机?,javascript,camera,Javascript,Camera,我现在的问题是,当我从正交摄影机切换到透视摄影机时,我无法始终正确计算摄影机的位置。 这是我的密码: 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;

我现在的问题是,当我从正交摄影机切换到透视摄影机时,我无法始终正确计算摄影机的位置。 这是我的密码:

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);

    }
透视摄影机从该链接切换到正交摄影机方法:

对于透视摄影机,使用轨道控制右键单击平移,然后再次切换到正交摄影机将显示偏移。但我不知道是什么问题。我希望有人能帮助我,谢谢