Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
3d 在Three.Js中使对象正好适合摄影机平截头体_3d_Three.js_Perspectivecamera_Frustum - Fatal编程技术网

3d 在Three.Js中使对象正好适合摄影机平截头体

3d 在Three.Js中使对象正好适合摄影机平截头体,3d,three.js,perspectivecamera,frustum,3d,Three.js,Perspectivecamera,Frustum,我试图使一个物体适合相机的截锥体,我用了所有的三角法,这是我使用的代码 var setupCamera = function() { aspectRatio = window.innerWidth / window.innerHeight camera = new THREE.PerspectiveCamera( 45, aspectRatio, 1, 10000 ); scene.add(camera); } var updateCamera = function()

我试图使一个物体适合相机的截锥体,我用了所有的三角法,这是我使用的代码

var setupCamera = function() {
    aspectRatio = window.innerWidth / window.innerHeight
    camera = new THREE.PerspectiveCamera( 45, aspectRatio, 1, 10000 );
    scene.add(camera);
}

var updateCamera = function() {
    var height = mesh1_BB.max.y;

    var width = mesh1_BB.max.x - mesh1_BB.min.x;
    var vertical_FOV = camera.fov * (Math.PI/ 180);

    var max_z = mesh1_BB.max.z;

    var horizontal_FOV = 2 * Math.atan (Math.tan (vertical_FOV/2) * aspectRatio);

    var distance_vertical = height / (2 * Math.tan(vertical_FOV/2));
    // alert ('vertical' + distance_vertical);
    var distance_horizontal = width / (2 * Math.tan(horizontal_FOV/2));
    // alert ('horizontal' + distance_horizontal);
    var z_distance = distance_vertical >= distance_horizontal? distance_vertical : distance_horizontal;

    camera.position.z = z_distance + max_z;
    camera.position.y = 0 ;
    camera.position.x = 0;
}
虽然我认为摄像机距离的计算是正确的,但我得到的结果是:

我认为问题在于改变相机的y位置,并将其放在相机上。position.y=高度;但我得到的是:

我想要的结果如下(这是我通过鼠标右键平移并将其向上拖动直到它适合整个画布框架获得的结果):

我真的希望你能帮上忙,因为这一整天都让我发疯;-)


非常感谢

我没有检查您的距离计算,但是您可以沿着z轴向下看,而对象没有垂直居中于0。把你的
camera.y
放在
mesh1\u BB.max.y/2
应该可以解决这个问题


如果不想移动相机,至少将其指向对象的实际中心。在这种情况下,使用(轴对齐)边界框不再是100%正确的

如何将相机安装到物体上:非常感谢您的快速回答。我确实将camera.y更改为mesh1_BB.max.y/2,但是我得到的结果与原始帖子中的第二张图像非常相似。在实验和放置一个非常大的摄像头.y时,摄像头一直指向(0,0,0)。我认为这是问题的一部分,相机应该指向前方,而不是0,0,0…轨迹球控制干扰了我的相机属性。将其设置为高度/2非常有用,非常感谢!!!