# Using and extending 3D primitives

- Primitives vs. rPrimitives

## Built-in primitive types

- Triangle

- Polygon

- Point

- Mesh

- Particles

- ParticlesSprite

## Extending a built-in primitive

- Why do this?

- What to subclass from

- What methods to override

## Adding a new custom primitive

- Subclass from Primitive

## Drawing in the 3D viewer

All primitives must provide methods to draw themselves in the 3D viewer. There are different drawing functions associated with different render passes:

- draw_solid

- draw_wireframe

## Tesselating for the ScanlineRenderer

- tesselate