Use gluNurbsSurface within a NURBS (Non-Uniform Rational B-Spline)
surface definition to describe the shape of a NURBS surface (before any
trimming). To mark the beginning of a NURBS surface definition, use the
gluBeginSurface command. To mark the end of a NURBS surface definition,
use the gluEndSurface command. Call gluNurbsSurface within a NURBS surface
definition only.

Positional, texture, and color coordinates are associated
with a surface by presenting each as a separate gluNurbsSurface between
a gluBeginSurface/gluEndSurface pair. No more than one call to gluNurbsSurface
for each of color, position, and texture data can be made within a single
gluBeginSurface/gluEndSurface pair. Exactly one call must be made to describe
the position of the surface (a type of GL_MAP2_VERTEX_3 or GL_MAP2_VERTEX_4).

A NURBS surface can be trimmed by using the commands gluNurbsCurve and
gluPwlCurve between calls to gluBeginTrim and gluEndTrim.

Note that a gluNurbsSurface
with sKnotCount knots in the u direction and tKnotCount knots in the v
direction with orders sOrder and tOrder must have (sKnotCount - sOrder)
$times$ (tKnotCount - tOrder) control points.