Fact-checked by Grok 2 weeks ago

Triangle fan

A triangle fan is a primitive in used by rendering APIs such as and to draw a connected group of triangles that all share a single common , enabling efficient representation of fan-shaped polygonal surfaces. In a triangle fan, the first serves as the central hub, with the second and third vertices defining the initial alongside ; each subsequent vertex then forms a new by connecting to the previous vertex and back to , producing n-2 triangles from n vertices total. This structure is invoked in via the GL_TRIANGLE_FAN mode within functions like glBegin or glDrawArrays, and in legacy 9 using D3DPT_TRIANGLEFAN. In 9 with flat shading enabled, all triangles in the fan inherit the color attributes from the shared central (as the first vertex of each ), which can simplify rendering for certain convex polygons like circles approximated by triangular sectors. Triangle fans originated as part of the fixed-function in early graphics APIs to reduce data redundancy compared to independent , thereby optimizing storage and processing for rendering in applications such as and simulations. However, they have been deprecated in modern APIs like 10 and later, as well as core-profile versions, in favor of indexed drawing and triangle strips or lists, which offer greater flexibility and avoid potential artifacts from elongated . Despite this, triangle fans remain supported in compatibility modes and are occasionally used in legacy code or for simple 2D/3D shape approximations.

Core Concepts

Definition

A triangle fan is a rendering in consisting of a sequence of connected triangles that all share a single common , referred to as the fan or . This arrangement forms a fan-like emanating from the pivot, enabling the efficient depiction of polygonal surfaces, such as those approximating convex shapes. The primary purpose of a triangle fan is to reduce data during rendering, thereby minimizing storage requirements and processing overhead compared to specifying triangles. By reusing the fan across all triangles in the sequence, it optimizes usage in pipelines, making it particularly suitable for tessellating polygons where vertices radiate from a central point. In terms of structure, a triangle fan comprising n triangles requires n+2 vertices: one fan V_0 and n+1 vertices V_1, V_2, \dots, V_{n+1}. Each successive triangle is formed by connecting the fan to consecutive pairs of vertices, such that the i-th T_i is defined as (V_0, V_i, V_{i+1}) for i = 1 to n. This sequential ensures a continuous surface without gaps, assuming proper vertex ordering. The triangle fan primitive was introduced in the initial release of the OpenGL graphics API, version 1.0, in 1992, as a core method for optimized primitive assembly in immediate-mode rendering.

Vertex Ordering

In a triangle fan primitive, the vertices are specified in a specific sequence to define the shared central vertex and the radiating triangles. The first vertex, denoted as V_0, serves as the central fan vertex. This is followed by a sequence of boundary vertices V_1, V_2, \dots, V_n, where each consecutive pair of boundary vertices forms a triangle with the central vertex. Specifically, the triangles are implicitly generated as (V_0, V_i, V_{i+1}) for i = 1 to n-1, resulting in n-1 triangles from n+1 total vertices. The winding order of these vertices determines the orientation of the triangles, which is crucial for front-face and in rendering pipelines. Typically, the vertices around the fan are ordered counterclockwise when viewed from the front, defining front-facing triangles in right-handed coordinate systems such as those used in . This counterclockwise convention ensures that the signed area of each triangle is positive for front faces. For back-facing triangles, the winding order is reversed to . In contrast, employs a winding order by default for front-facing triangles. Consider an example with four boundary vertices to illustrate the sequence: the vertex list V_0, V_1, V_2, V_3, V_4 generates three triangles—(V_0, V_1, V_2), (V_0, V_2, V_3), and (V_0, V_3, V_4)—all sharing the central V_0. This radial connectivity efficiently covers a fan-shaped region without redundant vertex specifications. To handle cases where a closed polygonal shape is desired, such as tessellating a without gaps, the vertex sequence can be extended by repeating the first boundary vertex V_1 at the end. This appends a final triangle (V_0, V_n, V_1), completing the fan into a seamless loop while avoiding degenerate zero-area triangles. Triangle fans assume the vertices lie in a planar or near-planar relative to the central to prevent rendering artifacts like twisting or self-intersections during rasterization. Non-planar arrangements may lead to incorrect fragment coverage, as the is optimized for , flat regions under standard rasterization rules.

