fbpx
Wikipedia

Triangle strip

In computer graphics, a triangle strip is a subset of triangles in a triangle mesh with shared vertices, and is a more memory-efficient method of storing information about the mesh. They are more efficient than un-indexed lists of triangles, but usually equally fast or slower than indexed triangle lists.[1][2] The primary reason to use triangle strips is to 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.

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

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 a sequence of vertices ABCDEF. This sequence would be decoded as a set of triangles with vertices at ABC, BCD, CDE and DEF - although the exact order that the vertices are read will not be in left-to-right order as this would result in adjacent triangles facing alternating directions.

OpenGL implementation edit

 
Model of two triangles drawn in OpenGL using triangle strips.

OpenGL has built-in support for triangle strips. Fixed function OpenGL (deprecated in OpenGL 3.0) has support for triangle strips using immediate mode and the glBegin(), glVertex*(), and glEnd() functions. Newer versions support triangle strips using glDrawElements and glDrawArrays.

To draw a triangle strip using immediate mode OpenGL, 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.[3]

To draw the triangle strip in the diagram using immediate mode OpenGL, the code is as follows:

 //Vertices below are in Clockwise orientation  //Default setting for glFrontFace is Counter-clockwise  glFrontFace(GL_CW);  glBegin(GL_TRIANGLE_STRIP);   glVertex3f( 0.0f, 0.0f, 0.0f ); //vertex 1  glVertex3f( 0.0f, 0.5f, 0.0f ); //vertex 2  glVertex3f( 0.5f, 0.0f, 0.0f ); //vertex 3  glVertex3f( 1.0f, 0.5f, 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.

Quoting 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.

It's even clearer within the manual pages:[4]

Draws a connected group of triangles. One triangle is defined for each vertex presented after the first two vertices. For odd n, vertices n, n + 1, and n + 2 define triangle n. For even n, vertices n + 1, n, and n + 2 define triangle n. n – 2 triangles are drawn.

Note that n starts at 1. The above code sample and diagram demonstrate triangles drawn in a clockwise orientation. For those to be considered front-facing, a preceding call to glFrontFace(GL_CW) is necessary, which otherwise has an initial value of GL_CCW (meaning that triangles drawn counter-clockwise are front-facing by default).[5] This is significant if glEnable(GL_CULL_FACE) and glCullFace(GL_BACK) are already active (GL_BACK by default[6]), because back-facing triangles will be culled, so will not be drawn and will not appear on-screen at all.[7]

Properties and construction edit

It follows from definition that a subsequence of vertices of a triangle strip also represents a triangle strip. However, if this substrip starts at an even (with 1-based counting) vertex, then the resulting triangles will change their orientation. For example a substrip BCDEF would represent triangles: BCD,CED,DEF.

Similarly, reversal of strips’ vertices will result in the same set of triangles if the strip has an even number of vertices. (e.g. strip FEDCBA will represent the same triangles FED,ECD,DCB,CAB as the original strip). However, if a strip has an odd number of vertices then the reversed strip will represent triangles with opposite orientation. For example, reversal of a strip ABCDE will result in strip EDCBA which represents triangles EDC, DBC, CBA).

Converting a general polygon mesh to a single long strip was until recently generally not possible. Usually the triangle strips are analogous to a set of edge loops, and poles on the model are represented by triangle fans. Tools such as Stripe[8] or FTSG[9] represent the model as several strips. Optimally grouping a set of triangles into sequential strips has been proven NP-complete.[10]

