我如何实现ZoomAll功能从任何相机角度在Three.js

How can I implement ZoomAll functionality from any camera angle in Three.js?

本文关键字:相机 任何 js Three 功能 何实现 实现 ZoomAll      更新时间:2023-09-26

我有一个场景,有许多Object3D对象包含块,圆柱体和网格。我也有一个透视相机和使用轨迹球控制。我需要的是一种方法来设置相机的位置,而不修改FOV或相机角度,并确保场景中的所有对象都在屏幕上可见。我已经成功地使用了预设的顶部、底部、左侧和右侧视图,使用了整个场景的边界框,但我需要这在任何相机角度都能工作,因为用户可以使用轨迹球控件将视图旋转到任何位置。

如果有一种方法可以根据相机位置,目标和对象列表获得2d边界矩形,我想我可以让它工作,但我很难找到如何做到这一点。

功能是这样的:在一个包含许多物体的场景中,用户用鼠标将相机旋转到任意位置,然后点击"全部缩放"按钮。然后,相机被放大(移动)或缩小(保持FOV恒定),使所有对象适合屏幕。

如何旋转和平移整个场景,使相机位于一个看着原点的轴上。

从那里得到边界框,计算相机所需的距离并平移相机。

然后旋转并平移整个画面