Rendering Primitives

Triangle List

A triangle list is a rendering primitive consisting of a collection of independent triangles, where each triangle is defined by three unique vertices with no implicit sharing of vertices between triangles. In a triangle list, vertices are specified sequentially for each triangle; for example, the first triangle uses vertices V1, V2, V3, the second uses V4, V5, V6, and so on, resulting in a total of 3m vertices required to define m triangles. This primitive is particularly suitable for rendering arbitrary or non-connected meshes, such as scattered geometric elements where triangles do not share edges or vertices. Unlike shared-vertex primitives such as the triangle fan used for convex shapes, a triangle list provides no reduction in vertex data, necessitating a full set of three vertices per triangle. The lack of vertex sharing in a triangle list leads to higher memory usage for storage and increased data transfer to the graphics processing unit compared to primitives that reuse vertices.

Triangle Strip

A triangle strip is a rendering primitive consisting of a sequence of triangles where each consecutive pair shares an edge, enabling efficient representation of connected geometry by reusing vertices. This linear chaining contrasts with independent triangles by promoting continuity along a strip-like path, reducing data redundancy in vertex buffers. In a triangle strip, vertices are specified in sequential order, with the first three forming the initial and each subsequent defining a new using the two preceding . For example, given v_0, v_1, v_2, v_3, v_4, \dots, the are assembled as (v_0, v_1, v_2), (v_1, v_3, v_2), (v_2, v_3, v_4), (v_3, v_5, v_4), and so forth, with order reversed every other to maintain consistent winding. To generate n , exactly n+2 are required, as opposed to $3n for disconnected . The primitive assembly in a triangle strip reorders vertices for every other triangle to ensure all triangles share the same winding direction—typically counterclockwise—thereby maintaining consistent front-facing orientation for the surface topology during rasterization and based on the front-face winding rule. Mathematically, the efficiency stems from edge sharing, which minimizes vertex transmission: for n s, the vertex count drops to n+2, achieving a approaching one-third for long strips compared to triangle lists. This reduction in data volume supports faster rendering pipelines, particularly in bandwidth-limited scenarios. Triangle strips are particularly suitable for elongated or linear mesh structures, such as grids tessellated into triangles or surfaces, where the sequential aligns with the geometry's natural flow.

Applications

Tessellation

In the context of , triangle fans offer a straightforward and efficient for tessellating polygons by decomposing them into a series of triangles that share a common central . This method, known as fan triangulation, selects one of the polygon—typically a —as the fan center and forms triangles by connecting it to pairs of consecutive vertices along the polygon's . For a with n vertices, fan triangulation produces exactly n-2 triangles while reusing the original n vertices, avoiding the need for additional geometry. The process ensures no intersecting edges due to the convexity property, where all interior angles are less than 180 degrees and any between two points inside the lies entirely within it. To implement fan triangulation, the algorithm begins by verifying the polygon's convexity, for instance, by iterating through consecutive vertices and computing the cross product of edge vectors at each turn; the polygon is convex if all cross products have the same sign, indicating consistent left or right turns. Once confirmed, a fan vertex is chosen (e.g., the first vertex in the list), and the remaining boundary vertices are traversed in clockwise or counterclockwise order to generate the triangles. This ordering adheres to vertex winding rules to ensure proper front-facing orientation during rendering. A practical example is a quadrilateral with vertices labeled A, B, C, and D in boundary order. Selecting A as the fan center yields two triangles: △ABC and △ACD, with the shared edge AC acting as the diagonal that divides the quadrilateral. In graphics APIs such as , this is rendered using the GL_TRIANGLE_FAN primitive by specifying the vertices in sequence—A, B, C, D—where the first vertex (A) serves as the common hub, and the primitive automatically forms the triangles with an implicit connection back to A for the final one. The efficiency of triangle fans for convex polygon tessellation stems from their simplicity: they require no supplementary vertices or complex computations, making them ideal for real-time graphics where polygons represent simple shapes like UI elements or 2D sprites, and obviating the need for advanced algorithms like ear clipping that handle general polygons.

3D Mesh Optimization

