Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
gleTextureMode(3GLE)		      GLE		  gleTextureMode(3GLE)

NAME
       gleTextureMode  - set the type of GLE automatic texture coordinate gen-
       eration.

SYNTAX
       void gleTextureMode (int	mode);

ARGUMENTS
       mode	 bitwise OR of GLE texture mode	flags

DESCRIPTION
       In addition to the default glTexGen modes that are supplied by  OpenGL,
       the  tubing library also	contains some of its own automatic texture co-
       ordinate	generation routines. In	addition, user-defined	texture	 coord
       generation routines can be supplied.

       To use texture mapping with the extrusion library, one must remember to
       "do the obvious":

	      Enable texture mapping through OpenGL

	      Define and load (glTexImage2D/glBindTexture) a texture

	      If using the routine below, then disable glTexgGen

       gleTextureMode can be used to set the type of automatic texture coordi-
       nate  generation	to be used. The	argument should	be a bitwise-OR	of any
       of the following	flags:

       GLE_TEXTURE_ENABLE
	      If this bit is set, then texturing is enabled. If	 this  bit  is
	      NOT  set,	 then  automatic texture coordinate generation is dis-
	      abled.

       The way in which	the automatic texture coordinate generation occurs  is
       determined  by  one  of	the following flags. One and only one of these
       should be selected at a time. These tokens  are	enumerants,  not  bit-
       flags.

       GLE_TEXTURE_VERTEX_FLAT
	      Uses  the	vertexes "x" coordinate	as the texture "u" coordinate,
	      and the accumulated segment length as the	"v" coordinate.

       GLE_TEXTURE_NORMAL_FLAT
	      Uses the normal vector's "x" coordinate as the texture "u" coor-
	      dinate, and the accumulated segment length as  the  "v"  coordi-
	      nate.

       GLE_TEXTURE_VERTEX_CYL
	      Uses  u  = phi/(2*pi) = arctan (vy/vx)/(2*pi) as the texture "u"
	      coordinate, and the accumulated segment length as	the "v"	 coor-
	      dinate.  In the above equation, "vx" and "vy" stand for the ver-
	      tex's x and y coordinates.

       GLE_TEXTURE_NORMAL_CYL
	      Uses  u  = phi/(2*pi) = arctan (ny/nx)/(2*pi) as the texture "u"
	      coordinate, and the accumulated segment length as	the "v"	 coor-
	      dinate.  In the above equation, "nx" and "ny" stand for the nor-
	      mal's x and y coordinates.

       GLE_TEXTURE_VERTEX_SPH
	      Uses  u  = phi/(2*pi) = arctan (vy/vx)/(2*pi) as the texture "u"
	      coordinate, and v	= theta/pi = (1.0 - arccos(vz))/pi as the tex-
	      ture "v" coordinate. In the above	equation, "vx","vy"  and  "vz"
	      stand for	the vertex's x,	y and z	coordinates.

       GLE_TEXTURE_NORMAL_SPH
	      Uses  u  = phi/(2*pi) = arctan (ny/nx)/(2*pi) as the texture "u"
	      coordinate, and v	= theta/pi = (1.0 - arccos(nz))/pi as the tex-
	      ture "v" coordinate. In the above	equation, "nx","ny"  and  "nz"
	      stand for	the normal's x,	y and z	coordinates.

       GLE_TEXTURE_VERTEX_MODEL_FLAT

       GLE_TEXTURE_NORMAL_MODEL_FLAT

       GLE_TEXTURE_VERTEX_MODEL_CYL

       GLE_TEXTURE_NORMAL_MODEL_CYL

       GLE_TEXTURE_VERTEX_MODEL_SPH

       GLE_TEXTURE_NORMAL_MODEL_SPH
	      These  define  texture  mapping  modes  that are very similar to
	      those described above, except that  the  untransformed  vertices
	      and/or normals are used. As a result, textures tends to stick to
	      the  extrusion according to the extrusions local surface coordi-
	      nates rather than	according to real-space	coordinates. This will
	      in general provide the correct style  of	texture	 mapping  when
	      affine  transforms  are  being applied to	the contour, since the
	      coordinates used are those prior to the affine transform.