Alternatively, a complete object can be described as 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 CBD CDD DDF DFF FFE FED DEC (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.

While discontinuities in triangle strips can always be implemented by resending vertices, APIs sometimes explicitly support this feature. IRIS GL supported Swaps (flipping two subsequent vertices in a strip), a feature relied on by early algorithms such as the SGI algorithm. Recently OpenGL/DirectX can render multiple triangle strips without degenerated triangles using Primitive Restart feature.

 
Curve tracing using triangle strip

References edit

  1. ^ "Documentation Archive".
  2. ^ "The Hacks of Life: To Strip or Not to Strip". 31 January 2010.
  3. ^ The OpenGL Redbook
  4. ^ "GlBegin".
  5. ^ glFrontFace
  6. ^ glCullFace
  7. ^ OpenGL FAQ / 10 Clipping, Culling, and Visibility Testing
  8. ^ Azanli, Elvir. Stripe, retrieved on March 28, 2007.
  9. ^ Xiang, Xinyu. , retrieved on January 21, 2011. (link is no longer valid)
  10. ^ Regina Estkowski, Joseph S. B. Mitchell, Xinyu Xiang. Optimal decomposition of polygonal models into triangle strips. In Proceedings of Symposium on Computational Geometry'2002. pp.254~263 url=http://www.ams.sunysb.edu/~jsbm/papers/p151-mitchell.pdf url=http://portal.acm.org/citation.cfm?id=513431

See also edit

triangle, strip, computer, graphics, triangle, strip, subset, triangles, triangle, mesh, with, shared, vertices, more, memory, efficient, method, storing, information, about, mesh, they, more, efficient, than, indexed, lists, triangles, usually, equally, fast,. In computer graphics a triangle strip is a subset of triangles in a triangle mesh with shared vertices and is a more memory efficient method of storing information about the mesh They are more efficient than un indexed lists of triangles but usually equally fast or slower than indexed triangle lists 1 2 The primary reason to use triangle strips is to 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 Diagram of four triangles 1 2 3 and 4 with vertices A B C D E and F 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 a sequence of vertices ABCDEF This sequence would be decoded as a set of triangles with vertices at ABC BCD CDE and DEF although the exact order that the vertices are read will not be in left to right order as this would result in adjacent triangles facing alternating directions Contents 1 OpenGL implementation 2 Properties and construction 3 References 4 See alsoOpenGL implementation edit nbsp Model of two triangles drawn in OpenGL using triangle strips OpenGL has built in support for triangle strips Fixed function OpenGL deprecated in OpenGL 3 0 has support for triangle strips using immediate mode and the span class n glBegin span span class p span span class n glVertex span span class o span span class p span and span class n glEnd span span class p span functions Newer versions support triangle strips using span class n glDrawElements span and span class n glDrawArrays span To draw a triangle strip using immediate mode OpenGL span class n glBegin span span class p span must be passed the argument span class n GL TRIANGLE STRIP span which notifies OpenGL a triangle strip is about to be drawn The span class n glVertex span span class o span span class p span family of functions specify the coordinates for each vertex in the triangle strip For more information consult The OpenGL Redbook 3 To draw the triangle strip in the diagram using immediate mode OpenGL the code is as follows Vertices below are in Clockwise orientation Default setting for glFrontFace is Counter clockwise glFrontFace GL CW glBegin GL TRIANGLE STRIP glVertex3f 0 0f 0 0f 0 0f vertex 1 glVertex3f 0 0f 0 5f 0 0f vertex 2 glVertex3f 0 5f 0 0f 0 0f vertex 3 glVertex3f 1 0f 0 5f 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 Quoting directly from the OpenGL Programming Guide GL TRIANGLE STRIP nbsp 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 It s even clearer within the manual pages 4 Draws a connected group of triangles One triangle is defined for each vertex presented after the first two vertices For odd n vertices n n 1 and n 2 define triangle n For even n vertices n 1 n and n 2 define triangle n n 2 triangles are drawn Note that n starts at 1 The above code sample and diagram demonstrate triangles drawn in a clockwise orientation For those to be considered front facing a preceding call to span class n glFrontFace span span class p span span class n GL CW span span class p span is necessary which otherwise has an initial value of span class n GL CCW span meaning that triangles drawn counter clockwise are front facing by default 5 This is significant if span class n glEnable span span class p span span class n GL CULL FACE span span class p span and span class n glCullFace span span class p span span class n GL BACK span span class p span are already active span class n GL BACK span by default 6 because back facing triangles will be culled so will not be drawn and will not appear on screen at all 7 Properties and construction editIt follows from definition that a subsequence of vertices of a triangle strip also represents a triangle strip However if this substrip starts at an even with 1 based counting vertex then the resulting triangles will change their orientation For example a substrip BCDEF would represent triangles BCD CED DEF Similarly reversal of strips vertices will result in the same set of triangles if the strip has an even number of vertices e g strip FEDCBA will represent the same triangles FED ECD DCB CAB as the original strip However if a strip has an odd number of vertices then the reversed strip will represent triangles with opposite orientation For example reversal of a strip ABCDE will result in strip EDCBA which represents triangles EDC DBC CBA Converting a general polygon mesh to a single long strip was until recently generally not possible Usually the triangle strips are analogous to a set of edge loops and poles on the model are represented by triangle fans Tools such as Stripe 8 or FTSG 9 represent the model as several strips Optimally grouping a set of triangles into sequential strips has been proven NP complete 10 Alternatively a complete object can be described as 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 CBD CDD DDF DFF FFE FED DEC 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 While discontinuities in triangle strips can always be implemented by resending vertices APIs sometimes explicitly support this feature IRIS GL supported Swaps flipping two subsequent vertices in a strip a feature relied on by early algorithms such as the SGI algorithm Recently OpenGL DirectX can render multiple triangle strips without degenerated triangles using Primitive Restart feature nbsp Curve tracing using triangle stripReferences edit Documentation Archive The Hacks of Life To Strip or Not to Strip 31 January 2010 The OpenGL Redbook GlBegin glFrontFace glCullFace OpenGL FAQ 10 Clipping Culling and Visibility Testing Azanli Elvir Stripe retrieved on March 28 2007 Xiang Xinyu FTSG retrieved on January 21 2011 link is no longer valid Regina Estkowski Joseph S B Mitchell Xinyu Xiang Optimal decomposition of polygonal models into triangle strips In Proceedings of Symposium on Computational Geometry 2002 pp 254 263 url http www ams sunysb edu jsbm papers p151 mitchell pdf url http portal acm org citation cfm id 513431See also editTriangle Triangle fan Computer graphics Graphics cards Optimization computer science Retrieved from https en wikipedia org w index php title Triangle strip amp oldid 1187093600, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.