code: def on_timer(self, event):
      self.theta += 0.5
      self.phi += 0.5
      model = rotate(self.theta, (0, 0, 1)).dot(
          rotate(self.phi, (0, 1, 0))
      )
      self.cube["model"] = model
      self.update()
  
file_path: vispy/examples/gloo/post_processing.py
imports: import numpy
  from vispy import app
  from vispy.geometry import create_cube
  from vispy.util.transforms import perspective, translate, rotate
  from vispy.gloo import Program, VertexBuffer, IndexBuffer, Texture2D, clear, FrameBuffer, RenderBuffer, set_viewport, set_state
label_desc: Use image node_id 5 for calling the Canvas obj's underlying member method code with example usage: obj.on_timer(event) without return types