code: def update_matrices(self):
      self.view = translate((0, 0, -self.translate))
      self.model = np.dot(
          rotate(self.theta, (1, 0, 0)), rotate(self.phi, (0, 1, 0))
      )
      self.projection = np.eye(4, dtype=np.float32)
      self.program["u_model"] = self.model
      self.program["u_view"] = self.view
      self.program["u_normal"] = np.linalg.inv(
          np.dot(self.view, self.model)
      ).T
  
file_path: vispy/examples/demo/gloo/brain.py
imports: from timeit import default_timer
  import numpy
  from vispy import gloo
  from vispy import app
  from vispy.util.transforms import perspective, translate, rotate
  from vispy.io import load_data_file
label_desc: Use image node_id 2 for calling the Canvas obj's underlying member method code with example usage: obj.update_matrices() without return types