Triangle fans play a key role in optimizing 3D meshes by decomposing complex surfaces into primitive sets where triangles radiate from a shared central vertex, facilitating efficient representation of local geometry that fans outward, such as in subdivision surfaces or level-of-detail (LOD) models. In adaptive subdivision schemes, this decomposition addresses irregularities by replacing incompatible coarse triangles with triangle fans, ensuring balanced refinement where adjacent subdivision levels differ by at most one, thus maintaining surface continuity without gaps. Such integration allows for selective refinement based on curvature or projected area, reducing overall triangle count while approximating smooth limit surfaces. Algorithms like TFAN leverage triangle fans for mesh simplification and compression, treating connectivity and geometry uniformly by partitioning the mesh into fans that minimize redundant vertex data and shrink index buffer sizes for GPU-friendly rendering. This fan-based traversal enables linear-time processing and up to 10-fold faster decoding compared to standards like MPEG-4 3DMC, with applications in collision detection and ray-tracing where shared vertices in fans accelerate traversal. By reusing the central vertex across multiple triangles, these methods cut index storage needs—typically requiring log(v) bits per triangle in fan form versus full vertex indices—enhancing bandwidth efficiency in real-time rendering pipelines. A practical example of this optimization appears in modeling radial structures like a or , where a triangle fan connects the to sequential points along the perimeter, forming the with minimal vertices and indices. For non-planar configurations, where outer vertices deviate from the central , triangle fans can introduce shading discontinuities if unaddressed; projecting the fan onto a local or applying per-vertex during mitigates artifacts by smoothing color gradients across triangles.

Implementation

OpenGL API

In , triangle fans are rendered using the GL_TRIANGLE_FAN primitive mode, which assembles a sequence of triangles sharing a common initial . The primary drawing commands are glDrawArrays and glDrawElements. The function glDrawArrays(GL_TRIANGLE_FAN, first, count) constructs the fan from vertex array data, starting at the index first and processing count vertices, where the first serves as the shared for all subsequent triangles. Similarly, glDrawElements(GL_TRIANGLE_FAN, count, type, indices) uses an element array buffer to into the vertex data, enabling more efficient memory usage for non-sequential access. To set up vertex buffers for rendering a triangle fan, a (VAO) is bound to configure the vertex attributes, followed by binding a (VBO) or multiple VBOs containing interleaved or separate data for positions, normals, and texture coordinates (UVs). The shared fan vertex must be placed first in the vertex array or index list to ensure correct primitive assembly, with subsequent vertices defining the fan's perimeter in sequential order. Attribute pointers are specified using glVertexAttribPointer or glEnableVertexAttribArray before issuing the draw call. Although supported in earlier OpenGL versions, GL_TRIANGLE_FAN is considered legacy in modern core profiles starting from 3.2, where it is excluded from the core specification to promote more flexible and performant alternatives like indexed triangle lists or strips; it remains available in the compatibility profile or via the GL_ARB_compatibility extension for . For legacy immediate-mode rendering (deprecated since 3.0), a fan can be drawn using glBegin and glEnd, as shown in this example for a simple fan centered at the origin:
glBegin(GL_TRIANGLE_FAN);
  glVertex3f(0.0f, 0.0f, 0.0f);  // Shared central [vertex](/page/Vertex)
  glVertex3f(1.0f, 0.0f, 0.0f);  // First perimeter [vertex](/page/Vertex)
  glVertex3f(0.707f, 0.707f, 0.0f);  // Second perimeter [vertex](/page/Vertex)
  glVertex3f(0.0f, 1.0f, 0.0f);  // Third perimeter [vertex](/page/Vertex)
  // Add more perimeter vertices as needed
glEnd();
In modern retained-mode , the equivalent using arrays is:
glBindVertexArray(vaoID);  // VAO with positions, normals, UVs bound
glDrawArrays(GL_TRIANGLE_FAN, 0, numVertices);  // numVertices >= 3
glBindVertexArray(0);
Error handling is essential for robust rendering: counts less than 3 for GL_TRIANGLE_FAN result in no triangles being rendered. Additionally, the front-facing winding order defaults to counterclockwise but can be configured with glFrontFace(GL_CW) or glFrontFace(GL_CCW) to match the vertex sequence, ensuring correct and based on the fan's orientation. The vertices must follow the ordering where the shared is first, with perimeter vertices proceeding consecutively around the fan to maintain consistent winding.

