Просмотр исходного кода

TransformControls: Add `viewport` support. (#33451)

Michael Herzog 1 месяц назад
Родитель
Сommit
749985096e
1 измененных файлов с 32 добавлено и 2 удалено
  1. 32 2
      examples/jsm/controls/TransformControls.js

+ 32 - 2
examples/jsm/controls/TransformControls.js

@@ -214,6 +214,17 @@ class TransformControls extends Controls {
 		 */
 		defineProperty( 'size', 1 );
 
+		/**
+		 * The viewport rectangle, in logical (CSS) pixels with the origin at the lower-left
+		 * of the canvas. Set this when the renderer uses a sub-canvas viewport so pointer
+		 * coordinates map to the correct region. If `null`, the full canvas is used.
+		 *
+		 * @name TransformControls#viewport
+		 * @type {?Vector4}
+		 * @default null
+		 */
+		this.viewport = null;
+
 		/**
 		 * Whether dragging is currently performed or not.
 		 *
@@ -966,10 +977,29 @@ function getPointer( event ) {
 	} else {
 
 		const rect = this.domElement.getBoundingClientRect();
+		const viewport = this.viewport;
+
+		let originX, originY, regionWidth, regionHeight;
+
+		if ( viewport !== null ) {
+
+			originX = viewport.x;
+			originY = rect.height - viewport.y - viewport.w;
+			regionWidth = viewport.z;
+			regionHeight = viewport.w;
+
+		} else {
+
+			originX = 0;
+			originY = 0;
+			regionWidth = rect.width;
+			regionHeight = rect.height;
+
+		}
 
 		return {
-			x: ( event.clientX - rect.left ) / rect.width * 2 - 1,
-			y: - ( event.clientY - rect.top ) / rect.height * 2 + 1,
+			x: ( event.clientX - rect.left - originX ) / regionWidth * 2 - 1,
+			y: - ( event.clientY - rect.top - originY ) / regionHeight * 2 + 1,
 			button: event.button
 		};
 

粤ICP备19079148号