Three.js使用OrbitControls后修改相机旋转方向无效解决办法
作者:YanisWu
three.js是用javascript写的基于webGL的第三方3D库,下面这篇文章主要给大家介绍了关于Three.js使用OrbitControls后修改相机旋转方向无效的解决办法,文中通过代码介绍的非常详细,需要的朋友可以参考下
1.问题复现
在项目中添加了OrbitControls控制器来控制相机的旋转和平移,但是需要修改初始的相机角度,于是我把相机的角度进行修改,如下:
const camera = new THREE.PerspectiveCamera(75, viewport.offsetWidth / viewport.offsetHeight, 0.01, 20); camera.position.set(0,1,7); //修改相机初始角度 camera.rotation.set(0,-Math.PI/2,0); const controls = new OrbitControls(camera, renderer.domElement); controls.update();
运行项目后发现相机的位置并没有发生变化。原因是相机旋转和移动被OrbitControls控制器托管了。
2.解决方法
方法1.于是我尝试创建一个组,将相机加入组里,通过改变组的旋转角度从而改变相机的初始角度,如下:
const cameraRigY = new THREE.Group(); scene.add(cameraRigY); const camera = new THREE.PerspectiveCamera(75, viewport.offsetWidth / viewport.offsetHeight, 0.01, 20); camera.position.set(0,1,7); //相机加入组里 cameraRigY.add(camera); //修改整体相机Y轴旋转 cameraRigY.rotation.set(0,Math.PI/2,0); const controls = new OrbitControls(camera, renderer.domElement); controls.update();
进过测试,相机的初始角度修改成功了。
方法2:也可以设置焦点:OrbitControls控制器上有target用来设置焦点。相机角度和位置要同步修改才行。
controls.target = new THREE.Vector3(0, 0, 0);//控制焦点
3.重置相机
在相机旋转操作了之后,想重置到原来的状态,发现上诉方法也无效了。而OrbitControls控制器提供了两个方法来实现:
/** * Save the current state of the controls. This can later be * recovered with .reset. */ saveState(): void; /** * Reset the controls to their state from either the last time * the .saveState was called, or the initial state. */ reset(): void;
先调用saveState()方法保存当前的相机状态,然后使用reset()方法重置到之前保存的状态即可。
总结
到此这篇关于Three.js使用OrbitControls后修改相机旋转方向无效解决办法的文章就介绍到这了,更多相关Three.js修改相机旋转方向无效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!