Browse Source

Added flag to be able to disable camera roll when moving/rotating the camera.

Justin Butler 21 years ago
parent
commit
e87f64308a
1 changed files with 14 additions and 0 deletions
  1. 14 0
      direct/src/directtools/DirectCameraControl.py

+ 14 - 0
direct/src/directtools/DirectCameraControl.py

@@ -58,6 +58,8 @@ class DirectCameraControl(PandaObject):
             ['-', self.zoomCam, -2.0, t],
             ['-', self.zoomCam, -2.0, t],
             ['_', self.zoomCam, -2.0, t],
             ['_', self.zoomCam, -2.0, t],
             ]
             ]
+        # set this to true to prevent the camera from rolling
+        self.lockRoll = False
 
 
     def toggleMarkerVis(self):
     def toggleMarkerVis(self):
         if direct.cameraControl.coaMarker.isHidden():
         if direct.cameraControl.coaMarker.isHidden():
@@ -198,6 +200,9 @@ class DirectCameraControl(PandaObject):
                                 (0.5 * direct.dr.mouseDeltaX *
                                 (0.5 * direct.dr.mouseDeltaX *
                                  direct.dr.fovH),
                                  direct.dr.fovH),
                                 0.0, 0.0)
                                 0.0, 0.0)
+        if (self.lockRoll == True):
+            # flatten roll
+            direct.camera.setR(0)
         return Task.cont
         return Task.cont
 
 
     def HPPanTask(self, state):
     def HPPanTask(self, state):
@@ -238,6 +243,9 @@ class DirectCameraControl(PandaObject):
                                  (deltaX * direct.dr.fovH),
                                  (deltaX * direct.dr.fovH),
                                  (-deltaY * direct.dr.fovV),
                                  (-deltaY * direct.dr.fovV),
                                  0.0)
                                  0.0)
+            if (self.lockRoll == True):
+                # flatten roll
+                direct.camera.setR(0)
             self.camManipRef.setPos(self.coaMarkerPos)
             self.camManipRef.setPos(self.coaMarkerPos)
             self.camManipRef.setHpr(direct.camera, ZERO_POINT)
             self.camManipRef.setHpr(direct.camera, ZERO_POINT)
         else:
         else:
@@ -246,6 +254,9 @@ class DirectCameraControl(PandaObject):
                                     (-1 * deltaX * 180.0),
                                     (-1 * deltaX * 180.0),
                                     (deltaY * 180.0),
                                     (deltaY * 180.0),
                                     0.0)
                                     0.0)
+            if (self.lockRoll == True):
+                # flatten roll
+                self.camManipRef.setR(0)
             direct.camera.setTransform(self.camManipRef, wrt)
             direct.camera.setTransform(self.camManipRef, wrt)
         return Task.cont
         return Task.cont
 
 
@@ -268,6 +279,9 @@ class DirectCameraControl(PandaObject):
         deltaAngle = angle - state.lastAngle
         deltaAngle = angle - state.lastAngle
         state.lastAngle = angle
         state.lastAngle = angle
         self.camManipRef.setHpr(self.camManipRef, 0, 0, deltaAngle)
         self.camManipRef.setHpr(self.camManipRef, 0, 0, deltaAngle)
+        if (self.lockRoll == True):
+            # flatten roll
+            self.camManipRef.setR(0)
         direct.camera.setTransform(self.camManipRef, wrt)
         direct.camera.setTransform(self.camManipRef, wrt)
         return Task.cont
         return Task.cont