如何相对于边界框定位相机以显示整个视图?

时间:2015-05-19 14:44:01

标签: javascript three.js

我试图在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/

期待一个答案!

0 个答案:

没有答案