# gluNurbsCurve.3G man page

gluNurbsCurve — define the shape of a NURBS curve

## C Specification

**void gluNurbsCurve(GLUnurbs* ***nurb***, GLint ***knotCount***, GLfloat * ***knots***, GLint ***stride***, GLfloat * ***control***, GLint ***order***, GLenum ***type***);**

## 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 **GLU_MAP1_VERTEX_3** or **GLU_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 **GLU_MAP1_VERTEX_3** or **GLU_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 that stitch well, use **gluPwlCurve**().

## See Also

**gluBeginCurve**(), **gluBeginTrim**(), **gluNewNurbsRenderer**(), **gluPwlCurve**()

## Copyright

Copyright © 1991-2006 Silicon Graphics, Inc. This document is licensed under the SGI Free Software B License. For details, see http://oss.sgi.com/projects/FreeB/.

## Authors

**opengl.org**