我试图在three.js中实现类似“Zoom Extents”的功能。启动此功能后,相机应进行缩放,以便在屏幕上显示场景中的所有对象。我到目前为止的代码是:
function fitAll(bbox)
{
// create an helper
helper = bbox;
// get the bounding sphere
var boundingSphere = helper.box.getBoundingSphere();
// calculate the distance from the center of the sphere
// and subtract the radius to get the real distance.
var center = boundingSphere.center;
var radius = boundingSphere.radius;
var distance = center.distanceTo(camera.position);
var realHeight = Math.abs(helper.box.max.y - helper.box.min.y);
var fov = 2 * Math.atan( ( realHeight / (window.innerWidth / window.innerHeight) ) / ( 2 * distance )) * ( 180 / Math.PI );
camera.fov = fov;
camera.updateProjectionMatrix();
}
其中bbox是一个有边界框的对象(在本例中我使用了场景中所有对象定义的边界框)。
当我使用该功能时,相机会查看边界框的中点并稍微调整一下fov。之后,屏幕上只能看到一部分边界框。似乎边界框的中点与摄像机中点之间的距离不正确。因此,我的问题是:如何将相机放置在距离边界框的正确距离内,以便屏幕上的所有内容都能显示?
另见我的jsfiddle:https://jsfiddle.net/MS_DOS_86/ytfk6heg/1/
期待一个答案!