コード例 #1
0
    def mousecamTask(self, task):
        """Rotate camera when the pointer moves to the edges of the screen.

    Also temporarily zooms in past an obstructing CameraM'ed object."""
        self.setDist(self.zoomLvl)  #preset dist to current zoom level.
        if self.Q.getNumEntries() > 0:  #if there was a collision
            self.Q.sortEntries()  #so we get the closest collision to avatar
            point = self.Q.getEntry(0).getSurfacePoint(
                self.target)  #get the point
            if point.lengthSquared() < camera.getPos().lengthSquared(
            ):  #not out.
                self.setDist(point.length())  #Temporarily zoom to point.
        camera.lookAt(self.target)  # always point camera at target
        if not base.mouseWatcherNode.hasMouse(
        ):  #See if the mouse is available.
            return Task.cont  #if no, just loop again.
        # Get the relative mouse position, its always between 1 and -1
        mpos = base.mouseWatcherNode.getMouse()
        if mpos.getX() > 0.99:
            self.rotateCam(P.Point2(-10, 0))
        elif mpos.getX() < -0.99:
            self.rotateCam(P.Point2(10, 0))
        if mpos.getY() > 0.9:
            self.rotateCam(P.Point2(0, -3))
        elif mpos.getY() < -0.9:
            self.rotateCam(P.Point2(0, 3))
        return Task.cont  #loop again.
コード例 #2
0
 def __init__(self,
              avatar,
              offset=P.Point3.zero(),
              dist=10,
              rot=20,
              zoom=(30, 400),
              pitch=(-15, 0)):
     # Disable default camera interface.
     base.disableMouse()
     # Set parameters
     self.zoomLvl = dist  #camera starting distance
     self.speed = 1.0 / rot  # Controls speed of camera rotation.
     self.zoomClamp = zoom  #clamp zoom in this range
     self.clampP = pitch  #clamp pitch in this range
     self.target = avatar.attachNewNode('camera target')
     self.target.setPos(offset)  #offset target from avatar.
     #Load the camera
     self.__loadCamera()
     #Enable new camera interface
     self.accept('arrow_up', self.cameraZoom,
                 [0.7])  #Translated. For zooming.
     self.accept('arrow_down', self.cameraZoom, [1.3])
     self.accept('arrow_left', self.rotateCam, [P.Point2(-10, 0)])
     self.accept('arrow_right', self.rotateCam, [P.Point2(10, 0)])
     taskMgr.add(self.mousecamTask,
                 "mousecamTask")  #For edge screen tracking
コード例 #3
0
    def __loadCamera(self):
        """Only seperate for organisation, treat it as is part of __init__() .

    Load the camera & setup segmet & queue for detecting obstructions."""
        #Don't rotate the target with the avatar.
        self.target.node().setEffect(P.CompassEffect.make(render))
        camera.reparentTo(self.target)  # Attach the camera to target.
        camera.setPos(0, -self.zoomLvl, 50)  # Position the camera
        self.rotateCam(P.Point2(0, 0))  # Initialize gimbal clamps.
        self.Q = P.CollisionHandlerQueue()  # New queue for camera.
        self.segment = fromCol(
            self.target, self.Q,
            P.CollisionSegment(P.Point3.zero(), camera.getPos(self.target)),
            P.BitMask32(
                CameraM))  #CameraM into segment between camera & target.
コード例 #4
0
ファイル: functions.py プロジェクト: Derfies/p3d
def Str2Point2(string):
    buffer = string.split(' ')
    return pm.Point2(*[float(buffer[i]) for i in range(2)])