gleTextureMode.man
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:8k
源码类别:

GIS编程

开发平台:

Visual C++

  1. ."
  2. ." GLE Tubing & Extrusions Library Documentation 
  3. ."
  4. .TH gleTextureMode 3GLE "3.6" "GLE" "GLE"
  5. .SH NAME
  6. gleTextureMode - set the type of GLE automatic texture coordinate generation.
  7. .SH SYNTAX
  8. .nf
  9. .LP
  10. void gleTextureMode (int mode);
  11. .fi
  12. .SH ARGUMENTS
  13. .IP fImodefP 1i
  14. bitwise OR of GLE texture mode flags
  15. .SH DESCRIPTION
  16. In addition to the default glTexGen modes that are supplied by OpenGL,
  17. the tubing library also contains some of its own automatic texture
  18. coordinate generation routines. In addition, user-defined texture coord
  19. generation routines can be supplied.
  20. To use texture mapping with the extrusion library, one must remember to "do the obvious": 
  21. .IP
  22. Enable texture mapping through OpenGL 
  23. .IP
  24. Define and load (glTexImage2D/glBindTexture) a texture 
  25. .IP
  26. If using the routine below, then disable glTexgGen 
  27. .LP
  28. gleTextureMode can be used to set the type of automatic texture
  29. coordinate generation to be used. The argument should be a bitwise-OR
  30. of any of the following flags:
  31. .IP fBGLE_TEXTURE_ENABLEfP
  32. If this bit is set, then texturing is enabled. If this bit is NOT set,
  33. then automatic texture coordinate generation is disabled.
  34. .LP
  35. The way in which the automatic texture coordinate generation occurs is
  36. determined by one of the following flags. One and only one of these
  37. should be selected at a time. These tokens are enumerants, not
  38. bit-flags.
  39. .IP fBGLE_TEXTURE_VERTEX_FLATfP
  40. Uses the vertexes "x" coordinate as the texture "u" coordinate, and the
  41. accumulated segment length as the "v" coordinate.
  42. .IP fBGLE_TEXTURE_NORMAL_FLATfP
  43. Uses the normal vector's "x" coordinate as the texture "u" coordinate,
  44. and the accumulated segment length as the "v" coordinate.
  45. .IP fBGLE_TEXTURE_VERTEX_CYLfP
  46. Uses u = phi/(2*pi) = arctan (vy/vx)/(2*pi) as the texture "u"
  47. coordinate, and the accumulated segment length as the "v" coordinate.
  48. In the above equation, "vx" and "vy" stand for the vertex's x and y
  49. coordinates.
  50. .IP fBGLE_TEXTURE_NORMAL_CYLfP
  51. Uses u = phi/(2*pi) = arctan (ny/nx)/(2*pi) as the texture "u"
  52. coordinate, and the accumulated segment length as the "v" coordinate.
  53. In the above equation, "nx" and "ny" stand for the normal's x and y
  54. coordinates.
  55. .IP fBGLE_TEXTURE_VERTEX_SPHfP
  56. Uses u = phi/(2*pi) = arctan (vy/vx)/(2*pi) as the texture "u"
  57. coordinate, and v = theta/pi = (1.0 - arccos(vz))/pi as the texture "v"
  58. coordinate. In the above equation, "vx","vy" and "vz" stand for the
  59. vertex's x, y and z coordinates.
  60. .IP fBGLE_TEXTURE_NORMAL_SPHfP
  61. Uses u = phi/(2*pi) = arctan (ny/nx)/(2*pi) as the texture "u"
  62. coordinate, and v = theta/pi = (1.0 - arccos(nz))/pi as the texture "v"
  63. coordinate. In the above equation, "nx","ny" and "nz" stand for the
  64. normal's x, y and z coordinates.
  65. .IP fBGLE_TEXTURE_VERTEX_MODEL_FLATfP
  66. .IP fBGLE_TEXTURE_NORMAL_MODEL_FLATfP
  67. .IP fBGLE_TEXTURE_VERTEX_MODEL_CYLfP
  68. .IP fBGLE_TEXTURE_NORMAL_MODEL_CYLfP
  69. .IP fBGLE_TEXTURE_VERTEX_MODEL_SPHfP
  70. .IP fBGLE_TEXTURE_NORMAL_MODEL_SPHfP
  71. These define texture mapping modes that are very similar to those
  72. described above, except that the untransformed vertices and/or normals
  73. are used. As a result, textures tends to stick to the extrusion
  74. according to the extrusions local surface coordinates rather than
  75. according to real-space coordinates. This will in general provide the
  76. correct style of texture mapping when affine transforms are being
  77. applied to the contour, since the coordinates used are those prior to
  78. the affine transform.
  79. .SH OPERATION
  80. To best understand how to use the above functions, it is best to
  81. understand how the tubing is actually drawn. Let us start by defining
  82. some terms. The tubing library "extrudes" a "contour" along a "path".
  83. The contour is a 2D polyline. The path is a 3D polyline. We use the
  84. word "segment" to refer to a straight-line segment of the path
  85. polyline. We also interchangeably use the word "segment" to stand for
  86. the section of the extrusion that lies along a path segment.
  87. The tubing library draws segments one at a time. It uses glPushmatrix()
  88. and glPopmatrix() to orient each segment along the negative z-axis. The
  89. segment starts at z=0 and ends at some negative z-value (equal to the
  90. length of the segment). The segment is then drawn by calling
  91. glVertex3f() (and glNormal3F()) by drawing the 2D contour at z=0 and
  92. again at z=-len. (Of course, if the join style is one of the fancy
  93. ones, then the end-points are trimmed in a variety of ways, and do not
  94. land exactly on z=0, or z=-len, but they do come close). Note that
  95. glBegin() and glEnd() are called around each segment. (Note also that
  96. additional glBegins/Ends may be called to draw end-caps or filleting
  97. triangles for the more complex join styles.)
  98. The obvious way to automatically generate textures is to warp the
  99. glVertex() and glNormal() functions, and compute texture coordinates
  100. based on the 3-space vertex and normal coordinates. This is essentially
  101. what the tubing code does, except that it passes some extra parameters.
  102. The glBegin calls are wrapped, and the integer segment number and the
  103. floating-point length of the segment are passed in. By knowing the
  104. segment number, and the segment length, the texture coordinates can be
  105. adjusted. Knowing the length allows the length to be accumulated, so
  106. that a texture is applied lengthwise along the extrusion. It is this
  107. accumulated length that is used in the FLAT and CYL mapping modes.
  108. For each vertex, not only are the vertex x,y,z coordinates available,
  109. but so is a contour vertex counter indicating which contour vertex this
  110. corresponds to. There is also a flag indicating whether the vertex
  111. corresponds to a front or back vertex (i.e. a z=0 or z=-len vertex).
  112. Again, this info can be used to avoid confusion when drawing the more
  113. complex join styles.
  114. .SH HINTS
  115. Here are a few hints, tips, and techniques:
  116. .IP o
  117. Hint: Confused? RUN THE DEMOS! The best way to understand what all the
  118. different texture modes are doing is to see them in action.
  119. .IP o
  120. Hint: The texture matrix can be used to your advantage! That is, you
  121. can use glMatrixMode(GL_TEXTURE) to control how textures are mapped to
  122. the surface. In particular, you may/will want to use it to to rescale
  123. the V coordinate.
  124. .IP o
  125. The origin of the contour will in general change the vertex x's and
  126. y's, thus changing the texture coordinates.
  127. .IP o
  128. The contour "up" vector will NOT influence the texture coordinates. 
  129. .IP o
  130. For the FLAT and CYL modes, the accumulated length really is the
  131. accumulated length of the segments in modeling coordinates. Unless the
  132. extrusion is very small, this length will probably be much larger than
  133. 1.0, and so the resulting texture coordinate will wrap. You will
  134. generally want to rescale the "V" coordinate to make the texture map
  135. fit.
  136. .IP o
  137. If the texture is "swimming" around on the surface in an undesired way,
  138. try using the "MODEL" version of the texture generation flag.
  139. .IP o
  140. Typically, you will NOT want to use the "SPH" versions of the texture
  141. generation engine unless you really, really have an extrusion for which
  142. spherical coordinates are appropriate. Most uses of extrusions are best
  143. handled with the "FLAT" and "CYL" generation methods.
  144. .IP o
  145. User-defined texture generation callbacks are not currently
  146. implemented, but these should be very, very easy to hack in as desired.
  147. It should be easy to let your imagination run wild in here. Look at
  148. texgen.c -- what needs to be done should be obvious, I hope.  When in
  149. doubt, experiment.
  150. .SH BUGS
  151. Multiple threads using GLE share a single texture mode.
  152. .SH SEE ALSO
  153. gleExtrusion, gleSetJoinStyle
  154. .SH AUTHOR
  155. Linas Vepstas (linas@fc.net)