Direct3D API

In 9, triangle fans are implemented as a supported type, allowing efficient rendering of fan-shaped tessellations by sharing a central across multiple triangles. Developers specify the type using the D3DPT_TRIANGLEFAN value when issuing calls, which interprets the accordingly to form triangles radiating from the first . The primary drawing methods in 9 involve IDirect3DDevice9::[DrawPrimitive](/page/Draw) for non-indexed rendering or DrawIndexedPrimitive for indexed rendering, both requiring the type set to D3DPT_TRIANGLEFAN. For example, to render a fan with n triangles (requiring n + 2 vertices), the call would be [device](/page/Device)->DrawPrimitive(D3DPT_TRIANGLEFAN, startVertex, n), where the processes vertices starting from the shared fan . Vertex and index buffers are utilized similarly to other primitives: a vertex buffer holds the position and attribute data for all fan vertices, with the first vertex serving as the shared hub, while an optional index buffer specifies connectivity to reduce vertex duplication in complex fans. The primitive topology is set implicitly via the draw call parameters rather than a separate state, and buffers are bound using methods like SetStreamSource for vertices and SetIndices for indexed data. Support for triangle fans originated in Direct3D 9 via functions like DrawPrimitiveUP for user-provided vertex data, but the primitive type was deprecated and removed from core feature sets starting with Direct3D 10 and continuing in Direct3D 11, where the D3D11_PRIMITIVE_TOPOLOGY enumeration excludes TRIANGLEFAN entirely, even in lower feature levels such as 9_1 or 9_3. In Direct3D 11 and later, equivalent rendering requires manual conversion to supported topologies like triangle lists using ID3D11DeviceContext::IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST) followed by DrawIndexed calls, with indices explicitly defining the fan structure (e.g., repeating the central vertex index for each triangle). A typical in 9 begins with creating the device and setting the format via SetFVF or declaration, followed by filling and binding /index buffers, then issuing the draw call with the primitive count (where primitive count equals the number of triangles). In 11, the shifts to creating an matching the , binding buffers via IASetVertexBuffers and IASetIndexBuffer, setting the to a supported type like triangle list, and calling DrawIndexed with the index count for the expanded . This approach ensures compatibility with High-Level (HLSL) in both versions, though instancing for repeated (e.g., via DrawIndexedInstanced) is more robust in 11 but requires generating indexed data to emulate the without native support.

Performance Aspects

Advantages

Triangle fans offer significant storage efficiency for rendering polygons, requiring only n indices for an n-gon compared to 3(n-2) for an equivalent triangle list, which reduces video RAM (VRAM) usage by about two-thirds for large n. This minimization of size is particularly valuable in memory-constrained environments, as it lowers the overall data footprint of geometric representations. In non-indexed rendering, sharing a central across all in the avoids duplicating vertex data, leading to fewer vertex processings compared to a non-indexed triangle list and savings in attribute fetches and transformations during the vertex stage. This improves GPU throughput in vertex-bound rendering scenarios where computational overhead dominates. The radial structure of triangle fans enhances friendliness by promoting repeated access to the shared vertex, optimizing utilization of the post-transform vertex cache common in modern GPUs, which typically hold 12 to 24 entries. This reuse pattern reduces demands and from cache misses, as the central vertex remains resident while sequential . For shapes such as wheels or pie segments, triangle fans provide simplicity in specification, eliminating the need for complex ing schemes and enabling direct rendering without additional logic. In indexed rendering modes, the reduced index count translates to lower data transfer over the , which is especially beneficial for mobile and low-power devices where bandwidth limitations can bottleneck performance.

Limitations

