Jump to content

Triangle strip: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Line 14: Line 14:
To draw the triangle strip in the diagram, the code is as follows:
To draw the triangle strip in the diagram, the code is as follows:


<source lang="c">
<code>
glBegin(GL\_TRIANGLE\_STRIP);
glBegin(GL_TRIANGLE\_STRIP);
glVertex3f( 0.0f, 0.0f, 0.0f ); //vertex 1
glVertex3f( 0.0f, 0.0f, 0.0f ); //vertex 1
glVertex3f( 0.0f, 1.0f, 0.0f ); //vertex 2
glVertex3f( 0.0f, 1.0f, 0.0f ); //vertex 2
Line 21: Line 21:
glVertex3f( 1.5f, 1.0f, 0.0f ); //vertex 4
glVertex3f( 1.5f, 1.0f, 0.0f ); //vertex 4
glEnd();
glEnd();
</code>
</source>


Note that only one additional vertex is needed to draw the second triangle.
Note that only one additional vertex is needed to draw the second triangle.

Revision as of 12:10, 2 April 2009

Diagram of four triangles, 1, 2, 3, and 4, with vertices A, B, C, D, E, and F.

A triangle strip is a series of connected triangles, sharing vertices, allowing for faster rendering and more efficient memory usage for computer graphics. They are optimized on most graphics 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 into RAM.

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

Model of two triangles drawn in OpenGL using triangle strips.

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.[1]

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 Programming Guide:

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.

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,[2] 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 by General Electric Company.[3]

References

  1. ^ The OpenGL Redbook [1]
  2. ^ Azanli, Elvir. Stripe, retrieved on March 28, 2007.
  3. ^ U.S. patent 5,561,749, retrieved on March 28, 2007.


See also