Browse Source

Add min/max polar angle

WestLangley 5 years ago
parent
commit
d1d6c5cd74

+ 10 - 0
docs/examples/en/controls/PointerLockControls.html

@@ -87,6 +87,16 @@
 			Whether or not the controls are locked.
 		</p>
 
+		<h3>[property:Float maxPolarAngle]</h3>
+		<p>
+			Camera pitch, upper limit. Range is 0 to Math.PI radians. Default is Math.PI.
+		</p>
+
+		<h3>[property:Float minPolarAngle]</h3>
+		<p>
+			Camera pitch, lower limit. Range is 0 to Math.PI radians. Default is 0.
+		</p>
+
 		<h2>Methods</h2>
 
 		<p>See the base [page:EventDispatcher] class for common methods.</p>

+ 10 - 0
docs/examples/zh/controls/PointerLockControls.html

@@ -87,6 +87,16 @@
 			Whether or not the controls are locked.
 		</p>
 
+		<h3>[property:Float maxPolarAngle]</h3>
+		<p>
+			Camera pitch, upper limit. Range is 0 to Math.PI radians. Default is Math.PI.
+		</p>
+
+		<h3>[property:Float minPolarAngle]</h3>
+		<p>
+			Camera pitch, lower limit. Range is 0 to Math.PI radians. Default is 0.
+		</p>
+
 		<h2>Methods</h2>
 
 		<p>See the base [page:EventDispatcher] class for common methods.</p>

+ 6 - 1
examples/jsm/controls/PointerLockControls.js

@@ -21,6 +21,11 @@ var PointerLockControls = function ( camera, domElement ) {
 	this.domElement = domElement;
 	this.isLocked = false;
 
+	// Set to constrain the pitch of the camera
+	// Range is 0 to Math.PI radians
+	this.minPolarAngle = 0; // radians
+	this.maxPolarAngle = Math.PI; // radians
+
 	//
 	// internals
 	//
@@ -49,7 +54,7 @@ var PointerLockControls = function ( camera, domElement ) {
 		euler.y -= movementX * 0.002;
 		euler.x -= movementY * 0.002;
 
-		euler.x = Math.max( - PI_2, Math.min( PI_2, euler.x ) );
+		euler.x = Math.max( PI_2 - scope.maxPolarAngle, Math.min( PI_2 - scope.minPolarAngle, euler.x ) );
 
 		camera.quaternion.setFromEuler( euler );