使用轨迹球控制时重置摄像机位置/旋转
Reset camera position/rotation when using TrackballControls
我有一个带有threejs的webgl应用程序。它使用轨迹球控件来控制相机。我有一个按钮,我想用它来重置场景,所以,相机应该进入初始状态。我目前有这个(jquery):
$('#reset').click(function() {
camera.position.set(0, 0 , 400);
camera.rotation.set(0, 0, 0);
});
但奇怪的是,当我记录位置和旋转时,它们并没有达到应有的状态,相机也没有在正确的位置。我做错了什么,有更好的方法吗?
在错误修复之前(请参阅对Yuval Adam的回答的评论),一个可行的(虽然很脏)的解决方案是从场景中移除摄像机,然后创建一个新摄像机,向其添加控件并将新摄像机添加到场景中。
更新:轨迹球控件现在有一个reset()
方法。补间完成后调用它,一切都很好!(https://github.com/mrdoob/three.js/commit/4f800f61809560c434bbbf12e76c3931e8e8c0fb)
camera.position
应始终是最新的,请确保您查看的是正确的camera
并且它没有超出范围。理想情况下,它应该是窗口上的全局变量。
关于 camera.rotation
,您应该检查您的相机是否具有:
camera.useQuaternion == true
某些控件在相机上将此设置为先决条件。如果是这种情况,相机角度由camera.quaternion
而不是camera.rotation
设置。当然,TrackballControls
没有这种行为(至少从 r49 开始)。
编辑:从 https://github.com/mrdoob/three.js/issues/821 看来,手动调整camera
确实存在错误,这会弄乱TrackballControls
。
不要将 camera.rotate 更改为 (0,0,0),而是将 camera.up 更改为 (0,1,0)。您也可以使用补间来为其设置动画。
- jquery试图按名称获取按钮位置
- 我可以获得相对于被点击元素的确切点击位置吗
- 谷歌地图固定位置覆盖
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 循环比赛位置算法
- es6 相当于下划线查找位置
- jQuery循环在特定位置暂停
- 引导程序:在导航栏中,显示悬停在单个位置的基于Li Link的不同内容
- 自定义函数中的光标位置
- 安卓平台上的QWebView HTML5地理位置
- DIV并排,位置不正确
- 使用jQuery更改元素的顶部位置
- 在谷歌地图上绘制位置数据库
- 跟踪jqplot垂直折线图的鼠标位置
- 设置画布渲染器的x和y位置
- 固定位置菜单时滚动,直到它击中一个相对容器的底部
- 使用轨迹球控制时重置摄像机位置/旋转
- 在 WebGL 中从头到尾设置摄像机位置的动画
- 摄像机在特定位置.three.js
- 如何在Three.js中用鼠标拖动改变摄像机位置