code: def _create_vertex_data(self):
          
          shape = self._vol_shape
          
          # Get corner coordinates. The -0.5 offset is to center
          # pixels/voxels. This works correctly for anisotropic data.
          x0, x1 = -0.5, shape[2] - 0.5
          y0, y1 = -0.5, shape[1] - 0.5
          z0, z1 = -0.5, shape[0] - 0.5
  
          pos = np.array([
              [x0, y0, z0],
              [x1, y0, z0],
              [x0, y1, z0],
              [x1, y1, z0],
              [x0, y0, z1],
              [x1, y0, z1],
              [x0, y1, z1],
              [x1, y1, z1],
          ], dtype=np.float32)
          
          """
            6-------7
           /|      /|
          4-------5 |
          | |     | |
          | 2-----|-3
          |/      |/
          0-------1
          """
          
          # Order is chosen such that normals face outward; front faces will be
          # culled.
          indices = np.array([2, 6, 0, 4, 5, 6, 7, 2, 3, 0, 1, 5, 3, 7],
                             dtype=np.uint32)
          
          # Apply
          self._vertices.set_data(pos)
          self._index_buffer.set_data(indices)
docs: Create and set positions and texture coords from the given shape
          
          We have six faces with 1 quad (2 triangles) each, resulting in
          6*2*3 = 36 vertices in total.