Geometric objects can be represented by their surfaces. In this chapter, we are talking only about polygonal graphics, so the data structure of fundamental importance is the triangular mesh.
Just as with the digital audio, our convenient API-agnostic data structures should be converted to something native for the graphics API before they can be rendered. Let's start with the representation of triangulated geometry in the 3D space.
A single triangle can be specified by three vertices. Each vertex stores at least its position in the 3D space, as shown in the following figure:
The first thing in implementing a portable renderer, we need to separate geometry storage, which in the most simple case, is just a collection of vertices with their attributes and the order to iterate through these vertices to construct graphical primitives, from any API-specific functions and data types. This kind of data structure is implemented in the clVertexAttribs
class:
class clVertexAttribs...