GLU

object GLU

Provides access to the OpenGL Utility Library (GLU). This library provides standard methods for setting up view volumes, building mipmaps and performing other common operations. The GLU NURBS routines are not currently exposed.

Notes from the Reference Implementation for this class: Thanks to the contributions of many individuals, this class is a pure Java port of SGI's original C sources. All of the projection, mipmap, scaling, and tessellation routines that are exposed are compatible with the GLU 1.3 specification. The GLU NURBS routines are not currently exposed.

Properties

Link copied to clipboard
Link copied to clipboard
const val GLU_CCW: Int = 100121
Link copied to clipboard
const val GLU_CW: Int = 100120
Link copied to clipboard
const val GLU_EXTENSIONS: Int = 100801
Link copied to clipboard
const val GLU_EXTERIOR: Int = 100123
Link copied to clipboard
const val GLU_FALSE: Int = 0
Link copied to clipboard
const val GLU_INTERIOR: Int = 100122
Link copied to clipboard
const val GLU_INVALID_ENUM: Int = 100900
Link copied to clipboard
const val GLU_INVALID_OPERATION: Int = 100904
Link copied to clipboard
const val GLU_INVALID_VALUE: Int = 100901
Link copied to clipboard
const val GLU_OUT_OF_MEMORY: Int = 100902
Link copied to clipboard
const val GLU_TESS_BEGIN: Int = 100100
Link copied to clipboard
const val GLU_TESS_BEGIN_DATA: Int = 100106
Link copied to clipboard
const val GLU_TESS_BOUNDARY_ONLY: Int = 100141
Link copied to clipboard
const val GLU_TESS_COMBINE: Int = 100105
Link copied to clipboard
const val GLU_TESS_COMBINE_DATA: Int = 100111
Link copied to clipboard
const val GLU_TESS_COORD_TOO_LARGE: Int = 100155
Link copied to clipboard
const val GLU_TESS_EDGE_FLAG: Int = 100104
Link copied to clipboard
const val GLU_TESS_EDGE_FLAG_DATA: Int = 100110
Link copied to clipboard
const val GLU_TESS_END: Int = 100102
Link copied to clipboard
const val GLU_TESS_END_DATA: Int = 100108
Link copied to clipboard
const val GLU_TESS_ERROR: Int = 100103
Link copied to clipboard
const val GLU_TESS_ERROR1: Int = 100151
Link copied to clipboard
const val GLU_TESS_ERROR2: Int = 100152
Link copied to clipboard
const val GLU_TESS_ERROR3: Int = 100153
Link copied to clipboard
const val GLU_TESS_ERROR4: Int = 100154
Link copied to clipboard
const val GLU_TESS_ERROR5: Int = 100155
Link copied to clipboard
const val GLU_TESS_ERROR6: Int = 100156
Link copied to clipboard
const val GLU_TESS_ERROR7: Int = 100157
Link copied to clipboard
const val GLU_TESS_ERROR8: Int = 100158
Link copied to clipboard
const val GLU_TESS_ERROR_DATA: Int = 100109
Link copied to clipboard
const val GLU_TESS_MAX_COORD: Double = 1.0E150
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
const val GLU_TESS_MISSING_END_CONTOUR: Int = 100154
Link copied to clipboard
const val GLU_TESS_MISSING_END_POLYGON: Int = 100153
Link copied to clipboard
Link copied to clipboard
const val GLU_TESS_TOLERANCE: Int = 100142
Link copied to clipboard
const val GLU_TESS_VERTEX: Int = 100101
Link copied to clipboard
const val GLU_TESS_VERTEX_DATA: Int = 100107
Link copied to clipboard
const val GLU_TESS_WINDING_ABS_GEQ_TWO: Int = 100134
Link copied to clipboard
const val GLU_TESS_WINDING_NEGATIVE: Int = 100133
Link copied to clipboard
const val GLU_TESS_WINDING_NONZERO: Int = 100131
Link copied to clipboard
const val GLU_TESS_WINDING_ODD: Int = 100130
Link copied to clipboard
const val GLU_TESS_WINDING_POSITIVE: Int = 100132
Link copied to clipboard
const val GLU_TESS_WINDING_RULE: Int = 100140
Link copied to clipboard
const val GLU_TRUE: Int = 1
Link copied to clipboard
const val GLU_UNKNOWN: Int = 100124
Link copied to clipboard
const val GLU_VERSION: Int = 100800
Link copied to clipboard

