## Drawing with OpenGL

Until now, we have always rendered our objects with a utility routine, but most OpenGL applications require the use of some drawing primitives.

### The Cube class

We will define a new class to render cubes, and we will use the following representation to better understand the vertices' positions. From 0 to 7, the vertices are enumerated and represented in a 3D space.

The sides of a cube can now be represented as tuples: the back face is `(0, 1, 2, 3)`

, the right face is `(4, 5, 1, 0)`

, and so on.

Note that we arrange the vertices in counterclockwise order. As we will learn later, this will help us enable an optimization called **face culling**, which consists of drawing only the visible faces of a polygon:

class Cube(object): sides = ((0,1,2,3), (3,2,7,6), (6,7,5,4), (4,5,1,0), (1,5,7,2), (4,0,3,6))

The `__init__`

method will store the values of the `position`

and `color`

, as well as the vertex coordinates with respect to the center position of the cube:

def __init__(self...