Triangle fans are limited to rendering or star-convex polygons, as they rely on a central connected radially to sequential ; applying them to non- polygons can produce overlapping triangles or unintended holes in the . This geometric restriction arises because the fan structure assumes all triangles remain on one side of the central without that would invert or exclude parts of the shape. The fixed radial ordering in a triangle fan can also cause winding order inconsistencies on curved or non-planar surfaces, where triangles farther from the center may face away from the viewer, triggering incorrect backface and necessitating manual into multiple fans or alternative . In modern graphics APIs, triangle fans are deprecated or unsupported in favor of more flexible indexed drawing methods; 11 and later versions omit triangle fan entirely, as they are less compatible with pipelines and stages that expect uniform triangle topologies. Similarly, while core profiles still support GL_TRIANGLE_FAN, developers are encouraged to use generic indexed triangle lists for better integration with programmable and draw call efficiency. For performance, large triangle fans suffer from vertex cache inefficiency, as the repeated access to the central combined with sequential outer vertices can exceed typical sizes (e.g., 16-32 entries), resulting in costly refetches that degrade throughput compared to shorter strips or optimized indexed lists. Triangle fans scale poorly to complex meshes, where their rigid structure limits adaptability; in such cases, indexed triangle lists with restart indices allow seamless mixing of primitives without vertex duplication, offering superior organization for intricate .

