code: def unproject(self, x, y, z=-1.0):
          
  
          source = np.array([x,y,z,1.0])
      
          # Invert the combined matrix
          matrix = self.projection.dot(self.matrix)
          IM = LA.inv(matrix)
          res = np.dot(IM, source)
          
          return res[0:3]/res[3]
docs: Receive x and y as screen coordinates and returns a point
          in world coordinates.
  
          This function comes in handy each time we have to convert a 2d
          mouse click to a 3d point in our space.
  
          **Parameters**
          
          x: float in the interval [-1.0, 1.0]
              Horizontal coordinate, -1.0 is leftmost, 1.0 is rightmost.
          
          y: float in the interval [1.0, -1.0]
              Vertical coordinate, -1.0 is down, 1.0 is up.
          
          z: float in the interval [1.0, -1.0]
              Depth, -1.0 is the near plane, that is exactly behind our
              screen, 1.0 is the far clipping plane.
          
          :rtype: np.ndarray(3,dtype=float)
          :return: The point in 3d coordinates (world coordinates).