- Triangle strip
A triangle strip is a series of connected
triangles , sharing vertices, allowing for fasterrendering and more efficient memory usage forcomputer graphics . They are optimized on mostgraphics cards , making them the most efficient way of describing an object. There are two primary reasons to use triangle strips:* Triangle strips increase code efficiency. After the first triangle is defined using three vertices, each new triangle can be defined by only one additional vertex, sharing the last two vertices defined for the previous triangle.
* Triangle strips reduce the amount of data needed to create a series of triangles. The number of vertices stored in memory is reduced from "3N" to "N+2", where "N" is the number of triangles to be drawn. This allows for less use of disk space, as well as making them faster to load intoRAM .For example, the four triangles in the diagram, without using triangle strips, would have to be stored and interpreted as four separate triangles: ABC, CBD, CDE, and EDF. However, using a triangle strip, they can be stored simply as ABCDEF.
OpenGL implementation
OpenGL has innate support for triangle strips using the "glBegin()", "glVertex*()", and "glEnd()" functions. To draw a triangle strip, "glBegin()" must be passed the argument "GL_TRIANGLE_STRIP", which notifies OpenGL a triangle strip is about to be drawn. The "glVertex*()" family of functions specify the coordinates for each vertex in the triangle strip. For more information, consult The OpenGL Redbook. [The OpenGL Redbook [http://www.glprogramming.com/red/] ]To draw the triangle strip in the diagram, the code is as follows:
glBegin(GL_TRIANGLE_STRIP); glVertex3f( 0.0f, 0.0f, 0.0f ); //vertex 1 glVertex3f( 0.0f, 1.0f, 0.0f ); //vertex 2 glVertex3f( 1.0f, 0.0f, 0.0f ); //vertex 3 glVertex3f( 1.5f, 1.0f, 0.0f ); //vertex 4 glEnd();
Note that only one additional vertex is needed to draw the second triangle.In OpenGL, the order in which the vertices are specified is important so that surface normals are consistent.
Quoted directly from the OpenGL redbook:
GL_TRIANGLE_STRIP Draws a series of triangles (three-sided polygons) using vertices v0, v1, v2, then v2, v1, v3 (note the order), then v2, v3, v4, and so on. The ordering is to ensure that the triangles are all drawn with the same orientation so that the strip can correctly form part of a surface.
Fortunately, OpenGL will automatically rearrange the vertices in a triangle strip to make all of the triangles in the strip consistently clockwise or counterclockwise [NeHe Productions [http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=19] ] , depending on the value of glFrontFace(). [Description of glFrontFace() [http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/frontface.html] ]
Converting from polygon mesh
Converting a general
polygon mesh to a single long strip is generally not possible. In order to describe a complete object, one has to create either several strips, as used in Stripe, [Azanli, Elvir. [http://www.cs.sunysb.edu/~stripe/ Stripe] , retrieved onMarch 28 ,2007 .] or a degenerate strip, which contains zero-area triangles that the processing software or hardware will discard. The degenerate triangles effectively introduce discontinuities or "jumps" to the strip. For example, the mesh in the diagram could also be represented as ABCDDFFEDC, which would be interpreted as triangles ABC BCD "CDD DDF DFF FFE" FED EDC (degenerate triangles marked with italics). Notice how this strip first builds two triangles from the left, then restarts and builds the remaining two from the right.Patent
The use of polygon strips in products distributed in the United States prior to
December 4 ,2014 , may be subject to a patent owned byGeneral Electric Company. [US patent|5561749, retrieved onMarch 28 ,2007 .]References
External links
* [http://www.delphi3d.net/articles/viewarticle.php?article=tristrips.htm] - Triangle strip generation
ee also
*
Triangle
*Triangle fan
*Computer graphics
*Graphics cards
*Optimization (computer science)
Wikimedia Foundation. 2010.