OpenGL® 3D models, in the most generic sense, are collections of connected points in three-dimensional (3D) space, called vertices, that combine to form a sequence of polygons that can be rendered to represent an object in a virtual space. Almost all 3D objects that are not shape primitives, such as triangles, can really be considered OpenGL® 3D models. In a more practical sense, references to an OpenGL® 3D model usually refer to a complex 3D object that has been constructed in a 3D modeling program. A complete model most often includes textures, surface normals and bump maps and, for animated objects, skeletal information and vertex weights.
OpenGL® is designed to just be a library of graphics functions that are used for fast display routines, so it does not provide any real high-level support for 3D models. Instead, intermediary programming libraries are usually employed to load models from popular file formats and place them into data structures in memory that can be used by OpenGL®. Fully realized OpenGL® 3D models are very complex to create, so they are almost always done with full-featured modeling software. Although a library can be used to load a complete model into OpenGL®, actually implementing features such as animation or movement require code to be written by the programmer, because OpenGL® has no innate ability beyond displaying the model.
Not all OpenGL® 3D models need to be loaded from a file. They can be constructed inside a program using a sequence of algorithms or procedures. These procedurally generated models can be extended primitives, such as a sphere or torus, or can be more complex shapes, such as a helix. Through the use of fractal algorithms, 3D models that approximate mountains, trees or rippling water can be made and manipulated as needed.
There are some complexities that can arise when using OpenGL® 3D models. The most common is the problem of reading in a file, because not all 3D modelers provide the specification for how a file is saved. Another problem can be proprietary methods for storing information about vertices, textures or materials. This would mean some parts of the model could be loaded inverted, or texture mapping might be completely useless.
A problem that can be encountered with OpenGL® 3D models, no matter what the file format, is the subdivision of surfaces from the modeler to OpenGL®. Surfaces such as quadrilaterals are sometimes broken into triangles using one formula, while OpenGL® might use another. This can cause models to appear with holes in their surface, and it can be a problem that is difficult to solve. Poor subdivisions also can lead to models that have been excessively subdivided, causing a simple model to become very memory intensive as its number of polygons increases.