_C_ License Applicability. Except to the extent portions of this file are
_C_ made subject to an alternative license as permitted in the SGI Free
_C_ Software License B, Version 1.1 (the "License"), the contents of this
_C_ file are subject only to the provisions of the License. You may not use
_C_ this file except in compliance with the License. You may obtain a copy
_C_ of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
_C_ Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
_C_ 
_C_ http://oss.sgi.com/projects/FreeB
_C_ 
_C_ Note that, as provided in the License, the Software is distributed on an
_C_ "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
_C_ DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
_C_ CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
_C_ PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
_C_ 
_C_ Original Code. The Original Code is: OpenGL Sample Implementation,
_C_ Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
_C_ Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
_C_ Copyright in any portions created by third parties is as indicated
_C_ elsewhere herein. All Rights Reserved.
_C_ 
_C_ Additional Notice Provisions: The application programming interfaces
_C_ established by SGI in conjunction with the Original Code are The
_C_ OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
_C_ April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
_C_ 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
_C_ Window System(R) (Version 1.3), released October 19, 1998. This software
_C_ was created using the OpenGL(R) version 1.2.1 Sample Implementation
_C_ published by SGI, but has not been independently verified as being
_C_ compliant with the OpenGL(R) version 1.2.1 Specification.
_C_
_C_ $Date$ $Revision$
_C_ The first character in this file must be an '_'!
_C_ Anything on a line after _C_ is ignored
_define(_filters,eqn)_C_
_C_      eqn is automatically replaced with neqn for nroff
_header(NurbsSurface, define the shape of a NURBS surface)
_names(NurbsSurface)
.EQ
delim $$
.EN
.SH PARAMETERS
_phead(_param1)
Specifies the NURBS object (created with _cmnd(NewNurbsRenderer)).
_phead(_param2)
Specifies the number of knots in the parametric \f2u\fP direction.
_phead(_param3)
Specifies an array of _param2 nondecreasing knot values in the parametric
\f2u\fP direction.
_phead(_param4)
Specifies the number of knots in the parametric \f2v\fP direction.
_phead(_param5)
Specifies an array of _param4 nondecreasing knot values in the parametric
\f2v\fP direction.
_phead(_param6)
Specifies the offset (as a number of single-precision floating point values)
between successive control points in the parametric \f2u\fP direction
in _param8.
_phead(_param7)
Specifies the offset (in single-precision floating-point values)
between successive control points in the parametric \f2v\fP direction
in _param8.
_phead(_param8)
Specifies an array containing control points for the NURBS surface.
The offsets between successive control points in the parametric \f2u\fP
and \f2v\fP directions are given by _param6 and _param7.
_phead(_param9)
Specifies the order of the NURBS surface in the parametric \f2u\fP 
direction. The order is one more than the degree, hence
a surface that is cubic in \f2u\fP has a \f2u\fP order of 4.
_phead(_param10)
Specifies the order of the NURBS surface in the parametric \f2v\fP 
direction. The order is one more than the degree, hence
a surface that is cubic in \f2v\fP has a \f2v\fP order of 4.
_phead(_param11)
Specifies type of the surface. _param11 can be any of the valid
two-dimensional evaluator types (such as _const(MAP2_VERTEX_3) or 
_const(MAP2_COLOR_4)).
.SH DESCRIPTION
Use _cmnd 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 _cmnd(BeginSurface) command.
To mark the end of a NURBS surface definition, use the 
_cmnd(EndSurface) command. Call _cmnd within a NURBS
surface definition only.
.P
Positional, texture, and color coordinates are associated
with a surface by presenting each as a separate _cmnd between a 
_cmnd(BeginSurface)/_cmnd(EndSurface) pair. No more than
one call to _cmnd for each of color, position, and texture
data can be made within a single _cmnd(BeginSurface)/_cmnd(EndSurface)
pair. Exactly one call must be made to describe the position of the 
surface (a _param11 of _const(MAP2_VERTEX_3) or _const(MAP2_VERTEX_4)).
.P
A NURBS surface can be trimmed by using the commands 
_cmnd(NurbsCurve) and _cmnd(PwlCurve) between calls to
_cmnd(BeginTrim) and _cmnd(EndTrim).
.P
Note that a _cmnd with _param2 knots in the \f2u\fP direction
and _param4 knots in the \f2v\fP direction with orders 
_param9 and _param10 must have 
(_param2 - _param9) $times$ (_param4 - _param10) control points.
.SH EXAMPLE
The following commands render a textured NURBS surface with normals;
the texture coordinates and normals are also NURBS surfaces:
.sp
.Ex
gluBeginSurface(nobj);
   gluNurbsSurface(nobj, ..., GL_MAP2_TEXTURE_COORD_2);
   gluNurbsSurface(nobj, ..., GL_MAP2_NORMAL);
   gluNurbsSurface(nobj, ..., GL_MAP2_VERTEX_4);
gluEndSurface(nobj);
.Ee
.sp
.SH SEE ALSO
_cmnd(BeginSurface), _cmnd(BeginTrim), _cmnd(NewNurbsRenderer), 
_cmnd(NurbsCurve),
_cmnd(PwlCurve)