Functions

Link copied to clipboard
fun gluDeleteTess(tessellator: GLUtessellator)

gluDeleteTess destroys the indicated tessellation object (which was created with .gluNewTess).

Link copied to clipboard
fun gluErrorString(errorCode: Int): String?
Link copied to clipboard
fun gluGetTessProperty(tessellator: GLUtessellator, which: Int, value: DoubleArray, value_offset: Int)

gluGetTessProperty retrieves properties stored in a tessellation object. These properties affect the way that tessellation objects are interpreted and rendered. See the .gluTessProperty reference page for information about the properties and what they do.

Link copied to clipboard

gluNewTess creates and returns a new tessellation object. This object must be referred to when calling tesselation methods. A return value of null means that there was not enough memeory to allocate the object.

Link copied to clipboard

gluTessBeginContour and .gluTessEndContour delimit the definition of a polygon contour. Within each gluTessBeginContour .gluTessEndContour pair, there can be zero or more calls to .gluTessVertex. The vertices specify a closed contour (the last vertex of each contour is automatically linked to the first). See the .gluTessVertex reference page for more details. gluTessBeginContour can only be called between .gluTessBeginPolygon and .gluTessEndPolygon.

Link copied to clipboard
fun gluTessBeginPolygon(tessellator: GLUtessellator, data: Any)

gluTessBeginPolygon and .gluTessEndPolygon delimit the definition of a convex, concave or self-intersecting polygon. Within each gluTessBeginPolygon .gluTessEndPolygon pair, there must be one or more calls to .gluTessBeginContour/ .gluTessEndContour. Within each contour, there are zero or more calls to .gluTessVertex. The vertices specify a closed contour (the last vertex of each contour is automatically linked to the first). See the .gluTessVertex, .gluTessBeginContour, and .gluTessEndContour reference pages for more details.

**data ** is a reference to a user-defined data structure. If the appropriate callback(s) are specified (see .gluTessCallback), then this reference is returned to the callback method(s). Thus, it is a convenient way to store per-polygon information.

Once .gluTessEndPolygon is called, the polygon is tessellated, and the resulting triangles are described through callbacks. See .gluTessCallback for descriptions of the callback methods.

Link copied to clipboard
fun gluTessCallback(tessellator: GLUtessellator, which: Int, aCallback: GLUtessellatorCallback?)

gluTessCallback is used to indicate a callback to be used by a tessellation object. If the specified callback is already defined, then it is replaced. If aCallback is null, then the existing callback becomes undefined.

