def __init__(self, mode='perspective', theta=0, phi=0, scale=1):
    '\n        mode : str\n          camera mode ("ortho" or "perspective")\n\n        theta: float\n          angle around z axis (degrees)\n\n        phi: float\n          angle around x axis (degrees)\n\n        scale: float\n          scale factor\n\n        view : array (4x4)\n        '
    self.trackball = Trackball(theta, phi)
    self.aperture = 35
    self.aspect = 1
    self.near = 1
    self.far = 100
    self.mode = mode
    self.scale = scale
    self.zoom = 1
    self.zoom_max = 5.0
    self.zoom_min = 0.1
    self.view = (glm.translate(0, 0, (- 3)) @ glm.scale(scale))
    if (mode == 'ortho'):
        self.proj = glm.ortho((- 1), (+ 1), (- 1), (+ 1), self.near, self.far)
    else:
        self.proj = glm.perspective(self.aperture, self.aspect, self.near, self.far)
    self.transform = ((self.proj @ self.view) @ self.trackball.model.T)
mode : str
  camera mode ("ortho" or "perspective")

theta: float
  angle around z axis (degrees)

phi: float
  angle around x axis (degrees)

scale: float
  scale factor

view : array (4x4)
def __init__(self, mode='perspective', theta=0, phi=0, scale=1):
    '\n        mode : str\n          camera mode ("ortho" or "perspective")\n\n        theta: float\n          angle around z axis (degrees)\n\n        phi: float\n          angle around x axis (degrees)\n\n        scale: float\n          scale factor\n\n        view : array (4x4)\n        '
    self.trackball = Trackball(theta, phi)
    self.aperture = 35
    self.aspect = 1
    self.near = 1
    self.far = 100
    self.mode = mode
    self.scale = scale
    self.zoom = 1
    self.zoom_max = 5.0
    self.zoom_min = 0.1
    self.view = (glm.translate(0, 0, (- 3)) @ glm.scale(scale))
    if (mode == 'ortho'):
        self.proj = glm.ortho((- 1), (+ 1), (- 1), (+ 1), self.near, self.far)
    else:
        self.proj = glm.perspective(self.aperture, self.aspect, self.near, self.far)
    self.transform = ((self.proj @ self.view) @ self.trackball.model.T)