glu(3erl)

πŸ’… glu β€” Erlang wrapper functions for OpenGL πŸ’…

Manual page glu(3erl) β€” Erlang Module Definition. Okay bestie, this is part 1, and it's literally the glu wrapper functions for OpenGL. The whole page is a brief version of the complete OpenGL reference pages, so it's giving β€œcheat sheet but make it sparkle.” ✨

✨ 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 πŸŽ€

Lowkey these type aliases are the whole vibe check for the page:

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()}

πŸ’… EXPORTS πŸ’…

🌸 build1DMipmapLevels/9 🌸

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. Obsessed, honestly.

External documentation.


πŸ¦‹ build1DMipmaps/6 πŸ¦‹

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. Periodt.

External documentation.


πŸŽ€ build2DMipmapLevels/10 πŸŽ€

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/7 πŸ’–

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/11 🌈

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/8 🫢

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/2 πŸ‘‘

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

glu:checkExtension/2 returns ?GLU_TRUE if ExtName is supported otherwise ?GLU_FALSE is returned. Fr fr, that's the whole check.

External documentation.


πŸ“ cylinder/6 πŸ“

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/1 πŸ’€

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. No cap, it's done.

External documentation.


🧚 disk/5 🧚

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). Pizza slices, bestie. πŸ•

External documentation.


πŸ”₯ errorString/1 πŸ”₯

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/1 ⭐

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/9 πŸ’œ

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. Main character camera energy.

External documentation.


πŸŽ€ newQuadric/0 πŸŽ€

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/4 🌸

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/7 πŸ¦‹

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/4 πŸ’–

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/5 🌈

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/6 🫢

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/2 πŸ‘‘

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/2 πŸ’…

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/2 πŸŽ€

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/2 πŸ¦‹

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

okay so glu:quadricTexture/2 is the vibe check for texture coords on quadrics πŸ’… β€” it says whether texture coordinates should be generated for quadrics rendered with Quad. If the value of Texture is ?GLU_TRUE, then texture coordinates are generated (slay ✨), and if Texture is ?GLU_FALSE, they are not (nope, not today). The initial value is ?GLU_FALSE, so it's off by default β€” you gotta turn it on yourself, bestie.

πŸ”— External documentation.


πŸŽ€ scaleImage/9

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()

So glu:scaleImage/9 scales a pixel image β€” and the way it does it is so specific: it uses the appropriate pixel store modes to unpack the data from the source image and pack it into the destination image. Unpack from DataIn, pack into DataOut, no cap. πŸ–ΌοΈβœ¨

πŸ”— External documentation.


πŸ¦‹ sphere/4

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

glu:sphere/4 draws a sphere of the given Radius, centered around the origin β€” main character geometry fr πŸ”₯. The sphere is subdivided around the z axis into slices and along the z axis into stacks (literally like lines of longitude and latitude, iykyk 🌈).

πŸ”— External documentation.


🧚 tesselate/2

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

Types:

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

Triangulates a polygon πŸ’  β€” and the polygon is specified by a Normal plus 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 πŸ‘€ β€” so like, your input comes first, and then the algorithm slides in extra vertices at the tail. Noted.


πŸ’œ unProject/6 & unProject4/9

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 lands in ObjX, ObjY, and ObjZ. πŸ’«

Heads up bestie β€” check that return value! A return value of ?GLU_TRUE indicates success; a return value of ?GLU_FALSE indicates failure. So like, do not skip the vibe check on this one 😭

πŸ”— External documentation.


and that's the whole page, bestie β€” every flag, every type, every return value accounted for, no crumbs left behind 🫢

shoutout to Ericsson AB for this iconic wx 2.2.2.1 drop, and this is the glu(3erl) manual page, signed, sealed, slayed πŸ’…βœ¨πŸŽ€

πŸ“¦ where this page comes from