---
name: "gluNurbsCurve"
section: "3x"
platform: "linux"
package: "xlibmesa-glu-dev"
version: "4.3.0.dfsg.1-14sarge7"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/gluNurbsCurve"
---

# gluNurbsCurve(3x)

define the shape of a NURBS curve

## NAME

**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 )
```

delim $$

## 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)**
