我有一个球体居中放置在相机前面,并且球体的半径和距离都已知。如何调整相机的视场(FOV),以使相机在任意视口大小内完全适合球体?

Image of the angle I'm looking for

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

最佳答案

为了调整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

10-07 17:51