OPERATION
       To best understand how to use the above functions, it is	best to	under-
       stand how the tubing is actually	drawn. Let us start by	defining  some
       terms.  The  tubing library "extrudes" a	"contour" along	a "path".  The
       contour is a 2D polyline. The path is a 3D polyline. We	use  the  word
       "segment"  to refer to a	straight-line segment of the path polyline. We
       also interchangeably use	the word "segment" to stand for	the section of
       the extrusion that lies along a path segment.

       The tubing library draws	segments one at	a time.	It uses	glPushmatrix()
       and glPopmatrix() to orient each	segment	along the negative z-axis. The
       segment starts at z=0 and ends at some negative z-value (equal  to  the
       length  of  the	segment).  The segment is then drawn by	calling	glVer-
       tex3f() (and glNormal3F()) by drawing the 2D contour at z=0  and	 again
       at z=-len. (Of course, if the join style	is one of the fancy ones, then
       the  end-points	are  trimmed in	a variety of ways, and do not land ex-
       actly on	z=0, or	z=-len,	but they do come close). Note  that  glBegin()
       and  glEnd() are	called around each segment. (Note also that additional
       glBegins/Ends may be called to draw end-caps or filleting triangles for
       the more	complex	join styles.)

       The obvious way to automatically	 generate  textures  is	 to  warp  the
       glVertex()  and	glNormal()  functions, and compute texture coordinates
       based on	the 3-space vertex and normal coordinates. This	is essentially
       what the	tubing code does, except that it passes	some extra parameters.
       The glBegin calls are wrapped, and the integer segment number  and  the
       floating-point length of	the segment are	passed in. By knowing the seg-
       ment number, and	the segment length, the	texture	coordinates can	be ad-
       justed. Knowing the length allows the length to be accumulated, so that
       a texture is applied lengthwise along the extrusion. It is this accumu-
       lated length that is used in the	FLAT and CYL mapping modes.

       For  each  vertex, not only are the vertex x,y,z	coordinates available,
       but so is a contour vertex counter indicating which contour vertex this
       corresponds to. There is	also a flag indicating whether the vertex cor-
       responds	to a front or back vertex  (i.e.  a  z=0  or  z=-len  vertex).
       Again,  this  info can be used to avoid confusion when drawing the more
       complex join styles.

HINTS
       Here are	a few hints, tips, and techniques:

       o      Hint: Confused? RUN THE DEMOS! The best way to  understand  what
	      all  the different texture modes are doing is to see them	in ac-
	      tion.

       o      Hint: The	texture	matrix can be used to your advantage! That is,
	      you can use glMatrixMode(GL_TEXTURE) to control how textures are
	      mapped to	the surface. In	particular, you	may/will want  to  use
	      it to to rescale the V coordinate.

       o      The  origin of the contour will in general change	the vertex x's
	      and y's, thus changing the texture coordinates.

       o      The contour "up" vector will NOT influence the  texture  coordi-
	      nates.

       o      For the FLAT and CYL modes, the accumulated length really	is the
	      accumulated  length of the segments in modeling coordinates. Un-
	      less the extrusion is very small,	this length will  probably  be
	      much  larger  than  1.0, and so the resulting texture coordinate
	      will wrap. You will generally want to rescale the	"V" coordinate
	      to make the texture map fit.

       o      If the texture is	"swimming" around on the surface in  an	 unde-
	      sired  way, try using the	"MODEL"	version	of the texture genera-
	      tion flag.

       o      Typically, you will NOT want to use the "SPH"  versions  of  the
	      texture  generation engine unless	you really, really have	an ex-
	      trusion for which	spherical coordinates  are  appropriate.  Most
	      uses  of	extrusions  are	best handled with the "FLAT" and "CYL"
	      generation methods.

       o      User-defined texture generation callbacks	are not	currently  im-
	      plemented, but these should be very, very	easy to	hack in	as de-
	      sired.   It  should  be easy to let your imagination run wild in
	      here. Look at texgen.c --	what needs to be done should be	 obvi-
	      ous, I hope.  When in doubt, experiment.

BUGS
       Multiple	threads	using GLE share	a single texture mode.

SEE ALSO
       gleExtrusion, gleSetJoinStyle

AUTHOR
       Linas Vepstas (linas@fc.net)

GLE				      3.6		  gleTextureMode(3GLE)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=gleTextureMode&sektion=3&manpath=FreeBSD+Ports+15.0.quarterly>

home | help