The .obj file format supports both polygonal objects and free-form objects. Polygonal geometry uses points, lines, and faces to define objects while free-form geometry uses curves and surfaces.
File structure: (syntax)
geometry vertices (v x y z / v x y z w)
texture vertices (vt u / vt u v / vt u v w)
vertex normals (vn i j k)
parameter space vertices (vp u / vp u v / vp u v w)
Free-form curve/surface attributes
rational or no-rational forms of curve or surface type: basis matrix, Bezier, B-spline, Cardinal, Taylor (cstype)
basis matrix (bmat)
step size (step)
2D curve (curv2)
Free-form curve/surface body statements
parameter values (parm)
outer trimming loop (trim)
inner trimming loop (hole)
special curve (scrv)
special point (sp)
end statement (end)
Connectivity between free-form surfaces
group name (g)
smoothing group (s)
merging group (mg)
object name (o)
bevel interpolation (bevel)
color interpolation (c_interp)
dissolve interpolation (d_interp)
level of detail (lod)
material name (usemtl)
material library (mtllib)
shadow casting (shadow_obj)
ray tracing (trace_obj)
curve approximation technique (ctech)
surface approximation technique (stech)
A typical .obj file:
Referencing groups of vertices
Some elements, such as faces and surfaces, may have a triple of numbers that reference vertex data. These numbers are the reference numbers for a geometric vertex, a texture vertex, and a vertex normal.
Each triplet of numbers specifies a geometric vertex, texture vertex, and vertex normal. The reference numbers must be in order and must be separated by slashes (/).
The first reference number is the geometric vertex.
The second reference number is the texture vertex. It follows the first slash.
The third reference number is the vertex normal. It follows the second slash.
A four-sided face element:
f 1/1/1 2/2/2 3/3/3 4/4/4
f v/vt/vn v/vt/vn v/vt/vn v/vt/vn
Much more details can be found here: Download