# gluNurbsCurve.3G - Man Page

define the shape of a NURBS curve

## C Specification

void **gluNurbsCurve**( GLUnurbs* *nurb*,

GLintknotCount, GLfloat*knots, GLintstride, GLfloat*control, GLintorder, GLenumtype)

## Parameters

*nurb*Specifies the NURBS object (created with

**gluNewNurbsRenderer**).*knotCount*Specifies the number of knots in

*knots*.*knotCount*equals the number of control points plus the order.*knots*Specifies an array of

*knotCount*nondecreasing knot values.*stride*Specifies the offset (as a number of single-precision floating-point values) between successive curve control points.

*control*Specifies a pointer to an array of control points. The coordinates must agree with

*type*, specified below.*order*Specifies the order of the NURBS curve.

*order*equals degree + 1, hence a cubic curve has an order of 4.*type*Specifies the type of the curve. If this curve is defined within a

**gluBeginCurve**/**gluEndCurve**pair, then the type can be any of the valid one-dimensional evaluator types (such as**GL_MAP1_VERTEX_3**or**GL_MAP1_COLOR_4**). Between a**gluBeginTrim**/**gluEndTrim**pair, the only valid types are**GLU_MAP1_TRIM_2**and**GLU_MAP1_TRIM_3**.

## Description

Use **gluNurbsCurve** to describe a NURBS curve.

When **gluNurbsCurve** appears between a **gluBeginCurve**/**gluEndCurve** pair, it is used to describe a curve to be rendered. Positional, texture, and color coordinates are associated by presenting each as a separate **gluNurbsCurve** between a **gluBeginCurve**/**gluEndCurve** pair. No more than one call to **gluNurbsCurve** for each of color, position, and texture data can be made within a single **gluBeginCurve**/**gluEndCurve** pair. Exactly one call must be made to describe the position of the curve (a *type* of **GL_MAP1_VERTEX_3** or **GL_MAP1_VERTEX_4**).

When **gluNurbsCurve** appears between a **gluBeginTrim**/**gluEndTrim** pair, it is used to describe a trimming curve on a NURBS surface. If *type* is **GLU_MAP1_TRIM_2**, then it describes a curve in two-dimensional (*u* and *v*) parameter space. If it is **GLU_MAP1_TRIM_3**, then it describes a curve in two-dimensional homogeneous (*u*, *v*, and *w*) parameter space. See the **gluBeginTrim** reference page for more discussion about trimming curves.

## Example

The following commands render a textured NURBS curve with normals:

gluBeginCurve(nobj);

gluNurbsCurve(nobj, ..., GL_MAP1_TEXTURE_COORD_2);

gluNurbsCurve(nobj, ..., GL_MAP1_NORMAL);

gluNurbsCurve(nobj, ..., GL_MAP1_VERTEX_4); gluEndCurve(nobj);

## Notes

To define trim curves which stitch well, use **gluPwlCurve**.

## See Also

gluBeginCurve(3G), gluBeginTrim(3G), gluNewNurbsRenderer(3G), gluPwlCurve(3G)

## Referenced By

gluBeginCurve.3G(3), gluBeginSurface.3G(3), gluBeginTrim.3G(3), gluNurbsSurface.3G(3), gluPwlCurve.3G(3).