TriangleMode
Public / Constants
TriangleStrip
The triangulation process will create a continuous triangle strip (around 1.61 indices per triangle).
The TriangleStrip mode yields graphics primitives of type Primitive.TriangleStrip, which can be rendered with a IPrimitiveRenderer, using direct draw calls.
Fun fact: the average ratio of indices per triangle approximates the value of the 'golden ratio':
https://en.wikipedia.org/wiki/Golden_ratio
TriangleList
The triangulation process will create a continuous triangle list (3 indices per triangle).
The TriangleList mode yields graphics primitives of type Primitive.TriangleList, which can be rendered with a IPrimitiveRenderer, using direct draw calls.
TriangleTerminal
The triangulation process will create a continuous list of terminal triangle codes (around 0.25 indices per triangle).
A terminal triangle does not have a vertex on its spine CV (see XDag). A terminal triangle code has the following layout:
bits [0.. 1] : child index of C in V (LL=0, LR=1, RL=2, RR=3)
bits [1.. 2] : child index of V in P (LL=0, LR=1, RL=2, RR=3)
bits [3.. 3] : triangulate (V,P,C)?
bits [4.. 4] : triangulate (V,C,G/A)?
bits [5.. 5] : flip triangle winding?
bits [6..31] : index of vertex P
V
/|.
/ | .
/ | .
/ | .
/ | .
/ | .
/......|.......
P C G/A
The following figure shows the possible combinations for triangulation on the GPU:
V.?L == C V.?R == C
V V
/|\ /|\
/ | \ / | \
LL / | \ LR RL / | \ RR
/ | \ / | \
RL /|\ | /|\ LR RL /|\ | /|\ LR
/ | \ | / | \ / | \ | / | \
/_\|__\|/__|/_\ /_\|__\|/__|/_\
P LR C RL G/A G/A LR C RL P
V.LL == C V.RL == C V.RR == C V.LR == C
V V V V
/|\ /|\ /|\ /|\
/ | \ / | \ / | \ / | \
LL / | \ LR LL / | \ LR RL / | \ RR RL / | \ RR
/ | \ / | \ / | \ / | \
RL /|\ | /|\ LR RL /|\ | /|\ LR RL /|\ | /|\ LR RL /|\ | /|\ LR
/ | \ | / | \ / | \ | / | \ / | \ | / | \ / | \ | / | \
/_\|__\|/__|/_\ /_\|__\|/__|/_\ /_\|__\|/__|/_\ /_\|__\|/__|/_\
P LR C RL G P LR C RL A G LR C RL P A LR C RL P
The TriangleTerminal mode yields graphics primitives of type Primitive.TriangleList, which can be rendered with a IPrimitiveRenderer using indirect draw calls (see TriangulationBatch.Indirect).
SectorList
The triangulation process will create a continuous sequence of sector codes, each representing a mesh sector resp. leaf quadrant (1 index per sector resp. quadrant).
Sector codes have the following layout:
bits [0.. 2] : index of leaf quadrant Q in the range [0..3] or 4 for whole sector bits [3.. 3] : flip triangle winding? bits [4..31] : index of vertex V V.L = L V.LL.LL = Q0 V.R = R V.LL.LR = Q1 V.G = G V.RL.LL = Q2 V.A = A V.RL.LR = Q3 A--------RL-------R | | | | | | | Q3 | Q2 | | | | | | | LR-------V-------RR | | | | | | | Q0 | Q1 | | | | | | | L--------LL-------G
The TriangleTerminal mode yields graphics primitives of type Primitive.TriangleList, which can be rendered with a IPrimitiveRenderer using indirect draw calls (see TriangulationBatch.Indirect).