I\'ve read a lot about these 2 controls and currently I\'m using TrackballControls.
I need to rotate an object along all three axis (Both controls already do that),
To force TrackballControls' to rotates only horizontal, find the implementation of function getMouseProjectionOnBall and add a single line:
var getMouseProjectionOnBall = (function() {
var vector = new THREE.Vector3();
var objectUp = new THREE.Vector3();
var mouseOnBall = new THREE.Vector3();
return function(pageX, pageY) {
mouseOnBall.set(
(pageX - _this.screen.width * 0.5 - _this.screen.left) / (_this.screen.width * 0.5),
(_this.screen.height * 0.5 + _this.screen.top - pageY) / (_this.screen.height * 0.5),
0.0);
mouseOnBall.setY(0); // add this
var length = mouseOnBall.length();
I'm still working on limit the angle in a range rather than disabling it...
First of all, TrackballControls and OrbitControls rotate the camera, not the objects.
Second, OrbitControls enforces the camera up direction, and TrackballControls allows the camera to rotate upside-down.
TrackballControls has a reset() method, which restores the target (center of rotation), camera position, and camera up vector to their original settings.
controls.reset();
The above code will restore the original position, target, and up vector. You can change those too, if you want, before you call controls.reset().
controls.position0.set( 0, 0, 10 ); // set a new desired position
controls.target0.set( 0, 0, 0 ); // set a new target
controls.up0.set( 0, 1, 0 ); // set a new up vector
controls.reset();
Read the reset() function source code so you understand what it is doing.
EDIT: OrbitControls now has a reset() method, too. Check the source code.
three.js r.82