|
@@ -21,7 +21,6 @@ THREE.OrthographicTrackballControls = function ( object, domElement ) {
|
|
|
|
|
|
this.rotateSpeed = 1.0;
|
|
|
this.zoomSpeed = 1.2;
|
|
|
- this.panSpeed = 0.3;
|
|
|
|
|
|
this.noRotate = false;
|
|
|
this.noZoom = false;
|
|
@@ -51,7 +50,6 @@ THREE.OrthographicTrackballControls = function ( object, domElement ) {
|
|
|
|
|
|
_zoomStart = new THREE.Vector2(),
|
|
|
_zoomEnd = new THREE.Vector2(),
|
|
|
- _zoomFactor = 1,
|
|
|
|
|
|
_touchZoomDistanceStart = 0,
|
|
|
_touchZoomDistanceEnd = 0,
|
|
@@ -69,7 +67,6 @@ THREE.OrthographicTrackballControls = function ( object, domElement ) {
|
|
|
this.right0 = this.object.right;
|
|
|
this.top0 = this.object.top;
|
|
|
this.bottom0 = this.object.bottom;
|
|
|
- this.center0 = new THREE.Vector2((this.left0 + this.right0) / 2.0, (this.top0 + this.bottom0) / 2.0);
|
|
|
|
|
|
// events
|
|
|
|
|
@@ -226,24 +223,16 @@ THREE.OrthographicTrackballControls = function ( object, domElement ) {
|
|
|
|
|
|
var factor = _touchZoomDistanceStart / _touchZoomDistanceEnd;
|
|
|
_touchZoomDistanceStart = _touchZoomDistanceEnd;
|
|
|
- _zoomFactor *= factor;
|
|
|
|
|
|
- _this.object.left = _zoomFactor * _this.left0 + ( 1 - _zoomFactor ) * _this.center0.x;
|
|
|
- _this.object.right = _zoomFactor * _this.right0 + ( 1 - _zoomFactor ) * _this.center0.x;
|
|
|
- _this.object.top = _zoomFactor * _this.top0 + ( 1 - _zoomFactor ) * _this.center0.y;
|
|
|
- _this.object.bottom = _zoomFactor * _this.bottom0 + ( 1 - _zoomFactor ) * _this.center0.y;
|
|
|
+ _this.object.zoom *= factor;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
var factor = 1.0 + ( _zoomEnd.y - _zoomStart.y ) * _this.zoomSpeed;
|
|
|
|
|
|
if ( Math.abs( factor - 1.0 ) > EPS && factor > 0.0 ) {
|
|
|
- _zoomFactor *= factor;
|
|
|
|
|
|
- _this.object.left = _zoomFactor * _this.left0 + ( 1 - _zoomFactor ) * _this.center0.x;
|
|
|
- _this.object.right = _zoomFactor * _this.right0 + ( 1 - _zoomFactor ) * _this.center0.x;
|
|
|
- _this.object.top = _zoomFactor * _this.top0 + ( 1 - _zoomFactor ) * _this.center0.y;
|
|
|
- _this.object.bottom = _zoomFactor * _this.bottom0 + ( 1 - _zoomFactor ) * _this.center0.y;
|
|
|
+ _this.object.zoom *= factor;
|
|
|
|
|
|
if ( _this.staticMoving ) {
|
|
|
|
|
@@ -273,7 +262,11 @@ THREE.OrthographicTrackballControls = function ( object, domElement ) {
|
|
|
|
|
|
if ( mouseChange.lengthSq() ) {
|
|
|
|
|
|
- mouseChange.multiplyScalar( _eye.length() * _this.panSpeed );
|
|
|
+ // Scale movement to keep clicked/dragged position under cursor
|
|
|
+ var scale_x = ( _this.object.right - _this.object.left ) / _this.object.zoom;
|
|
|
+ var scale_y = ( _this.object.top - _this.object.bottom ) / _this.object.zoom;
|
|
|
+ mouseChange.x *= scale_x;
|
|
|
+ mouseChange.y *= scale_y;
|
|
|
|
|
|
pan.copy( _eye ).cross( _this.object.up ).setLength( mouseChange.x );
|
|
|
pan.add( objectUp.copy( _this.object.up ).setLength( mouseChange.y ) );
|