code: def __init__(self):
      app.Canvas.__init__(self, keys="interactive")
      self.program = gloo.Program(VERT_SHADER, FRAG_SHADER)
      # Sets the view to an appropriate position over the terrain
      self.default_view = np.array(
          [
              [0.8, 0.2, -0.48, 0],
              [-0.5, 0.3, -0.78, 0],
              [-0.01, 0.9, -0.3, 0],
              [-4.5, -21.5, -7.4, 1],
          ],
          dtype=np.float32,
      )
      self.view = self.default_view
      self.model = np.eye(4, dtype=np.float32)
      self.projection = np.eye(4, dtype=np.float32)
  
      self.translate = [0, 0, 0]
      self.rotate = [0, 0, 0]
  
      self.program["u_height"] = height
      self.program["u_model"] = self.model
      self.program["u_view"] = self.view
  
      self.program["a_position"] = gloo.VertexBuffer(triangles)
  
      self.activate_zoom()
  
      gloo.set_state(clear_color="black", depth_test=True)
  
      self.show()
  
file_path: vispy/examples/demo/gloo/terrain.py
imports: from vispy import gloo
  from vispy import app
  from vispy.util.transforms import perspective, translate, rotate
  import numpy
  from scipy.spatial import Delaunay
label_desc: Use image node_id 1 to create a new Canvas object from inherited base classes: app with example: obj = Canvas()