These callbacks are used by the tessellation object to describe how a polygon specified by the user is broken into triangles. Note that there are two versions of each callback: one with user-specified polygon data and one without. If both versions of a particular callback are specified, then the callback with user-specified polygon data will be used. Note that the polygonData parameter used by some of the methods is a copy of the reference that was specified when .gluTessBeginPolygon was called. The legal callbacks are as follows:

  • GLU_TESS_BEGIN

    The begin callback is invoked like glBegin to indicate the start of a (triangle) primitive. The method takes a single argument of type int. If the GLU_TESS_BOUNDARY_ONLY property is set to GL_FALSE, then the argument is set to either GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP, or GL_TRIANGLES. If the GLU_TESS_BOUNDARY_ONLY property is set to GL_TRUE, then the argument will be set to GL_LINE_LOOP. The method prototype for this callback is:
    void begin(int type);
  • *
  • GLU_TESS_BEGIN_DATA

    The same as the GLU_TESS_BEGIN callback except that it takes an additional reference argument. This reference is identical to the opaque reference provided when .gluTessBeginPolygon was called. The method prototype for this callback is:
    void beginData(int type, Object polygonData);
  • *
  • GLU_TESS_EDGE_FLAG

    The edge flag callback is similar to glEdgeFlag. The method takes a single boolean boundaryEdge that indicates which edges lie on the polygon boundary. If the boundaryEdge is GL_TRUE, then each vertex that follows begins an edge that lies on the polygon boundary, that is, an edge that separates an interior region from an exterior one. If the boundaryEdge is GL_FALSE, then each vertex that follows begins an edge that lies in the polygon interior. The edge flag callback (if defined) is invoked before the first vertex callback.

    Since triangle fans and triangle strips do not support edge flags, the begin callback is not called with GL_TRIANGLE_FAN or GL_TRIANGLE_STRIP if a non-null edge flag callback is provided. (If the callback is initialized to null, there is no impact on performance). Instead, the fans and strips are converted to independent triangles. The method prototype for this callback is:
    void edgeFlag(boolean boundaryEdge);
  • *
  • GLU_TESS_EDGE_FLAG_DATA

    The same as the GLU_TESS_EDGE_FLAG callback except that it takes an additional reference argument. This reference is identical to the opaque reference provided when .gluTessBeginPolygon was called. The method prototype for this callback is:
    void edgeFlagData(boolean boundaryEdge, Object polygonData);
  • *
  • GLU_TESS_VERTEX

    The vertex callback is invoked between the begin and end callbacks. It is similar to glVertex3f, and it defines the vertices of the triangles created by the tessellation process. The method takes a reference as its only argument. This reference is identical to the opaque reference provided by the user when the vertex was described (see .gluTessVertex). The method prototype for this callback is:
    void vertex(Object vertexData);
  • *
  • GLU_TESS_VERTEX_DATA

    The same as the GLU_TESS_VERTEX callback except that it takes an additional reference argument. This reference is identical to the opaque reference provided when .gluTessBeginPolygon was called. The method prototype for this callback is:
    void vertexData(Object vertexData, Object polygonData);
  • *
  • GLU_TESS_END

    The end callback serves the same purpose as glEnd. It indicates the end of a primitive and it takes no arguments. The method prototype for this callback is:
    void end();
  • *
  • GLU_TESS_END_DATA

    The same as the GLU_TESS_END callback except that it takes an additional reference argument. This reference is identical to the opaque reference provided when .gluTessBeginPolygon was called. The method prototype for this callback is:
    void endData(Object polygonData);
  • *
  • GLU_TESS_COMBINE

    The combine callback is called to create a new vertex when the tessellation detects an intersection, or wishes to merge features. The method takes four arguments: an array of three elements each of type double, an array of four references, an array of four elements each of type float, and a reference to a reference. The prototype is:
    void combine(double[] coords, Object[] data, float[] weight, Object[] outData);
    The vertex is defined as a linear combination of up to four existing vertices, stored in data. The coefficients of the linear combination are given by weight; these weights always add up to 1. All vertex pointers are valid even when some of the weights are 0. coords gives the location of the new vertex.

    The user must allocate another vertex, interpolate parameters using data and weight, and return the new vertex pointer in outData. This handle is supplied during rendering callbacks. The user is responsible for freeing the memory some time after .gluTessEndPolygon is called.

    For example, if the polygon lies in an arbitrary plane in 3-space, and a color is associated with each vertex, the GLU_TESS_COMBINE callback might look like this:
     void myCombine(double[] coords, Object[] data, float[] weight, Object[] outData) { MyVertex newVertex = new MyVertex();

Link copied to clipboard

gluTessEndContour and gluTessBeginContour delimit the definition of a polygon contour. Within each gluTessBeginContour/ gluTessEndContour pair, there can be zero or more calls to gluTessVertex. The vertices specify a closed contour (the last vertex of each contour is automatically linked to the first). See the gluTessVertex reference page for more details. gluTessBeginContour can only be called between gluTessBeginPolygon and gluTessEndPolygon.

Link copied to clipboard

gluTessEndPolygon and gluTessBeginPolygon delimit the definition of a convex, concave or self-intersecting polygon. Within each gluTessBeginPolygon/ gluTessEndPolygon pair, there must be one or more calls to gluTessBeginContour/ gluTessEndContour. Within each contour, there are zero or more calls to gluTessVertex. The vertices specify a closed contour (the last vertex of each contour is automatically linked to the first). See the gluTessVertex, gluTessBeginContour and gluTessEndContour reference pages for more details.

Once gluTessEndPolygon is called, the polygon is tessellated, and the resulting triangles are described through callbacks. See gluTessCallback for descriptions of the callback functions.

Link copied to clipboard
fun gluTessNormal(tessellator: GLUtessellator, x: Double, y: Double, z: Double)

gluTessNormal describes a normal for a polygon that the program is defining. All input data will be projected onto a plane perpendicular to the one of the three coordinate axes before tessellation and all output triangles will be oriented CCW with repsect to the normal (CW orientation can be obtained by reversing the sign of the supplied normal). For example, if you know that all polygons lie in the x-y plane, call gluTessNormal(tess, 0.0, 0.0, 0.0) before rendering any polygons.

If the supplied normal is (0.0, 0.0, 0.0)(the initial value), the normal is determined as follows. The direction of the normal, up to its sign, is found by fitting a plane to the vertices, without regard to how the vertices are connected. It is expected that the input data lies approximately in the plane; otherwise, projection perpendicular to one of the three coordinate axes may substantially change the geometry. The sign of the normal is chosen so that the sum of the signed areas of all input contours is nonnegative (where a CCW contour has positive area).

The supplied normal persists until it is changed by another call to gluTessNormal.

Link copied to clipboard
fun gluTessProperty(tessellator: GLUtessellator, which: Int, value: Double)

gluTessProperty is used to control properites stored in a tessellation object. These properties affect the way that the polygons are interpreted and rendered. The legal value for which are as follows:

  • GLU_TESS_WINDING_RULE

    Determines which parts of the polygon are on the "interior". value may be set to one of

    GLU_TESS_WINDING_ODD,

    GLU_TESS_WINDING_NONZERO,

    GLU_TESS_WINDING_POSITIVE, or

    GLU_TESS_WINDING_NEGATIVE, or

    GLU_TESS_WINDING_ABS_GEQ_TWO.

    To understand how the winding rule works, consider that the input contours partition the plane into regions. The winding rule determines which of these regions are inside the polygon.

    For a single contour C, the winding number of a point x is simply the signed number of revolutions we make around x as we travel once around C (where CCW is positive). When there are several contours, the individual winding numbers are summed. This procedure associates a signed integer value with each point x in the plane. Note that the winding number is the same for all points in a single region.

    The winding rule classifies a region as "inside" if its winding number belongs to the chosen category (odd, nonzero, positive, negative, or absolute value of at least two). The previous GLU tessellator (prior to GLU 1.2) used the "odd" rule. The "nonzero" rule is another common way to define the interior. The other three rules are useful for polygon CSG operations.
  • *
  • GLU_TESS_BOUNDARY_ONLY

    Is a boolean value ("value" should be set to GL_TRUE or GL_FALSE). When set to GL_TRUE, a set of closed contours separating the polygon interior and exterior are returned instead of a tessellation. Exterior contours are oriented CCW with respect to the normal; interior contours are oriented CW. The GLU_TESS_BEGIN and GLU_TESS_BEGIN_DATA callbacks use the type GL_LINE_LOOP for each contour.
  • *
  • GLU_TESS_TOLERANCE

    Specifies a tolerance for merging features to reduce the size of the output. For example, two vertices that are very close to each other might be replaced by a single vertex. The tolerance is multiplied by the largest coordinate magnitude of any input vertex; this specifies the maximum distance that any feature can move as the result of a single merge operation. If a single feature takes part in several merge operations, the toal distance moved could be larger.

    Feature merging is completely optional; the tolerance is only a hint. The implementation is free to merge in some cases and not in others, or to never merge features at all. The initial tolerance is 0.

    The current implementation merges vertices only if they are exactly coincident, regardless of the current tolerance. A vertex is spliced into an edge only if the implementation is unable to distinguish which side of the edge the vertex lies on. Two edges are merged only when both endpoints are identical.
  • *
*

Link copied to clipboard
fun gluTessVertex(tessellator: GLUtessellator, coords: DoubleArray, coords_offset: Int, data: Any)

gluTessVertex describes a vertex on a polygon that the program defines. Successive gluTessVertex calls describe a closed contour. For example, to describe a quadrilateral gluTessVertex should be called four times. gluTessVertex can only be called between .gluTessBeginContour and .gluTessBeginContour.

data normally references to a structure containing the vertex location, as well as other per-vertex attributes such as color and normal. This reference is passed back to the user through the GLU_TESS_VERTEX or GLU_TESS_VERTEX_DATA callback after tessellation (see the .gluTessCallback reference page).