我在 THREE.JS 中手动设置了透视相机
的位置
和fov
。它的行为符合预期。但是,当我稍后尝试通过 TrackBall Controls
与场景
进行交互时,它只是显示黑屏,没有错误。
相关代码:
var bbox = new THREE.Box3().setFromObject(scene);
var center = bbox.getCenter();
var size = bbox.getSize();
// update some controls properties
controls.target.set(center.x, center.y, center.z);
// position the camera on the y axis
camera.position.set(center.x, center.y - size.y, center.z);
// fit FOV
var dist = size.y / 2;
var fov = 2 * Math.atan( size.z / ( 2 * dist ) ) * ( 180 / Math.PI );
camera.fov = fov;
camera.updateProjectionMatrix();
我缺少哪一步才能与场景正确交互
谢谢
====编辑
基于接受的答案的工作 fiddle :Fiddle
最佳答案
我认为当相机“向上”位置平行于相机位置和目标定义的矢量时,不可能正确投影情况。相机向上位置应指定如何在与从相机位置到目标的矢量正交的平面中定向 View ,但如果沿该平面的camera.up 分量为零,则无法工作。在您的代码中:
- 相机“向上”位置是默认的 (0,1,0)
- 从相机位置到相机目标的向量为 (0,size.y,0)
最简单的解决方法可能是指定一个不同的相机“向上”,即
camera.up = new THREE.Vector3(0,0,1.);
或任何其他不平行于 y 方向的向量。
关于javascript - 使用轨迹球控件手动设置相机位置和视场(THREEJS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43909459/