Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung | Blog RSS

3D Modeling, Part I

Polygonal surfaces (that is: polyhedra) have become standard in 3D graphics. Actually, graphics cards only handle triangles, not arbitrary n-sided polygons. (OpenGL allows to draw polygons with more than three sides; the graphics card or the graphics driver will automatically slice them into triangles.)

Typically, each vertex of a polyhedron is part of several adjacent polygons. It should only be stored once and only be processed once by the vertex shader. Thus, a polygonal object is typically stored on the graphics card as two lists:

Similar data structures can be found in 3D software such as Cinema 4D.

Polygonal surfaces can approximate any reasonable surface arbitrarily well. However, for easier storage and processing, it is often much more convenient to deal with mathematical surfaces of infinite resolution. The easiest way for doing so is to specify a surface S by an explicit function: S = {(x,y,z) in R3 : (x,y,z) = f(u,v) for some (u,v) in [0,1]x[0,1] }, which is merely a deformed version of the unit square, depending on the function f. A infinitely extended landscape may be generated as {(x,y,z) in R3 : z = h(x,y) for all (x,y) in R2}. Many interesting surfaces such as the sphere do not allow such a simple representation, but may be created in pieces of that kind. All such surfaces are called two-dimensional submanifolds of R3 as long as some regularity conditions are fulfilled.

In most situations, such so-to-speak "mathematical" surfaces are stored via their defining formula but are processed (e.g., deformed) and rendered through a polygonal approximation. Most 3D software contains a set parametric primitives [German: parametrische Grundfiguren]: ready-made surfaces (sphere, cone, ...) of that sort, which can be controlled by parameters such as radius or height. Prominent examples for functions that typically operate on the polygonal approximation are the Boolean intersection and the Boolean difference.