- 轨迹球控制器 TrackballControls。
非常常用。 - 轨道控制器 Orbit Controls
这个和轨迹球控制器类似。用的最多,可以设置上下旋转的角度(-90~90)。 - 翻滚控制器
- 飞行控制器
- 第一视角控制器
- MapControls
写控制器的时候有时候会这样写controls.update(clock.getDelta()),结果场景有多个动画需要更新的时候出现了意想不到的错误。
正确的方法是:渲染之前定义delta。不能在用的时候再次获取时间。和var width = window.innerWidth不一样,这个在更新的时候也需要更新,不能直接写width,否者不行。
function render() {
var delta = clock.getDelta();
requestAnimationFrame(render);
controls.update(delta); //要统一定义delta。
//camera.lookAt(new THREE.Vector3(0,8,0)); // 使用控制器就不能用这个功能
mixers[ i ].update(delta ); //不能再次获取clock.getDelta()
renderer.render(scene,camera);
}
camera.lookAt 函数在使用了相机控制器平移功能之后会有影响,互相干扰。建议不用。
controls = new OrbitControls(camera, renderer.domElement);renderer.domElement要写上,不然在使用dat.gui控件的时候,会干扰。拖动控件,也会旋转相机。
.
MapControls
controls = new THREE.MapControls(camera, renderer.domElement);
controls.enableDamping = true; //阻尼 需要更新
controls.dampingFactor = 0.25; //阻尼系数
controls.screenSpacePanning = true; // y轴移动
controls.minDistance = 100;
controls.maxDistance = 500;
controls.enableZoom = true; 缩放
controls.zoomSpeed = 2.0; 缩放速度
// controls.maxPolarAngle = 0;
// controls.minPolarAngle = 0;
controls.enableRotate = false; 右键旋转