Selaa lähdekoodia

OrbitControls: Enable keyboard rotation with modifier keys. (#24974)

* Enable keyboard rotation with modifier keys

This implements camera rotation via keyboard control, when either CTRL,
Shift, or Alt are pressed, similar to how the left mouse button can be
used to pan with modifier keys.

* Update OrbitControls.js

Co-authored-by: Michael Herzog <michael.herzog@human-interactive.org>
Nik Nyby 3 vuotta sitten
vanhempi
sitoutus
4f23d857b1
1 muutettua tiedostoa jossa 44 lisäystä ja 4 poistoa
  1. 44 4
      examples/jsm/controls/OrbitControls.js

+ 44 - 4
examples/jsm/controls/OrbitControls.js

@@ -601,22 +601,62 @@ class OrbitControls extends EventDispatcher {
 			switch ( event.code ) {
 			switch ( event.code ) {
 
 
 				case scope.keys.UP:
 				case scope.keys.UP:
-					pan( 0, scope.keyPanSpeed );
+
+					if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
+
+						rotateUp( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
+
+					} else {
+
+						pan( 0, scope.keyPanSpeed );
+
+					}
+
 					needsUpdate = true;
 					needsUpdate = true;
 					break;
 					break;
 
 
 				case scope.keys.BOTTOM:
 				case scope.keys.BOTTOM:
-					pan( 0, - scope.keyPanSpeed );
+
+					if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
+
+						rotateUp( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
+
+					} else {
+
+						pan( 0, - scope.keyPanSpeed );
+
+					}
+
 					needsUpdate = true;
 					needsUpdate = true;
 					break;
 					break;
 
 
 				case scope.keys.LEFT:
 				case scope.keys.LEFT:
-					pan( scope.keyPanSpeed, 0 );
+
+					if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
+
+						rotateLeft( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
+
+					} else {
+
+						pan( scope.keyPanSpeed, 0 );
+
+					}
+
 					needsUpdate = true;
 					needsUpdate = true;
 					break;
 					break;
 
 
 				case scope.keys.RIGHT:
 				case scope.keys.RIGHT:
-					pan( - scope.keyPanSpeed, 0 );
+
+					if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
+
+						rotateLeft( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
+
+					} else {
+
+						pan( - scope.keyPanSpeed, 0 );
+
+					}
+
 					needsUpdate = true;
 					needsUpdate = true;
 					break;
 					break;
 
 

粤ICP备19079148号