如何调整three.js透视摄像机的视野以适应球体?

时间:2017-06-30 15:20:02

标签: three.js trigonometry perspectivecamera

我的相机前面有一个球体,其半径和距离相机已知。如何调整摄像机的视野(FOV)以使摄像机与任意视口大小内的球体完全匹配?

Image of the angle I'm looking for

This answer类似,但我想调整FOV而不是相机的距离

1 个答案:

答案 0 :(得分:3)

为了调整FOV以适应球体,我需要使用反三角函数来计算从距离球体的距离和球体上最远的可见点形成的三角形的角度。

Image of the triangle that will give the correct angle

// to get the fov to fit the sphere into the camera
var vFOV = 2 * Math.asin(sphereRadius / distance);
// get the project's aspect ratio to calculate a horizontal fov
var aspect = this.width / this.height;
// more trig to calculate a horizontal fov, used to fit a sphere horizontally
var hFOV = 2 * Math.atan(Math.tan(vFOV / 2) / aspect);

这将以弧度给出答案。将hFOV或vFOV乘以fov * (180 / Math.PI)度并应用于camera.fov

我最初遇到了使用错误三角形的陷阱。作为this answer states “球体被剪裁是出于同样的原因,如果你站在一个大球体附近,你就看不到它的”北极“

不要这样做: Image of the wrong triangle for a cropped view