---
name: "glu"
section: "3erl"
platform: "linux"
package: "erlang-manpages"
version: "1:25.2.3+dfsg-1+deb12u4"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/glu"
---

# glu(3erl)

Erlang wrapper functions for OpenGL

## NAME

glu - Erlang wrapper functions for OpenGL

## DESCRIPTION

Standard OpenGL API

This documents the functions as a brief version of the complete OpenGL reference pages.

## DATA TYPES

```
vertex() = {float(), float(), float()}
```

```
i() = integer()
```

```
f() = float()
```

```
enum() = integer() >= 0
```

```
matrix() = m12() | m16()
```

```
m12() =
    {f(), f(), f(), f(), f(), f(), f(), f(), f(), f(), f(), f()}
```

```
m16() =
    {f(),
     f(),
     f(),
     f(),
     f(),
     f(),
     f(),
     f(),
     f(),
     f(),
     f(),
     f(),
     f(),
     f(),
     f(),
     f()}
```

```
mem() = binary() | tuple()
```

## EXPORTS

```
build1DMipmapLevels(Target, InternalFormat, Width, Format, Type,
                    Level, Base, Max, Data) ->
                       i()
```

Types:

Target = enum()\
 InternalFormat = Width = i()\
 Format = Type = enum()\
 Level = Base = Max = i()\
 Data = binary()\

*glu:build1DMipmapLevels/9* builds a subset of prefiltered one-dimensional texture maps of decreasing resolutions called a mipmap. This is used for the antialiasing of texture mapped primitives.

External documentation.

```
build1DMipmaps(Target, InternalFormat, Width, Format, Type, Data) ->
                  i()
```

Types:

Target = enum()\
 InternalFormat = Width = i()\
 Format = Type = enum()\
 Data = binary()\

*glu:build1DMipmaps/6* builds a series of prefiltered one-dimensional texture maps of decreasing resolutions called a mipmap. This is used for the antialiasing of texture mapped primitives.

External documentation.

```
build2DMipmapLevels(Target, InternalFormat, Width, Height, Format,
                    Type, Level, Base, Max, Data) ->
                       i()
```

Types:

Target = enum()\
 InternalFormat = Width = Height = i()\
 Format = Type = enum()\
 Level = Base = Max = i()\
 Data = binary()\

*glu:build2DMipmapLevels/10* builds a subset of prefiltered two-dimensional texture maps of decreasing resolutions called a mipmap. This is used for the antialiasing of texture mapped primitives.

External documentation.

```
build2DMipmaps(Target, InternalFormat, Width, Height, Format,
               Type, Data) ->
                  i()
```

Types:

Target = enum()\
 InternalFormat = Width = Height = i()\
 Format = Type = enum()\
 Data = binary()\

*glu:build2DMipmaps/7* builds a series of prefiltered two-dimensional texture maps of decreasing resolutions called a mipmap. This is used for the antialiasing of texture-mapped primitives.

External documentation.

```
build3DMipmapLevels(Target, InternalFormat, Width, Height, Depth,
                    Format, Type, Level, Base, Max, Data) ->
                       i()
```

Types:

Target = enum()\
 InternalFormat = Width = Height = Depth = i()\
 Format = Type = enum()\
 Level = Base = Max = i()\
 Data = binary()\

*glu:build3DMipmapLevels/11* builds a subset of prefiltered three-dimensional texture maps of decreasing resolutions called a mipmap. This is used for the antialiasing of texture mapped primitives.

External documentation.

```
build3DMipmaps(Target, InternalFormat, Width, Height, Depth,
               Format, Type, Data) ->
                  i()
```

Types:

Target = enum()\
 InternalFormat = Width = Height = Depth = i()\
 Format = Type = enum()\
 Data = binary()\

*glu:build3DMipmaps/8* builds a series of prefiltered three-dimensional texture maps of decreasing resolutions called a mipmap. This is used for the antialiasing of texture-mapped primitives.

External documentation.

```
checkExtension(ExtName :: string(), ExtString :: string()) ->
                  0 | 1
```

*glu:checkExtension/2* returns *?GLU\_TRUE* if *ExtName* is supported otherwise *?GLU\_FALSE* is returned.

