voidglTexGend(GLenumcoord, GLenumpname, GLdoubleparam) voidglTexGenf(GLenumcoord, GLenumpname, GLfloatparam) voidglTexGeni(GLenumcoord, GLenumpname, GLintparam)

*coord*-
Specifies a texture coordinate. Must be one of the following:
**GL_S**,**GL_T**,**GL_R**, or**GL_Q**. *pname*-
Specifies the symbolic name of the texture-coordinate generation
function. Must be
**GL_TEXTURE_GEN_MODE**. *param*-
Specifies a single-valued texture generation parameter, one of
**GL_OBJECT_LINEAR**,**GL_EYE_LINEAR**, or**GL_SPHERE_MAP**.

voidglTexGendv(GLenumcoord, GLenumpname, const GLdouble *params) voidglTexGenfv(GLenumcoord, GLenumpname, const GLfloat *params) voidglTexGeniv(GLenumcoord, GLenumpname, const GLint *params)

*coord*-
Specifies a texture coordinate. Must be one of the following:
**GL_S**,**GL_T**,**GL_R**, or**GL_Q**. *pname*-
Specifies the symbolic name of the texture-coordinate generation
function or function parameters. Must be
**GL_TEXTURE_GEN_MODE**,**GL_OBJECT_PLANE**, or**GL_EYE_PLANE**. *params*-
Specifies a pointer to an array of texture generation parameters.
If
*pname*is**GL_TEXTURE_GEN_MODE**, then the array must contain a single symbolic constant, one of**GL_OBJECT_LINEAR**,**GL_EYE_LINEAR**, or**GL_SPHERE_MAP**. Otherwise,*params*holds the coefficients for the texture-coordinate generation function specified by*pname*.

If the texture generation function is **GL_OBJECT_LINEAR**, the function

is used, where *g* is the value computed for the coordinate named in
*coord*, *p1*, *p2*, *p3*, and *p4* are the four
values supplied in *params*, and *xo*, *yo*, *zo*, and
*wo* are the object coordinates of the vertex. This function can
be used to texture-map terrain using sea level as a reference plane
(defined by *p1*, *p2*, *p3*, and *p4*). The altitude of
a terrain vertex is computed by the **GL_OBJECT_LINEAR** coordinate
generation function as its distance from sea level; that altitude is used to
index the texture image to map white snow onto peaks and green grass onto
foothills, for example.

If the texture generation function is **GL_EYE_LINEAR**, the function

is used, where

and *xe*, *ye*, *ze*, and *we* are the eye coordinates
of the vertex, *p1*, *p2*, *p3*, and *p4* are the
values supplied in *params*, and *M* is the modelview matrix
when **glTexGen** is invoked. If *M* is poorly conditioned or
singular, texture coordinates generated by the resulting function may be
inaccurate or undefined.

Note that the values in *params* define a reference plane in eye
coordinates. The modelview matrix that is applied to them may not be the
same one in effect when the polygon vertices are transformed. This
function establishes a field of texture coordinates that can produce
dynamic contour lines on moving objects.

If *pname* is **GL_SPHERE_MAP** and *coord* is either
**GL_S** or **GL_T**, *s* and *t* texture coordinates are
generated as follows. Let **u** be the unit vector pointing from the
origin to the polygon vertex (in eye coordinates). Let **n**' be the
current normal, after transformation to eye coordinates. Let
**f** = (*fx* *fy* *fz*)^*T* be the reflection
vector such that

Finally, let *m* = 2(*fx*^2 + *fy*^2 + (*fz* + 1)^2)^(1/2). Then the values assigned to the *s* and *t* texture coordinates
are

A texture-coordinate generation function is enabled or disabled using
**glEnable** or
**glDisable**
with one of the symbolic texture-coordinate names (**GL_TEXTURE_GEN_S**,
**GL_TEXTURE_GEN_T**, **GL_TEXTURE_GEN_R**, or **GL_TEXTURE_GEN_Q**)
as the argument. When enabled, the specified texture coordinate is computed
according to the generating function associated with that coordinate. When
disabled, subsequent vertices take the specified texture coordinate from the
current set of texture coordinates. Initially, all texture generation
functions are set to **GL_EYE_LINEAR** and are disabled. Both *s*
plane equations are (1, 0, 0, 0), both *t* plane equations are
(0, 1, 0, 0), and all *r* and *q* plane equations are
(0, 0, 0, 0).

**GL_INVALID_ENUM** is generated when *pname* is
**GL_TEXTURE_GEN_MODE**, *params* is **GL_SPHERE_MAP**, and
*coord* is either **GL_R** or **GL_Q**.

**GL_INVALID_OPERATION** is generated if **glTexGen** is called between
a call to **glBegin** and the
corresponding call to **glEnd**.

back to the **OpenGL index page**

© *1995 Uwe Behrens. All rights reserved.*