public class GLU
extends java.lang.Object
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.
Constructor and Description |
---|
GLU() |
Modifier and Type | Method and Description |
---|---|
static void |
gluDeleteTess(GLUtessellator tessellator)
gluDeleteTess destroys the indicated tessellation object (which was
created with
gluNewTess ). |
static java.lang.String |
gluErrorString(int errorCode) |
static void |
gluGetTessProperty(GLUtessellator tessellator,
int which,
double[] value,
int value_offset)
gluGetTessProperty retrieves properties stored in a tessellation
object.
|
static GLUtessellator |
gluNewTess()
gluNewTess creates and returns a new tessellation object.
|
static void |
gluTessBeginContour(GLUtessellator tessellator)
gluTessBeginContour and
gluTessEndContour delimit
the definition of a polygon contour. |
static void |
gluTessBeginPolygon(GLUtessellator tessellator,
java.lang.Object data)
gluTessBeginPolygon and
gluTessEndPolygon delimit
the definition of a convex, concave or self-intersecting polygon. |
static void |
gluTessCallback(GLUtessellator tessellator,
int which,
GLUtessellatorCallback aCallback)
gluTessCallback is used to indicate a callback to be used by a
tessellation object.
|
static void |
gluTessEndContour(GLUtessellator tessellator)
gluTessEndContour and
gluTessBeginContour
delimit the definition of a polygon contour. |
static void |
gluTessEndPolygon(GLUtessellator tessellator)
gluTessEndPolygon and
gluTessBeginPolygon
delimit the definition of a convex, concave or self-intersecting polygon. |
static void |
gluTessNormal(GLUtessellator tessellator,
double x,
double y,
double z)
gluTessNormal describes a normal for a polygon that the program is
defining.
|
static void |
gluTessProperty(GLUtessellator tessellator,
int which,
double value)
gluTessProperty is used to control properites stored in a
tessellation object.
|
static void |
gluTessVertex(GLUtessellator tessellator,
double[] coords,
int coords_offset,
java.lang.Object data)
gluTessVertex describes a vertex on a polygon that the program
defines.
|
public static final int GLU_FALSE
public static final int GLU_TRUE
public static final int GLU_VERSION
public static final int GLU_EXTENSIONS
public static final java.lang.String versionString
public static final java.lang.String extensionString
public static final int GLU_INVALID_ENUM
public static final int GLU_INVALID_VALUE
public static final int GLU_OUT_OF_MEMORY
public static final int GLU_INVALID_OPERATION
public static final int GLU_TESS_BEGIN
public static final int GLU_TESS_VERTEX
public static final int GLU_TESS_END
public static final int GLU_TESS_ERROR
public static final int GLU_TESS_EDGE_FLAG
public static final int GLU_TESS_COMBINE
public static final int GLU_TESS_BEGIN_DATA
public static final int GLU_TESS_VERTEX_DATA
public static final int GLU_TESS_END_DATA
public static final int GLU_TESS_ERROR_DATA
public static final int GLU_TESS_EDGE_FLAG_DATA
public static final int GLU_TESS_COMBINE_DATA
public static final int GLU_CW
public static final int GLU_CCW
public static final int GLU_INTERIOR
public static final int GLU_EXTERIOR
public static final int GLU_UNKNOWN
public static final int GLU_TESS_WINDING_RULE
public static final int GLU_TESS_BOUNDARY_ONLY
public static final int GLU_TESS_TOLERANCE
public static final int GLU_TESS_ERROR1
public static final int GLU_TESS_ERROR2
public static final int GLU_TESS_ERROR3
public static final int GLU_TESS_ERROR4
public static final int GLU_TESS_ERROR5
public static final int GLU_TESS_ERROR6
public static final int GLU_TESS_ERROR7
public static final int GLU_TESS_ERROR8
public static final int GLU_TESS_MISSING_BEGIN_POLYGON
public static final int GLU_TESS_MISSING_BEGIN_CONTOUR
public static final int GLU_TESS_MISSING_END_POLYGON
public static final int GLU_TESS_MISSING_END_CONTOUR
public static final int GLU_TESS_COORD_TOO_LARGE
public static final int GLU_TESS_NEED_COMBINE_CALLBACK
public static final int GLU_TESS_WINDING_ODD
public static final int GLU_TESS_WINDING_NONZERO
public static final int GLU_TESS_WINDING_POSITIVE
public static final int GLU_TESS_WINDING_NEGATIVE
public static final int GLU_TESS_WINDING_ABS_GEQ_TWO
public static final double GLU_TESS_MAX_COORD
public static java.lang.String gluErrorString(int errorCode)
public static GLUtessellator gluNewTess()
gluTessBeginPolygon
,
gluDeleteTess
,
gluTessCallback
public static void gluDeleteTess(GLUtessellator tessellator)
gluNewTess
).tessellator
- Specifies the tessellation object to destroy.gluNewTess
,
gluTessCallback
public static void gluTessProperty(GLUtessellator tessellator, int which, double value)
GLU_TESS_WINDING_RULE
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.
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.
tessellator
- Specifies the tessellation object created with
gluNewTess
which
- Specifies the property to be set. Valid values are
GLU_TESS_WINDING_RULE, GLU_TESS_BOUNDARDY_ONLY,
GLU_TESS_TOLERANCE.value
- Specifices the value of the indicated property.gluGetTessProperty
,
gluNewTess
public static void gluGetTessProperty(GLUtessellator tessellator, int which, double[] value, int value_offset)
gluTessProperty
reference
page for information about the properties and what they do.tessellator
- Specifies the tessellation object (created with
gluNewTess
).which
- Specifies the property whose value is to be fetched. Valid values
are GLU_TESS_WINDING_RULE, GLU_TESS_BOUNDARY_ONLY,
and GLU_TESS_TOLERANCES.value
- Specifices an array into which the value of the named property is
written.gluNewTess
,
gluTessProperty
public static void gluTessNormal(GLUtessellator tessellator, double x, double y, double z)
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.
tessellator
- Specifies the tessellation object (created by
gluNewTess
).x
- Specifies the first component of the normal.y
- Specifies the second component of the normal.z
- Specifies the third component of the normal.gluTessBeginPolygon
,
gluTessEndPolygon
public static void gluTessCallback(GLUtessellator tessellator, int which, GLUtessellatorCallback aCallback)
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
void begin(int type);
GLU_TESS_BEGIN_DATA
gluTessBeginPolygon
was called. The method prototype for this callback is:
void beginData(int type, Object polygonData);GLU_TESS_EDGE_FLAG
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
gluTessBeginPolygon
was called. The method prototype for this callback is:
void edgeFlagData(boolean boundaryEdge, Object polygonData);GLU_TESS_VERTEX
gluTessVertex
). The method
prototype for this callback is:
void vertex(Object vertexData);GLU_TESS_VERTEX_DATA
gluTessBeginPolygon
was called. The method prototype for this callback is:
void vertexData(Object vertexData, Object polygonData);GLU_TESS_END
void end();GLU_TESS_END_DATA
gluTessBeginPolygon
was called. The method prototype for this callback is:
void endData(Object polygonData);GLU_TESS_COMBINE
void combine(double[] coords, Object[] data, float[] weight, Object[] outData);
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(); newVertex.x = coords[0]; newVertex.y = coords[1]; newVertex.z = coords[2]; newVertex.r = weight[0]*data[0].r + weight[1]*data[1].r + weight[2]*data[2].r + weight[3]*data[3].r; newVertex.g = weight[0]*data[0].g + weight[1]*data[1].g + weight[2]*data[2].g + weight[3]*data[3].g; newVertex.b = weight[0]*data[0].b + weight[1]*data[1].b + weight[2]*data[2].b + weight[3]*data[3].b; newVertex.a = weight[0]*data[0].a + weight[1]*data[1].a + weight[2]*data[2].a + weight[3]*data[3].a; outData = newVertex; }
gluTessBeginPolygon
was called. The method prototype for this callback is:
void combineData(double[] coords, Object[] data, float[] weight, Object[] outData, Object polygonData);GLU_TESS_ERROR
gluErrorString
call. The
method prototype for this callback is:
void error(int errnum);
gluTessBeginPolygon
was called. The method prototype for this callback is:
void errorData(int errnum, Object polygonData);
tessellator
- Specifies the tessellation object (created with
gluNewTess
).which
- Specifies the callback being defined. The following values are
valid: GLU_TESS_BEGIN, GLU_TESS_BEGIN_DATA,
GLU_TESS_EDGE_FLAG, GLU_TESS_EDGE_FLAG_DATA,
GLU_TESS_VERTEX, GLU_TESS_VERTEX_DATA,
GLU_TESS_END, GLU_TESS_END_DATA,
GLU_TESS_COMBINE, GLU_TESS_COMBINE_DATA,
GLU_TESS_ERROR, and GLU_TESS_ERROR_DATA.aCallback
- Specifies the callback object to be called.gluNewTess
,
gluErrorString
,
gluTessVertex
,
gluTessBeginPolygon
,
gluTessBeginContour
,
gluTessProperty
,
gluTessNormal
public static void gluTessVertex(GLUtessellator tessellator, double[] coords, int coords_offset, java.lang.Object data)
gluTessBeginContour
and
gluTessEndContour
.
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).
tessellator
- Specifies the tessellation object (created with
gluNewTess
).coords
- Specifies the coordinates of the vertex.data
- Specifies an opaque reference passed back to the program with the
vertex callback (as specified by
gluTessCallback
).gluTessBeginPolygon
,
gluNewTess
,
gluTessBeginContour
,
gluTessCallback
,
gluTessProperty
,
gluTessNormal
,
gluTessEndPolygon
public static void gluTessBeginPolygon(GLUtessellator tessellator, java.lang.Object data)
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.
tessellator
- Specifies the tessellation object (created with
gluNewTess
).data
- Specifies a reference to user polygon data.gluNewTess
,
gluTessBeginContour
,
gluTessVertex
,
gluTessCallback
,
gluTessProperty
,
gluTessNormal
,
gluTessEndPolygon
public static void gluTessBeginContour(GLUtessellator tessellator)
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
.tessellator
- Specifies the tessellation object (created with
gluNewTess
).gluNewTess
,
gluTessBeginPolygon
,
gluTessVertex
,
gluTessCallback
,
gluTessProperty
,
gluTessNormal
,
gluTessEndPolygon
public static void gluTessEndContour(GLUtessellator tessellator)
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
.tessellator
- Specifies the tessellation object (created with
gluNewTess
).gluNewTess
,
gluTessBeginPolygon
,
gluTessVertex
,
gluTessCallback
,
gluTessProperty
,
gluTessNormal
,
gluTessEndPolygon
public static void gluTessEndPolygon(GLUtessellator tessellator)
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.
tessellator
- Specifies the tessellation object (created with
gluNewTess
).gluNewTess
,
gluTessBeginContour
,
gluTessVertex
,
gluTessCallback
,
gluTessProperty
,
gluTessNormal
,
gluTessBeginPolygon