javascript - 使用轨迹球控件手动设置相机位置和视场(THREEJS)

标签 javascript three.js controls perspectivecamera trackball

我在 THREE.JS 中手动设置了透视相机位置fov。它的行为符合预期。但是,当我稍后尝试通过 TrackBall Controls场景进行交互时,它只是显示黑屏,没有错误。

JS Fiddle

相关代码:

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/

相关文章:

javascript - webgl Three.js - 如何显示 Sprite ?渲染错误 : Uncaught TypeError: Cannot read property 'x' of undefined at SpritePlugin.

c# - WinForms/C# : Adding items to Combox and controlling the Item value (numeric)

c# - 如何从 Windows 窗体中删除默认控制按钮

Javascript Circle slider 度数到时间

javascript - 如何在编辑ajax中选择laravel选项

three.js - Raycast 对象以使用 Three.js 启用鼠标单击事件

javascript - 添加纹理到 ExtrudeGeometry

java - Java 中动态命名类实例

TypeScript 文件中的 JavaScript 智能感知

javascript - 自动填充Google map 搜索栏(地址选择器)