2

我在 THREE.JS 中手动设置position和。它的行为符合预期。但是,一旦我尝试通过 与后者进行交互,它只会显示黑屏,没有错误。fovperspective camerasceneTrackBall Controls

JS小提琴

相关代码:

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();

为了能够与scene

谢谢

==== 编辑

基于公认答案的工作小提琴:小提琴

4

1 回答 1

2

我认为当相机“向上”位置与相机位置和目标定义的矢量平行时,无法正确投影案例。相机向上位置应指定如何在与从相机位置到目标的矢量正交的平面中定向视图,但如果沿该平面的 camera.up 分量为零,则它无法工作。在您的代码中:

  • 相机“向上”位置是默认的 (0,1,0)
  • 从相机位置到相机目标的矢量是 (0,size.y,0)

最简单的解决方法可能是指定不同的相机“向上”,即

camera.up = new THREE.Vector3(0,0,1.);

或任何其他不平行于 y 方向的向量。

于 2017-05-11T16:25:33.390 回答