References

  1. [1]
    glBegin - OpenGL 2 - docs.gl
    N-2 triangles are drawn. GL_TRIANGLE_FAN. Draws a connected group of triangles. One triangle is defined for each vertex presented after the first two vertices.
  2. [2]
    Triangle Fans (Direct3D 9) - Win32 apps - Microsoft Learn
    Jan 6, 2021 · A triangle fan is similar to a triangle strip, except that all the triangles share one vertex, as shown in the following illustration.Missing: computer | Show results with:computer
  3. [3]
    [PDF] The OpenGLTM Graphics System: A Speci cation (Version 1.0)
    as a triangle strip. The rules given for polygons also apply to each triangle generated from a triangle strip, triangle fan or from separate triangles.
  4. [4]
    OpenGL - The Khronos Group
    Date. OpenGL 1.0. June 1, 1992. OpenGL. 1992. OpenGL ARB is created. Loading Flickr. OpenGL 1.0. June 1, 1992. OpenGL 1.0 is released. OpenGL 1.1. March 4, 1997.
  5. [5]
    [PDF] OpenGL 4.6 (Core Profile) - May 5, 2022 - Khronos Registry
    May 1, 2025 · OpenGL 4.6 (Core Profile) is a specification for the OpenGL Graphics System, version 4.6, released on May 5, 2022.
  6. [6]
    opengl - GL_TRIANGLE FAN Explanation - Stack Overflow
    Nov 7, 2011 · Triangle FAN is a basic primitive which share the same concept in all OpenGL versions and also Direct3D (XNA).GL_TRIANGLE_STRIP vs GL_TRIANGLE_FAN - Stack OverflowOpenGL Triangle fan - Stack OverflowMore results from stackoverflow.comMissing: definition | Show results with:definition
  7. [7]
    Triangle Lists - Win32 apps - Microsoft Learn
    Jan 6, 2021 · A triangle list is a list of isolated triangles. They might or might not be near each other. A triangle list must have at least three vertices.
  8. [8]
    Primitive Topologies - Win32 apps | Microsoft Learn
    Aug 19, 2020 · A primitive type can have multiple leading vertices defined, as long as each one is used for a different primitive. For a triangle strip with ...
  9. [9]
    TriangleList VS TriangleStrip - GameDev.net
    Jun 16, 2004 · A TriangleList treats every group of three vertices as a separate triangle, sharing no vertices with any other.Creating new triangles using GL_TRIANGLE_STRIPS - GameDev.netConvert triangle list to a triangle strip? - GameDev.netMore results from www.gamedev.net
  10. [10]
    Triangle Meshes in Computer Graphics - Tutorials Point
    In a triangle fan, all triangles share a common vertex, and the remaining vertices form a fan-like structure. This reduces the number of vertex indices that ...
  11. [11]
    None
    Below is a merged summary of the GL_TRIANGLE_STRIP primitive in OpenGL 4.5 Core Profile, consolidating all information from the provided segments into a concise yet comprehensive response. To retain all details efficiently, I will use a combination of narrative text and a table for key attributes, ensuring no information is lost. The response includes definitions, triangle formation, winding/ordering, notes, and relevant URLs, organized for clarity.
  12. [12]
    Triangle strips - UWP applications - Microsoft Learn
    Oct 20, 2022 · A triangle strip is a series of connected triangles. Because the triangles are connected, the application does not need to repeatedly specify all three ...Missing: fan | Show results with:fan
  13. [13]
    Triangle Strips - Win32 apps - Microsoft Learn
    Jan 6, 2021 · Use a triangle strip to render triangles that are not connected to one another. To do this, specify a degenerate triangle (that is, a ...
  14. [14]
    [PDF] Efficiently Computing and Updating Triangle Strips for Real-Time ...
    Abstract. Triangle strips are a widely used hardware-supported data-structure to compactly represent and ef- ficiently render polygonal meshes.
  15. [15]
    [PDF] Quadrilateral Meshes Stripification
    One of popular approaches is to convert the quadrilateral mesh to the triangle mesh and render this mesh using strips of triangles. Using the strips, one can ...
  16. [16]
    [PDF] Triangle Strips For Fast Rendering
    Apr 5, 2004 · It also introduces a new stripification algorithm for terrain models based on Delaunay triangulation that can be modified to handle. LOD.
  17. [17]
    [PDF] Flavor of Computational Geometry Polygon Triangulation
    Every convex polygon may be triangulated as a "fan," with all diagonals share a common vertex which is denoted by the fan center, any vertex in a convex polygon ...<|control11|><|separator|>
  18. [18]
    Computational Geometry: Algorithms and Applications - SpringerLink
    A broad overview of the major algorithms and data structures of the field; Motivated from applications; Covers concepts and techniquesto be presented in any ...Missing: test | Show results with:test
  19. [19]
    glBegin - OpenGL 3 - docs.gl
    N-2 triangles are drawn. GL_TRIANGLE_FAN. Draws a connected group of triangles. One triangle is defined for each vertex presented after the first two vertices.
  20. [20]
    [PDF] Mesh Representations & Subdivision Surfaces - cs.Princeton
    Adaptive Subdivision. • Solution: o Replacing incompatible coarse triangles by triangle fan o Balanced subdivision: neighboring subdivision levels must not ...
  21. [21]
    3-Subdivision - ACM Digital Library
    If further split operations are applied to an already adaptively re- fined mesh, the triangle fans have to be removed first since the cor- responding triangles ...
  22. [22]
    [PDF] An Adaptive Scheme for Subdivision Surfaces based on Triangular ...
    Kobbelt proposed an adaptive refinement method for both his Kobbelt scheme and ... temporary triangle fans. This process is well known in the finite element ...
  23. [23]
    TFAN: A low complexity 3D mesh compression algorithm
    Jun 11, 2009 · This paper proposes a novel approach for mono-resolution 3D mesh compression, called TFAN (Triangle Fan-based compression).
  24. [24]
    Fast processing of triangle meshes using triangle fans
    The triangle fan representation improves the performance of several fundamental geometric algorithms operating over triangle meshes, and is demonstrated to ...<|control11|><|separator|>
  25. [25]
    3D triangle mesh compression using fan based traversal
    Dec 1, 2004 · It achieves this by using a larger chunk of the mesh, namely a triangle fan, as the unit of encoding. ... end vertex. Note that a mesh may ...
  26. [26]
    [PDF] Shading and 3D Modeling - CSE CGI Server
    How can we model a cone? There are many ways. Simple way: Make a circle using a triangle fan parallel to the x-y plane. For example at.
  27. [27]
    [PDF] Triangle meshes - Cornell: Computer Science
    Defined by three vertices. • Lives in the plane containing those vertices. • Vector normal to plane is the triangle's normal. • Conventions (for this class, ...
  28. [28]
    OpenGL: Does it make sense to use an Index Buffer With ...
    Jul 3, 2016 · You're generally better off using plain triangles and an index buffer to draw multiple fans (and other shapes) in a single draw call.Missing: mesh simplification
  29. [29]
    glDrawArrays - OpenGL 4 Reference Pages
    ### Summary of GL_TRIANGLE_FAN in glDrawArrays
  30. [30]
    glDrawElements - OpenGL 4 Reference Pages - Khronos Registry
    glDrawElements renders primitives from array data, using a single call to construct a sequence of primitives from an enabled array.
  31. [31]
  32. [32]
    D3D11\_PRIMITIVE\_TOPOLOGY enumeration - Win32 apps
    Mar 4, 2021 · The pipeline interprets vertex data that is bound to the input-assembler stage. These primitive topology values determine how the vertex data is rendered on ...
  33. [33]
    Why are triangle fans not supported in Direct3D 10 or later?
    Sep 5, 2012 · My understanding is that because triangle fans often result in very skinny long triangles resulting in interops causing artifacts.
  34. [34]
    Direct3D feature levels - Win32 apps - Microsoft Learn
    Jul 24, 2023 · Using feature levels, you can develop an application for Direct3D 9, Microsoft Direct3D 10, or Direct3D 11, and then run it on 9, 10 or 11 ...
  35. [35]
    What is the benefit of using triangle-strip and triangle-fan in rendering?
    Sep 9, 2010 · Triangle strips are extremely common, since they can represent surfaces more efficiently than triangle lists.opengl - GL_TRIANGLE FAN Explanation - Stack OverflowGL_TRIANGLE_STRIP vs GL_TRIANGLE_FAN - Stack OverflowMore results from stackoverflow.comMissing: definition | Show results with:definition
  36. [36]
    A fan growing algorithm for efficient vertex caching - ScienceDirect
    In this paper we describe an algorithm to speed up the rendering of triangulated meshes. The gap between the microprocessor's speed and the memory's speed ...
  37. [37]
    Chapter 28. Graphics Pipeline Performance - NVIDIA Developer
    Optimize for the post-T&L vertex cache. Modern GPUs have a small first-in, first-out (FIFO) cache that stores the result of the most recently transformed ...
  38. [38]
    OpenGL are strips/fans faster for rendering or just data bandwidth
    Aug 13, 2012 · When we send data for drawing we can mark it as TRIANGLE_STRIP or TRIANGLE_FAN to reduce the number of vertices we have to specify. Now, does ...Why is this GL_TRIANGLE fan texturing incorrectly?Why are triangle fans not supported in Direct3D 10 or later?More results from gamedev.stackexchange.comMissing: ordering | Show results with:ordering
  39. [39]
    Triangulation - Mirkwood
    Apparently OpenGL will draw a polygon as a triangle fan. Which means The order of the points is very important for non-convex polygons. I found a really ...
  40. [40]
    Computer Graphics (CS 4300) 2010S: Lecture 8
    Apr 19, 2010 · for non-convex polygons, one solution is to tessellate: break the ... the resulting array of triangles can be efficiently stored as a triangle fan ...
  41. [41]
    Confused About Triangle Winding And Transformations
    Aug 29, 2011 · I see three problems here, each described in a question: ACTUAL QUESTIONS: Q1: Why is the winding reverse of what I intended? Haven't I wound ...opengl - GL_TRIANGLE FAN Explanation - Stack OverflowDoes the winding direction in an OpenGL triangle strip alternate ...More results from stackoverflow.com
  42. [42]
    Correcting the Winding Order - OpenGL - Khronos Forums
    Aug 15, 2005 · Change the sequence of any two vertices of the triangle. Ie, swap two indices or swap the whole vertices, depending on your data representation.Missing: direct3d | Show results with:direct3d
  43. [43]
    [PDF] OpenGL 4.1 (Core Profile) - July 25, 2010
    Jul 25, 2010 · OpenGL (for “Open Graphics Library”) is a software interface to graphics hard- ware. The interface consists of a set of several hundred ...
  44. [44]
    Linear-Speed Vertex Cache Optimisation - Tom Forsyth
    Sep 28, 2006 · This paper introduces an algorithm for optimising an indexed triangle list to be friendly to a wide variety of hardware vertex caches of unknown size.
  45. [45]
    GL_TRIANGLES vs GL_TRIANGLE_FAN/STRIP - Khronos Forums
    Jan 25, 2011 · On most meshes, you will have more index data when you use GL_TRIANGLES than with GL_TRIANGLE_STRIPs (fans are almost completely useless.GL_TRIANGLE_FAN with glDrawElements - Khronos ForumsIssue: GL_TRIANGLE_STRIP and GL_TRIANGLE_FAN lines visible ...More results from community.khronos.org
  46. [46]
    Optimizing 3D mesh into list of triangle strips/fans to save VRAM
    Jan 3, 2024 · Godot could automatically convert the list of triangles in a mesh to a list of triangle fans or strips, which would save a lot of memory.