Math Three.js计算填充屏幕所需的对象距离

Math Three.js计算填充屏幕所需的对象距离,math,3d,three.js,Math,3d,Three.js,我已经看到了很多关于如何缩放相机以使对象填满屏幕的问题,但我正在尝试移动对象以填满屏幕 我一直在使用原始照片像素大小尝试类似的方法,这些对象已缩放: var dist = object.originalSize.height > $(window).height() || object.originalSize.width > $(window).width() ? ( $(window).height() / objec

我已经看到了很多关于如何缩放相机以使对象填满屏幕的问题,但我正在尝试移动对象以填满屏幕

我一直在使用原始照片像素大小尝试类似的方法,这些对象已缩放:

    var dist = object.originalSize.height > $(window).height() 
            || object.originalSize.width  >  $(window).width()
            ? ( $(window).height() / object.originalSize.height ) * 100 
            : 10;

    var pLocal = new THREE.Vector3( 0, 0, -dist);
    var target = pLocal.applyMatrix4( camera.matrixWorld );
    var tweenMove = new TWEEN.Tween(object.position).to(target, 1500).easing(TWEEN.Easing.Cubic.InOut);
然而,为了得到一个向量来移动对象,我无法让对象填充屏幕。我需要计算一个物体需要有多远才能填满屏幕,你知道数学吗

该对象是Object3D,根据其类型具有不同的子对象

我知道原始照片的尺寸object.originalSize.height,我还知道几何体的放大倍数为2

任何关于如何计算摄像机所需距离以确保物体位于屏幕边界内的提示,我们都将不胜感激


我还知道项目的边界框,即从1024到128

这是可行的,不知道为什么

    var vFOV = camera.fov * Math.PI / 180; 
    var ratio = 2 * Math.tan( vFOV / 2 );
    var screen = ratio * (window.innerWidth / window.innerHeight) ; 
    var size = getCompoundBoundingBox( object ).max.y;
    var dist = (size/screen) / 4; 

我不知道什么是object.originalSize,但我怀疑你能否定义3d对象的原始大小(以像素为单位)。您不应该尝试以不同的单位比较3d世界长度单位与像素,这就像说1.2公里大于1英里,因为1.2>1原始大小和窗口高度都以像素为单位返回。所以比较它们是正确的。如果它们是比较的正确值,那么这是一个更合适的问题。10的值是将对象放置在相机前面的z值,因此我认为缩放到100将有助于获得所需的正确距离。您如何配置您的相机?相机=新的3.PerspectiveCamera75,window.innerWidth/window.innerHeight,1,1024;你需要的所有方程式都在里面。