Ver código fonte

TrackballControls: Add minZoom/maxZoom properties. (#25597)

* Trackball zoom limit

* TrackballControls: Added maxZoom and minZoom

* Update TrackballControls.js

* updated doc

---------

Co-authored-by: Andrea Gargaro <[email protected]>
Co-authored-by: Michael Herzog <[email protected]>
Andrea Gargaro 2 anos atrás
pai
commit
dbd9b3ac03

+ 12 - 2
docs/examples/en/controls/TrackballControls.html

@@ -96,12 +96,22 @@
 
 		<h3>[property:Number maxDistance]</h3>
 		<p>
-			How far you can zoom out. Default is `Infinity`.
+			How far you can dolly out ( [page:PerspectiveCamera] only ). Default is `Infinity`.
 		</p>
 
 		<h3>[property:Number minDistance]</h3>
 		<p>
-			How far you can zoom in. Default is *0*.
+			How far you can dolly in ( [page:PerspectiveCamera] only ). Default is *0*.
+		</p>
+
+		<h3>[property:Float maxZoom]</h3>
+		<p>
+			How far you can zoom out ( [page:OrthographicCamera] only ). Default is `Infinity`.
+		</p>
+
+		<h3>[property:Float minZoom]</h3>
+		<p>
+			How far you can zoom in ( [page:OrthographicCamera] only ). Default is *0*.
 		</p>
 
 		<h3>

+ 12 - 2
docs/examples/ko/controls/TrackballControls.html

@@ -95,12 +95,22 @@
 
 		<h3>[property:Number maxDistance]</h3>
 		<p>
-			축소할 수 있는 범위를 설정합니다. 기본값은 *무한대* 입니다.
+			축소할 수 있는 범위를 설정합니다. ([page:PerspectiveCamera] only). 기본값은 *무한대* 입니다.
 		</p>
 
 		<h3>[property:Number minDistance]</h3>
 		<p>
-			확대할 수 있는 범위를 설정합니다. 기본값은 *0* 입니다.
+			확대할 수 있는 범위를 설정합니다. ([page:PerspectiveCamera] only). 기본값은 *0* 입니다.
+		</p>
+
+		<h3>[property:Float maxZoom]</h3>
+		<p>
+			축소 할 수 있는 범위를 설정합니다. ( [page:OrthographicCamera] only ). 기본값은 *무한대* 입니다.
+		</p>
+
+		<h3>[property:Float minZoom]</h3>
+		<p>
+			확대 할 수 있는 범위를 설정합니다. ( [page:OrthographicCamera] only ). 기본값은 *0* 입니다.
 		</p>
 
 		<h3>

+ 12 - 2
docs/examples/zh/controls/TrackballControls.html

@@ -95,12 +95,22 @@
 
 		<h3>[property:Number maxDistance]</h3>
 		<p>
-			你能够将相机向外移动多少,其默认值为*Infinity*。
+			你能够将相机向外移动多少(仅适用于[page:PerspectiveCamera]),其默认值为*Infinity*。
 		</p>
 
 		<h3>[property:Number minDistance]</h3>
 		<p>
-			你能够将相机向内移动多少,其默认值为*0*。
+			你能够将相机向内移动多少(仅适用于[page:PerspectiveCamera]),其默认值为*0*。
+		</p>
+
+		<h3>[property:Float maxZoom]</h3>
+		<p>
+			你能够将相机缩小多少(仅适用于[page:OrthographicCamera]),其默认值为*Infinity*。
+		</p>
+
+		<h3>[property:Float minZoom]</h3>
+		<p>
+			你能够将相机放大多少(仅适用于[page:OrthographicCamera]),其默认值为*0*。
 		</p>
 
 		<h3>

+ 18 - 4
examples/jsm/controls/TrackballControls.js

@@ -1,5 +1,6 @@
 import {
 	EventDispatcher,
+	MathUtils,
 	MOUSE,
 	Quaternion,
 	Vector2,
@@ -43,6 +44,9 @@ class TrackballControls extends EventDispatcher {
 		this.minDistance = 0;
 		this.maxDistance = Infinity;
 
+		this.minZoom = 0;
+		this.maxZoom = Infinity;
+
 		this.keys = [ 'KeyA' /*A*/, 'KeyS' /*S*/, 'KeyD' /*D*/ ];
 
 		this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };
@@ -205,8 +209,13 @@ class TrackballControls extends EventDispatcher {
 
 				} else if ( scope.object.isOrthographicCamera ) {
 
-					scope.object.zoom /= factor;
-					scope.object.updateProjectionMatrix();
+						scope.object.zoom = MathUtils.clamp( scope.object.zoom / factor, scope.minZoom, scope.maxZoom );
+						
+						if ( lastZoom !== scope.object.zoom ) {
+
+							scope.object.updateProjectionMatrix();
+							
+						}
 
 				} else {
 
@@ -226,8 +235,13 @@ class TrackballControls extends EventDispatcher {
 
 					} else if ( scope.object.isOrthographicCamera ) {
 
-						scope.object.zoom /= factor;
-						scope.object.updateProjectionMatrix();
+						scope.object.zoom = MathUtils.clamp( scope.object.zoom / factor, scope.minZoom, scope.maxZoom );
+						
+						if ( lastZoom !== scope.object.zoom ) {
+
+							scope.object.updateProjectionMatrix();
+							
+						}
 
 					} else {