External documentation.

```
cylinder(Quad :: i(),
         Base :: f(),
         Top :: f(),
         Height :: f(),
         Slices :: i(),
         Stacks :: i()) ->
            ok
```

*glu:cylinder/6* draws a cylinder oriented along the *z* axis. The base of the cylinder is placed at *z* = 0 and the top at z=height. Like a sphere, a cylinder is subdivided around the *z* axis into slices and along the *z* axis into stacks.

External documentation.

```
deleteQuadric(Quad :: i()) -> ok
```

*glu:deleteQuadric/1* destroys the quadrics object (created with *glu:newQuadric/0*) and frees any memory it uses. Once *glu:deleteQuadric/1* has been called, *Quad* cannot be used again.

External documentation.

```
disk(Quad :: i(),
     Inner :: f(),
     Outer :: f(),
     Slices :: i(),
     Loops :: i()) ->
        ok
```

*glu:disk/5* renders a disk on the *z* = 0 plane. The disk has a radius of *Outer* and contains a concentric circular hole with a radius of *Inner*. If *Inner* is 0, then no hole is generated. The disk is subdivided around the *z* axis into slices (like pizza slices) and also about the *z* axis into rings (as specified by *Slices* and *Loops*, respectively).

External documentation.

```
errorString(Error :: enum()) -> string()
```

*glu:errorString/1* produces an error string from a GL or GLU error code. The string is in ISO Latin 1 format. For example, *glu:errorString/1*(*?GLU\_OUT\_OF\_MEMORY*) returns the string *out of memory*.

External documentation.

```
getString(Name :: enum()) -> string()
```

*glu:getString/1* returns a pointer to a static string describing the GLU version or the GLU extensions that are supported.

External documentation.

```
lookAt(EyeX, EyeY, EyeZ, CenterX, CenterY, CenterZ, UpX, UpY, UpZ) ->
          ok
```

Types:

EyeX = EyeY = EyeZ = CenterX = CenterY = CenterZ = UpX = UpY = UpZ = f()\

*glu:lookAt/9* creates a viewing matrix derived from an eye point, a reference point indicating the center of the scene, and an *UP* vector.

External documentation.

```
newQuadric() -> i()
```

*glu:newQuadric/0* creates and returns a pointer to a new quadrics object. This object must be referred to when calling quadrics rendering and control functions. A return value of 0 means that there is not enough memory to allocate the object.

External documentation.

```
ortho2D(Left :: f(), Right :: f(), Bottom :: f(), Top :: f()) ->
           ok
```

*glu:ortho2D/4* sets up a two-dimensional orthographic viewing region. This is equivalent to calling *gl:ortho/6* with near=-1 and far=1.

External documentation.

```
partialDisk(Quad, Inner, Outer, Slices, Loops, Start, Sweep) -> ok
```

Types:

Quad = i()\
 Inner = Outer = f()\
 Slices = Loops = i()\
 Start = Sweep = f()\

*glu:partialDisk/7* renders a partial disk on the z=0 plane. A partial disk is similar to a full disk, except that only the subset of the disk from *Start* through *Start* + *Sweep* is included (where 0 degrees is along the +f2yf axis, 90 degrees along the +*x* axis, 180 degrees along the -*y* axis, and 270 degrees along the -*x* axis).

External documentation.

```
perspective(Fovy :: f(), Aspect :: f(), ZNear :: f(), ZFar :: f()) ->
               ok
```

*glu:perspective/4* specifies a viewing frustum into the world coordinate system. In general, the aspect ratio in *glu:perspective/4* should match the aspect ratio of the associated viewport. For example, aspect=2.0 means the viewer's angle of view is twice as wide in *x* as it is in *y*. If the viewport is twice as wide as it is tall, it displays the image without distortion.

External documentation.

```
pickMatrix(X :: f(),
           Y :: f(),
           DelX :: f(),
           DelY :: f(),
           Viewport :: {i(), i(), i(), i()}) ->
              ok
```

