---
name: "gluNurbsSurface"
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/gluNurbsSurface"
---

# gluNurbsSurface(3x)

define the shape of a NURBS surface

## NAME

**gluNurbsSurface** - define the shape of a NURBS surface

## C SPECIFICATION

void **gluNurbsSurface**( GLUnurbs\* *nurb*,

```
	GLint sKnotCount,
	GLfloat* sKnots,
	GLint tKnotCount,
	GLfloat* tKnots,
	GLint sStride,
	GLint tStride,
	GLfloat* control,
	GLint sOrder,
	GLint tOrder,
	GLenum type )
```

delim $$

## PARAMETERS

- *nurb*

  Specifies the NURBS object (created with **gluNewNurbsRenderer**).

- *sKnotCount*

  Specifies the number of knots in the parametric *u* direction.

- *sKnots*

  Specifies an array of *sKnotCount* nondecreasing knot values in the parametric *u* direction.

- *tKnotCount*

  Specifies the number of knots in the parametric *v* direction.

- *tKnots*

  Specifies an array of *tKnotCount* nondecreasing knot values in the parametric *v* direction.

- *sStride*

  Specifies the offset (as a number of single-precision floating point values) between successive control points in the parametric *u* direction in *control*.

- *tStride*

  Specifies the offset (in single-precision floating-point values) between successive control points in the parametric *v* direction in *control*.

- *control*

  Specifies an array containing control points for the NURBS surface. The offsets between successive control points in the parametric *u* and *v* directions are given by *sStride* and *tStride*.

- *sOrder*

  Specifies the order of the NURBS surface in the parametric *u*  direction. The order is one more than the degree, hence a surface that is cubic in *u* has a *u* order of 4.

- *tOrder*

  Specifies the order of the NURBS surface in the parametric *v*  direction. The order is one more than the degree, hence a surface that is cubic in *v* has a *v* order of 4.

- *type*

  Specifies type of the surface. *type* can be any of the valid two-dimensional evaluator types (such as **GL\_MAP2\_VERTEX\_3** or  **GL\_MAP2\_COLOR\_4**).

## DESCRIPTION

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.

## EXAMPLE

The following commands render a textured NURBS surface with normals; the texture coordinates and normals are also NURBS surfaces:

gluBeginSurface(nobj);\
    gluNurbsSurface(nobj, ..., GL\_MAP2\_TEXTURE\_COORD\_2);\
    gluNurbsSurface(nobj, ..., GL\_MAP2\_NORMAL);\
    gluNurbsSurface(nobj, ..., GL\_MAP2\_VERTEX\_4); gluEndSurface(nobj);

## SEE ALSO

**gluBeginSurface(3G)**, **gluBeginTrim(3G)**, **gluNewNurbsRenderer(3G)**,  **gluNurbsCurve(3G)**, **gluPwlCurve(3G)**
