如何在透视相机和正交相机之间切换并保持所需对象的大小

zlo*_*lon 1 javascript orthographic perspectivecamera coordinate-transformation three.js

我尝试在脚本中在透视相机和正交相机之间切换。我希望物体处于一定深度以保持其投影尺寸。我放弃了去理解几何......

您能否提供一些简单教程的链接,对我来说太复杂了。

对于position.z==0我的对象有:

perspCamera = new THREE.PerspectiveCamera(45, W / H, 1, 1000);
perspCamera.position.z = 100;

var S=Math.tan((45/180)*Math.PI)*100;
orthoCamera = new THREE.OrthographicCamera( -S, S, S, -S, 1, 1000 );
Run Code Online (Sandbox Code Playgroud)

这是不正确的。

更新:

我明白了,我将用 codepen 链接发布答案

Rab*_*d76 5

透视投影时,Z 距离与尺寸之间的关系为:

var fov_y   = 45;
var depht_s = Math.tan(fov_y/2.0 * Math.PI/180.0) * 2.0;
Run Code Online (Sandbox Code Playgroud)

所以正交投影必须是(THREE.OrthographicCamera):

var Z      = 100;
var aspect = W / H;
var size_y = depht_s * Z;
var size_x = depht_s * Z * aspect; 

orthoCamera = new THREE.OrthographicCamera(
    -size_x/2,  size_x/2,
     size_y/2, -size_y/2,
     1, 1000 );
Run Code Online (Sandbox Code Playgroud)