Browse Source

more acurate trackball panning

Alexander Rose 4 years ago
parent
commit
0e92cfa007
1 changed files with 3 additions and 2 deletions
  1. 3 2
      src/mol-canvas3d/controls/trackball.ts

+ 3 - 2
src/mol-canvas3d/controls/trackball.ts

@@ -38,7 +38,7 @@ export const TrackballControlsParams = {
 
     rotateSpeed: PD.Numeric(3.0, { min: 0.1, max: 10, step: 0.1 }),
     zoomSpeed: PD.Numeric(6.0, { min: 0.1, max: 10, step: 0.1 }),
-    panSpeed: PD.Numeric(0.8, { min: 0.1, max: 5, step: 0.1 }),
+    panSpeed: PD.Numeric(1.0, { min: 0.1, max: 5, step: 0.1 }),
 
     spin: PD.Boolean(false, { description: 'Spin the 3D scene around the x-axis in view space' }),
     spinSpeed: PD.Numeric(1, { min: -20, max: 20, step: 1 }),
@@ -227,7 +227,8 @@ namespace TrackballControls {
             Vec2.sub(panMouseChange, Vec2.copy(panMouseChange, _panEnd), _panStart);
 
             if (Vec2.squaredMagnitude(panMouseChange)) {
-                Vec2.scale(panMouseChange, panMouseChange, Vec3.magnitude(_eye) * p.panSpeed);
+                panMouseChange[0] *= (1 / camera.zoom) * camera.viewport.width * p.panSpeed;
+                panMouseChange[1] *= (1 / camera.zoom) * camera.viewport.height * p.panSpeed;
 
                 Vec3.cross(panOffset, Vec3.copy(panOffset, _eye), camera.up);
                 Vec3.setMagnitude(panOffset, panOffset, panMouseChange[0]);