Provided by: erlang-manpages_18.3-dfsg-1ubuntu3.1_all bug

NAME

       glu -  A part of the standard OpenGL Utility api.

DESCRIPTION

       A part of the standard OpenGL Utility api. See www.opengl.org

       Booleans are represented by integers 0 and 1.

DATA TYPES

         enum() = non_neg_integer():

           See wx/include/gl.hrl or glu.hrl

         matrix() = matrix12() | matrix16():

         matrix12()  =  {float(),  float(), float(), float(), float(), float(), float(), float(),
         float(), float(), float(), float()}:

         matrix16() = {float(), float(), float(), float(), float(),  float(),  float(),  float(),
         float(), float(), float(), float(), float(), float(), float(), float()}:

         mem() = binary() | tuple():

           Memory block

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

EXPORTS

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

              Types:

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

              General  purpose  polygon  triangulation.  The first argument is the normal and the
              second a list of vertex positions. Returned is a list of indecies 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.

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

              Types:

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

              Builds a subset of one-dimensional mipmap levels

              glu:build1DMipmapLevels 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.

              A  return  value  of zero indicates success, otherwise a GLU error code is returned
              (see glu:errorString/1 ).

              A series of mipmap levels from Base to Max is built  by  decimating  Data  in  half
              until  size 1×1 is reached. At each level, each texel in the halved mipmap level is
              an  average  of  the  corresponding  two  texels  in  the  larger   mipmap   level.
              gl:texImage1D/8  is called to load these mipmap levels from Base to Max . If Max is
              larger than the highest mipmap level for the texture of the specified size, then  a
              GLU error code is returned (see glu:errorString/1 ) and nothing is loaded.

              For  example,  if  Level  is  2 and Width is 16, the following levels are possible:
              16×1, 8×1, 4×1, 2×1, 1×1. These correspond to levels 2 through 6  respectively.  If
              Base  is  3  and  Max  is  5,  then only mipmap levels 8×1, 4×1 and 2×1 are loaded.
              However, if Max is 7, then an error is returned and nothing is loaded since Max  is
              larger than the highest mipmap level which is, in this case, 6.

              The highest mipmap level can be derived from the formula log 2(width×2 level).

              See  the  gl:texImage1D/8 reference page for a description of the acceptable values
              for Type parameter. See the gl:drawPixels/5 reference page for a description of the
              acceptable values for Level parameter.

              See external documentation.

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

              Types:

                 Target = enum()
                 InternalFormat = integer()
                 Width = integer()
                 Format = enum()
                 Type = enum()
                 Data = binary()

              Builds a one-dimensional mipmap

              glu:build1DMipmaps  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.

              A  return  value  of zero indicates success, otherwise a GLU error code is returned
              (see glu:errorString/1 ).

              Initially, the Width of Data is checked to see if it is a power of  2.  If  not,  a
              copy  of  Data is scaled up or down to the nearest power of 2. (If Width is exactly
              between powers of 2, then the copy of Data will scale upwards.) This copy  will  be
              used for subsequent mipmapping operations described below. For example, if Width is
              57, then a copy of Data will scale up to 64 before mipmapping takes place.

              Then,  proxy  textures  (see  gl:texImage1D/8  )  are  used  to  determine  if  the
              implementation  can  fit the requested texture. If not, Width is continually halved
              until it fits.

              Next, a series of mipmap levels is built by decimating a copy of Data in half until
              size  1×1  is  reached.  At each level, each texel in the halved mipmap level is an
              average of the corresponding two texels in the larger mipmap level.

              gl:texImage1D/8 is called to load each of these mipmap levels. Level 0 is a copy of
              Data  .  The  highest  level is (log 2)(width). For example, if Width is 64 and the
              implementation can store a texture of this size, the following  mipmap  levels  are
              built:  64×1,  32×1,  16×1,  8×1,  4×1,  2×1, and 1×1. These correspond to levels 0
              through 6, respectively.

              See the gl:texImage1D/8 reference page for a description of the  acceptable  values
              for the Type parameter. See the gl:drawPixels/5 reference page for a description of
              the acceptable values for the Data parameter.

              See external documentation.

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

              Types:

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

              Builds a subset of two-dimensional mipmap levels

              glu:build2DMipmapLevels 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.

              A  return  value  of zero indicates success, otherwise a GLU error code is returned
              (see glu:errorString/1 ).

              A series of mipmap levels from Base to Max is built  by  decimating  Data  in  half
              along  both  dimensions until size 1×1 is reached. At each level, each texel in the
              halved mipmap level is an average of the corresponding four texels  in  the  larger
              mipmap  level.  (In  the case of rectangular images, the decimation will ultimately
              reach an N×1  or  1×N  configuration.  Here,  two  texels  are  averaged  instead.)
              gl:texImage2D/9  is called to load these mipmap levels from Base to Max . If Max is
              larger than the highest mipmap level for the texture of the specified size, then  a
              GLU error code is returned (see glu:errorString/1 ) and nothing is loaded.

              For  example,  if  Level is 2 and Width is 16 and Height is 8, the following levels
              are possible: 16×8, 8×4, 4×2, 2×1, 1×1. These correspond  to  levels  2  through  6
              respectively.  If Base is 3 and Max is 5, then only mipmap levels 8×4, 4×2, and 2×1
              are loaded. However, if Max is 7, then an error is returned and nothing  is  loaded
              since Max is larger than the highest mipmap level which is, in this case, 6.

              The  highest mipmap level can be derived from the formula log 2(max(width height)×2
              level).

              See the gl:texImage1D/8 reference page for a description of the  acceptable  values
              for  Format  parameter. See the gl:drawPixels/5 reference page for a description of
              the acceptable values for Type parameter.

              See external documentation.

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

              Types:

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

              Builds a two-dimensional mipmap

              glu:build2DMipmaps 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.

              A return value of zero indicates success, otherwise a GLU error  code  is  returned
              (see glu:errorString/1 ).

              Initially,  the  Width and Height of Data are checked to see if they are a power of
              2. If not, a copy of Data (not Data ), is scaled up or down to the nearest power of
              2. This copy will be used for subsequent mipmapping operations described below. (If
              Width or Height is exactly between powers of 2, then the copy of  Data  will  scale
              upwards.)  For  example,  if Width is 57 and Height is 23, then a copy of Data will
              scale up to 64 in Width and down to 16 in depth, before mipmapping takes place.

              Then,  proxy  textures  (see  gl:texImage2D/9  )  are  used  to  determine  if  the
              implementation  can  fit  the  requested  texture.  If  not,  both  dimensions  are
              continually halved until it fits. (If the OpenGL version is (<= 1.0,  both  maximum
              texture  dimensions  are clamped to the value returned by gl:getBooleanv/1 with the
              argument ?GLU_MAX_TEXTURE_SIZE .)

              Next, a series of mipmap levels is built by decimating a copy of Data in half along
              both  dimensions until size 1×1 is reached. At each level, each texel in the halved
              mipmap level is an average of the corresponding four texels in  the  larger  mipmap
              level.  (In the case of rectangular images, the decimation will ultimately reach an
              N×1 or 1×N configuration. Here, two texels are averaged instead.)

              gl:texImage2D/9 is called to load each of these mipmap levels. Level 0 is a copy of
              Data . The highest level is (log 2)(max(width height)). For example, if Width is 64
              and Height is 16 and the implementation can store  a  texture  of  this  size,  the
              following  mipmap levels are built: 64×16, 32×8, 16×4, 8×2, 4×1, 2×1, and 1×1 These
              correspond to levels 0 through 6, respectively.

              See the gl:texImage1D/8 reference page for a description of the  acceptable  values
              for  Format  parameter. See the gl:drawPixels/5 reference page for a description of
              the acceptable values for Type parameter.

              See external documentation.

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

              Types:

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

              Builds a subset of three-dimensional mipmap levels

              glu:build3DMipmapLevels  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.

              A  return  value  of zero indicates success, otherwise a GLU error code is returned
              (see glu:errorString/1 ).

              A series of mipmap levels from Base to Max is built  by  decimating  Data  in  half
              along both dimensions until size 1×1×1 is reached. At each level, each texel in the
              halved mipmap level is an average of the corresponding eight texels in  the  larger
              mipmap  level. (If exactly one of the dimensions is 1, four texels are averaged. If
              exactly two of the dimensions are 1, two texels are averaged.) gl:texImage3D/10  is
              called  to  load  these  mipmap levels from Base to Max . If Max is larger than the
              highest mipmap level for the texture of the specified size, then a GLU  error  code
              is returned (see glu:errorString/1 ) and nothing is loaded.

              For  example,  if  Level  is  2  and  Width  is 16, Height is 8 and Depth is 4, the
              following levels are possible: 16×8×4, 8×4×2, 4×2×1, 2×1×1, 1×1×1. These correspond
              to  levels  2  through  6 respectively. If Base is 3 and Max is 5, then only mipmap
              levels 8×4×2, 4×2×1, and 2×1×1 are loaded. However, if Max is 7, then an  error  is
              returned  and  nothing is loaded, since Max is larger than the highest mipmap level
              which is, in this case, 6.

              The highest mipmap level can be derived from the  formula  log  2(max(width  height
              depth)×2 level).

              See  the  gl:texImage1D/8 reference page for a description of the acceptable values
              for Format parameter. See the gl:drawPixels/5 reference page for a  description  of
              the acceptable values for Type parameter.

              See external documentation.

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

              Types:

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

              Builds a three-dimensional mipmap

              glu:build3DMipmaps 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.

              A return value of zero indicates success, otherwise a GLU error  code  is  returned
              (see glu:errorString/1 ).

              Initially,  the  Width  , Height and Depth of Data are checked to see if they are a
              power of 2. If not, a copy of Data is made and scaled up or  down  to  the  nearest
              power  of 2. (If Width , Height , or Depth is exactly between powers of 2, then the
              copy of Data will scale upwards.) This copy will be used for subsequent  mipmapping
              operations described below. For example, if Width is 57, Height is 23, and Depth is
              24, then a copy of Data will scale up to 64 in width, down to 16 in height, and  up
              to 32 in depth before mipmapping takes place.

              Then,  proxy  textures  (see  gl:texImage3D/10  )  are  used  to  determine  if the
              implementation can fit the requested texture. If  not,  all  three  dimensions  are
              continually halved until it fits.

              Next, a series of mipmap levels is built by decimating a copy of Data in half along
              all three dimensions until size 1×1×1 is reached. At each level, each texel in  the
              halved  mipmap  level is an average of the corresponding eight texels in the larger
              mipmap level. (If exactly one of the dimensions is 1, four texels are averaged.  If
              exactly two of the dimensions are 1, two texels are averaged.)

              gl:texImage3D/10  is  called to load each of these mipmap levels. Level 0 is a copy
              of Data . The highest level is (log 2)(max(width height depth)).  For  example,  if
              Width  is  64,  Height  is  16, and Depth is 32, and the implementation can store a
              texture of this size, the following mipmap levels  are  built:  64×16×32,  32×8×16,
              16×4×8,  8×2×4,  4×1×2,  2×1×1,  and 1×1×1. These correspond to levels 0 through 6,
              respectively.

              See the gl:texImage1D/8 reference page for a description of the  acceptable  values
              for  Format  parameter. See the gl:drawPixels/5 reference page for a description of
              the acceptable values for Type parameter.

              See external documentation.

       checkExtension(ExtName, ExtString) -> 0 | 1

              Types:

                 ExtName = string()
                 ExtString = string()

              Determines if an extension name is supported

              glu:checkExtension returns ?GLU_TRUE if ExtName is supported  otherwise  ?GLU_FALSE
              is returned.

              This  is  used to check for the presence for OpenGL, GLU, or GLX extension names by
              passing the extension strings returned by gl:getString/1 ,  glu:getString/1  ,  see
              glXGetClientString  ,  see  glXQueryExtensionsString,  or see glXQueryServerString,
              respectively, as ExtString .

              See external documentation.

       cylinder(Quad, Base, Top, Height, Slices, Stacks) -> ok

              Types:

                 Quad = integer()
                 Base = float()
                 Top = float()
                 Height = float()
                 Slices = integer()
                 Stacks = integer()

              Draw a cylinder

              glu:cylinder 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.

              Note that if Top is set to 0.0, this routine generates a cone.

              If the orientation is set to ?GLU_OUTSIDE (with  glu:quadricOrientation/2  ),  then
              any  generated normals point away from the z axis. Otherwise, they point toward the
              z axis.

              If texturing is turned on (with glu:quadricTexture/2 ),  then  texture  coordinates
              are  generated  so  that t ranges linearly from 0.0 at z = 0 to 1.0 at z = Height ,
              and s ranges from 0.0 at the +y axis, to 0.25 at the +x axis,  to  0.5  at  the  -y
              axis, to 0.75 at the -x axis, and back to 1.0 at the +y axis.

              See external documentation.

       deleteQuadric(Quad) -> ok

              Types:

                 Quad = integer()

              Destroy a quadrics object

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

              See external documentation.

       disk(Quad, Inner, Outer, Slices, Loops) -> ok

              Types:

                 Quad = integer()
                 Inner = float()
                 Outer = float()
                 Slices = integer()
                 Loops = integer()

              Draw a disk

              glu:disk  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).

              With  respect  to  orientation, the +z side of the disk is considered to be outside
              (see glu:quadricOrientation/2 ). This means that  if  the  orientation  is  set  to
              ?GLU_OUTSIDE  , then any normals generated point along the +z axis. Otherwise, they
              point along the -z axis.

              If texturing has been turned on (with glu:quadricTexture/2 ),  texture  coordinates
              are generated linearly such that where r=outer, the value at (r, 0, 0) is (1, 0.5),
              at (0, r, 0) it is (0.5, 1), at (-r, 0, 0) it is (0, 0.5), and at (0, -r, 0) it  is
              (0.5, 0).

              See external documentation.

       errorString(Error) -> string()

              Types:

                 Error = enum()

              Produce an error string from a GL or GLU error code

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

              The  standard  GLU  error  codes  are  ?GLU_INVALID_ENUM,  ?GLU_INVALID_VALUE,  and
              ?GLU_OUT_OF_MEMORY. Certain other GLU functions can return specialized error  codes
              through  callbacks.  See  the gl:getError/0 reference page for the list of GL error
              codes.

              See external documentation.

       getString(Name) -> string()

              Types:

                 Name = enum()

              Return a string describing the GLU version or GLU extensions

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

              The version number is one of the following forms:

              major_number.minor_numbermajor_number.minor_number.release_number.

              The version string is of the following form:

              version number&lt;space&gt;vendor-specific information

              Vendor-specific  information  is  optional.  Its  format and contents depend on the
              implementation.

              The standard GLU contains a basic set of features and capabilities. If a company or
              group  of  companies  wish  to  support  other  features,  these may be included as
              extensions to the GLU. If Name is ?GLU_EXTENSIONS,  then  glu:getString  returns  a
              space-separated  list  of names of supported GLU extensions. (Extension names never
              contain spaces.)

              All strings are null-terminated.

              See external documentation.

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

              Types:

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

              Define a viewing transformation

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

              The matrix maps the reference point to the negative z axis and the eye point to the
              origin. When a typical projection matrix is used, the center of the scene therefore
              maps  to  the  center of the viewport. Similarly, the direction described by the UP
              vector projected onto the viewing plane is mapped to the positive y axis so that it
              points  upward  in  the viewport. The UP vector must not be parallel to the line of
              sight from the eye point to the reference point.

              Let

              F=(centerX-eyeX centerY-eyeY centerZ-eyeZ)

              Let UP be the vector (upX upY upZ).

              Then normalize as follows: f=F/(||F||)

              UP"=UP/(||UP||)

              Finally, let s=f×UP", and u=s×f.

              M  is  then  constructed  as  follows:  M=(s[0]  s[1]  s[2]  0   u[0]   u[1]   u[2]
              0-f[0]-f[1]-f[2] 0 0 0 0 1)

              and  glu:lookAt  is  equivalent  to  glMultMatrixf(M);  glTranslated(-eyex,  -eyey,
              -eyez);

              See external documentation.

       newQuadric() -> integer()

              Create a quadrics object

              glu:newQuadric 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.

              See external documentation.

       ortho2D(Left, Right, Bottom, Top) -> ok

              Types:

                 Left = float()
                 Right = float()
                 Bottom = float()
                 Top = float()

              Define a 2D orthographic projection matrix

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

              See external documentation.

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

              Types:

                 Quad = integer()
                 Inner = float()
                 Outer = float()
                 Slices = integer()
                 Loops = integer()
                 Start = float()
                 Sweep = float()

              Draw an arc of a disk

              glu:partialDisk  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).

              The partial 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 partial 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).

              With  respect  to  orientation, the +z side of the partial disk is considered to be
              outside (see glu:quadricOrientation/2 ). This means that if the orientation is  set
              to  ?GLU_OUTSIDE,  then  any  normals generated point along the +z axis. Otherwise,
              they point along the -z axis.

              If texturing is turned on (with glu:quadricTexture/2  ),  texture  coordinates  are
              generated  linearly  such that where r=outer, the value at (r, 0, 0) is (1.0, 0.5),
              at (0, r, 0) it is (0.5, 1.0), at (-r, 0, 0) it is (0.0, 0.5), and at (0, -r, 0) it
              is (0.5, 0.0).

              See external documentation.

       perspective(Fovy, Aspect, ZNear, ZFar) -> ok

              Types:

                 Fovy = float()
                 Aspect = float()
                 ZNear = float()
                 ZFar = float()

              Set up a perspective projection matrix

              glu:perspective  specifies  a  viewing frustum into the world coordinate system. In
              general, the aspect ratio in glu:perspective 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.

              The matrix generated by glu:perspective is multipled by the current matrix, just as
              if gl:multMatrixd/1 were called with the generated matrix. To load the  perspective
              matrix  onto  the current matrix stack instead, precede the call to glu:perspective
              with a call to gl:loadIdentity/0 .

              Given f defined as follows:

              f=cotangent(fovy/2) The generated matrix is

              (f/aspect 0 0 0 0 f 0 0 0 0(zFar+zNear)/(zNear-zFar)(2×zFar×zNear)/(zNear-zFar) 0 0
              -1 0)

              See external documentation.

       pickMatrix(X, Y, DelX, DelY, Viewport) -> ok

              Types:

                 X = float()
                 Y = float()
                 DelX = float()
                 DelY = float()
                 Viewport = {integer(), integer(), integer(), integer()}

              Define a picking region

              glu:pickMatrix  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 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.

              The matrix created by glu:pickMatrix is multiplied by the current matrix just as if
              gl:multMatrixd/1  is  called  with  the  generated  matrix.  To effectively use the
              generated pick matrix for picking, first call gl:loadIdentity/0 to load an identity
              matrix  onto  the perspective matrix stack. Then call glu:pickMatrix, and, finally,
              call a command (such as glu:perspective/4 ) to multiply the perspective  matrix  by
              the pick matrix.

              When  using glu:pickMatrix to pick NURBS, be careful to turn off the NURBS property
              ?GLU_AUTO_LOAD_MATRIX. If ?GLU_AUTO_LOAD_MATRIX is not turned off, then  any  NURBS
              surface rendered is subdivided differently with the pick matrix than the way it was
              subdivided without the pick matrix.

              See external documentation.

       project(ObjX, ObjY, ObjZ, Model, Proj, View) -> {integer(), WinX::float(),  WinY::float(),
       WinZ::float()}

              Types:

                 ObjX = float()
                 ObjY = float()
                 ObjZ = float()
                 Model = matrix()
                 Proj = matrix()
                 View = {integer(), integer(), integer(), integer()}

              Map object coordinates to window coordinates

              glu:project  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.

              To compute the coordinates, let v=(objX objY objZ 1.0) represented as a matrix with
              4 rows and 1 column. Then glu:project computes v" as follows:

              v"=P×M×v

              where P is the current projection matrix Proj and M is the current modelview matrix
              Model (both represented as 4×4 matrices in column-major order).

              The window coordinates are then computed as follows:

              winX=view(0)+view(2)×(v"(0)+1)/2

              winY=view(1)+view(3erl)×(v"(1)+1)/2

              winZ=(v"(2)+1)/2

              See external documentation.

       quadricDrawStyle(Quad, Draw) -> ok

              Types:

                 Quad = integer()
                 Draw = enum()

              Specify the draw style desired for quadrics

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

              ?GLU_FILL: Quadrics are rendered with polygon primitives. The polygons are drawn in
              a  counterclockwise  fashion  with  respect  to  their  normals  (as  defined  with
              glu:quadricOrientation/2 ).

              ?GLU_LINE: Quadrics are rendered as a set of lines.

              ?GLU_SILHOUETTE:  Quadrics  are  rendered  as  a  set  of  lines, except that edges
              separating coplanar faces will not be drawn.

              ?GLU_POINT: Quadrics are rendered as a set of points.

              See external documentation.

       quadricNormals(Quad, Normal) -> ok

              Types:

                 Quad = integer()
                 Normal = enum()

              Specify what kind of normals are desired for quadrics

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

              ?GLU_NONE: No normals are generated.

              ?GLU_FLAT: One normal is generated for every facet of a quadric.

              ?GLU_SMOOTH:  One  normal  is  generated for every vertex of a quadric. This is the
              initial value.

              See external documentation.

       quadricOrientation(Quad, Orientation) -> ok

              Types:

                 Quad = integer()
                 Orientation = enum()

              Specify inside/outside orientation for quadrics

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

              ?GLU_OUTSIDE: Quadrics are drawn with normals pointing outward (the initial value).

              ?GLU_INSIDE: Quadrics are drawn with normals pointing inward.

              Note  that  the  interpretation  of outward and inward depends on the quadric being
              drawn.

              See external documentation.

       quadricTexture(Quad, Texture) -> ok

              Types:

                 Quad = integer()
                 Texture = 0 | 1

              Specify if texturing is desired for quadrics

              glu:quadricTexture  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.

              The  manner  in  which  texture coordinates are generated depends upon the specific
              quadric rendered.

              See external documentation.

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

              Types:

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

              Scale an image to an arbitrary size

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

              When  shrinking  an  image,  glu:scaleImage  uses a box filter to sample the source
              image and create pixels for the destination image. When magnifying  an  image,  the
              pixels  from  the  source image are linearly interpolated to create the destination
              image.

              A return value of zero indicates success, otherwise a GLU error  code  is  returned
              (see glu:errorString/1 ).

              See  the  gl:readPixels/7 reference page for a description of the acceptable values
              for the Format , TypeIn , and TypeOut parameters.

              See external documentation.

       sphere(Quad, Radius, Slices, Stacks) -> ok

              Types:

                 Quad = integer()
                 Radius = float()
                 Slices = integer()
                 Stacks = integer()

              Draw a sphere

              glu:sphere 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).

              If the orientation is set to ?GLU_OUTSIDE (with  glu:quadricOrientation/2  ),  then
              any  normals  generated  point  away from the center of the sphere. Otherwise, they
              point toward the center of the sphere.

              If texturing is turned on (with glu:quadricTexture/2 ),  then  texture  coordinates
              are  generated  so  that  t  ranges  from  0.0  at  z=-radius to 1.0 at z=radius (t
              increases linearly along longitudinal lines), and s ranges from 0.0 at the +y axis,
              to  0.25 at the +x axis, to 0.5 at the -y axis, to 0.75 at the -x axis, and back to
              1.0 at the +y axis.

              See external documentation.

       unProject(WinX,  WinY,  WinZ,   Model,   Proj,   View)   ->   {integer(),   ObjX::float(),
       ObjY::float(), ObjZ::float()}

              Types:

                 WinX = float()
                 WinY = float()
                 WinZ = float()
                 Model = matrix()
                 Proj = matrix()
                 View = {integer(), integer(), integer(), integer()}

              Map window coordinates to object coordinates

              glu:unProject  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.

              To  compute  the  coordinates  (objX  objY  objZ),  glu:unProject  multiplies   the
              normalized device coordinates by the inverse of Model * Proj as follows:

              (objX     objY     objZ    W)=INV(P    M)    ((2(winX-view[0]))/(view[2])-1(2(winY-
              view[1]))/(view[3])-1 2(winZ)-1 1) INV denotes matrix inversion.  W  is  an  unused
              variable, included for consistent matrix notation.

              See external documentation.

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

              Types:

                 WinX = float()
                 WinY = float()
                 WinZ = float()
                 ClipW = float()
                 Model = matrix()
                 Proj = matrix()
                 View = {integer(), integer(), integer(), integer()}
                 NearVal = float()
                 FarVal = float()

              See unProject/6

AUTHORS

       <>

                                             wx 1.6.1                                   glu(3erl)