*glu:pickMatrix/5* creates a projection matrix that can be used to restrict drawing to a small region of the viewport. This is typically useful to determine what objects are being drawn near the cursor. Use *glu:pickMatrix/5* to restrict drawing to a small region around the cursor. Then, enter selection mode (with *gl:renderMode/1*) and rerender the scene. All primitives that would have been drawn near the cursor are identified and stored in the selection buffer.

External documentation.

```
project(ObjX, ObjY, ObjZ, Model, Proj, View) ->
           {i(), WinX :: f(), WinY :: f(), WinZ :: f()}
```

Types:

ObjX = ObjY = ObjZ = f()\
 Model = Proj = matrix()\
 View = {i(), i(), i(), i()}\

*glu:project/6* transforms the specified object coordinates into window coordinates using *Model*, *Proj*, and *View*. The result is stored in *WinX*, *WinY*, and *WinZ*. A return value of *?GLU\_TRUE* indicates success, a return value of *?GLU\_FALSE* indicates failure.

External documentation.

```
quadricDrawStyle(Quad :: i(), Draw :: enum()) -> ok
```

*glu:quadricDrawStyle/2* specifies the draw style for quadrics rendered with *Quad*. The legal values are as follows:

External documentation.

```
quadricNormals(Quad :: i(), Normal :: enum()) -> ok
```

*glu:quadricNormals/2* specifies what kind of normals are desired for quadrics rendered with *Quad*. The legal values are as follows:

External documentation.

```
quadricOrientation(Quad :: i(), Orientation :: enum()) -> ok
```

*glu:quadricOrientation/2* specifies what kind of orientation is desired for quadrics rendered with *Quad*. The *Orientation* values are as follows:

External documentation.

```
quadricTexture(Quad :: i(), Texture :: 0 | 1) -> ok
```

*glu:quadricTexture/2* specifies if texture coordinates should be generated for quadrics rendered with *Quad*. If the value of *Texture* is *?GLU\_TRUE*, then texture coordinates are generated, and if *Texture* is *?GLU\_FALSE*, they are not. The initial value is *?GLU\_FALSE*.

External documentation.

```
scaleImage(Format, WIn, HIn, TypeIn, DataIn, WOut, HOut, TypeOut,
           DataOut) ->
              i()
```

Types:

Format = enum()\
 WIn = HIn = i()\
 TypeIn = enum()\
 DataIn = binary()\
 WOut = HOut = i()\
 TypeOut = enum()\
 DataOut = mem()\

*glu:scaleImage/9* scales a pixel image using the appropriate pixel store modes to unpack data from the source image and pack data into the destination image.

External documentation.

```
sphere(Quad :: i(), Radius :: f(), Slices :: i(), Stacks :: i()) ->
          ok
```

*glu:sphere/4* draws a sphere of the given radius centered around the origin. The sphere is subdivided around the *z* axis into slices and along the *z* axis into stacks (similar to lines of longitude and latitude).

External documentation.

```
tesselate(Normal, Vs :: [Vs]) -> {Triangles, VertexPos}
```

Types:

Normal = Vs = vertex()\
 Triangles = \[integer()\]\
 VertexPos = binary()\

Triangulates a polygon, the polygon is specified by a *Normal* and *Vs* a list of vertex positions.

The function returns a list of indices of the vertices and a binary (64bit native float) containing an array of vertex positions, it starts with the vertices in *Vs* and may contain newly created vertices in the end.

```
unProject(WinX, WinY, WinZ, Model, Proj, View) ->
             {i(), ObjX :: f(), ObjY :: f(), ObjZ :: f()}
```

```
unProject4(WinX, WinY, WinZ, ClipW, Model, Proj, View, NearVal,
           FarVal) ->
              {i(),
               ObjX :: f(),
               ObjY :: f(),
               ObjZ :: f(),
               ObjW :: f()}
```

Types:

WinX = WinY = WinZ = ClipW = f()\
 Model = Proj = matrix()\
 View = {i(), i(), i(), i()}\
 NearVal = FarVal = f()\

*glu:unProject/6* maps the specified window coordinates into object coordinates using *Model*, *Proj*, and *View*. The result is stored in *ObjX*, *ObjY*, and *ObjZ*. A return value of *?GLU\_TRUE* indicates success; a return value of *?GLU\_FALSE* indicates failure.

External documentation.
