Une primitive est une forme géométrique simple, allant du point au
polygone. Le type de primitive le plus utilisé est le triangle ainsi
que ses dérivés : le triangle fan et - surtout - le triangle strip.
Les vertices permettent de former ces formes géométriques. Ainsi, dans
le cas d'une primitive de type point, un seul vertex correspondra à une
seule primitive. Dans le cas d'un triangle, il en faudra trois pour
former la primitive. Il existe quelques types de primitives et les plus
utilisées sont :
- point
- ligne
- triangle
- triangle fan
- triangle strip
Les points
Pendant longtemps, les points étaient une primitive quasiment inutilisée, excepté dans les logiciels de conception assistée par ordinateur. Dans les jeux, cependant, des billboards étaient généralement utilisés à leur place pour créer des effets de particule. Un billboard est un simple carré qui a la particularité d'être aligné par rapport à la caméra de façon à toujours lui faire face.
Mais depuis maintenant quelques générations de GPU, il existe des primitives nommées point sprites. Celles-ci fonctionnent exactement comme les points, sauf que le GPU va créer lui-même le billboard. Ainsi, au lieu de fournir 4 vertices à la carte pour un carré, un seul sera fourni pour chaque point, ce qui améliore grandement les performances et permet ainsi d'afficher plus de particules.
Les lignes
Les lignes sont utilisées en tant que telles. Il s'agit en fait d'une primitive assez simple, qui nécessite deux vertices. Elle possèdera cependant les mêmes propriétés qu'un triangle : une texture, une couleur, etc. A noter que pour afficher en mode "fil de fer", il ne faut pas modifier tout le système d'affichage pour utiliser des lignes : la carte graphique est capable de créer les lignes a partir de toutes les autres primitives.
Le triangle strip
Les triangle strips sont généralement utilisés à la place des
triangles, puisque les performances sont meilleures lors de leur
utilisation. En effet, pour un triangle, il faut trois vertices. Pour
deux triangles, six vertices, etc. Le nombre de vertices est donc égal
au nombre de primitives multiplié par trois. Les triangle strips, quant
à eux, utilisent les trois premiers vertices pour le premier triangle,
et ensuite un seul vertex supplémentaire pour les triangles suivants. A
chaque fois, les trois derniers vertices sont utilisés pour définir le
triangle. Le nombre de vertices est donc égal au nombre de primitives +
deux.L'avantage est donc très net : pour 150 000 triangles, en utilisant des primitives de type triangle, il faudrait 450 000 vertices. En utilisant un triangle strip, il n'en faudrait que 150 002. Un tiers de données à transférer, plutôt pas mal comme optimisation.
Le triangle fanLe second type de primitive dérivé du triangle, le triangle fan, est proche du triangle strip. Au lieu d'utiliser les trois derniers vertices pour créer chaque primitive, ce sont les deux derniers vertices ainsi que le premier qui sont utilisés. Moins souvent utilisés que les triangle strips, les triangles fans permettent néanmoins de facilement créer des cercles, halos de lumière, etc. Au niveau des performances, ils sont similaires aux triangle strips.
Les tampons d'indexation
Une dernière technique très utile afin de diminuer la quantité de données à envoyer à la carte graphique est l'utilisation d'un index. Ainsi, dans une forme complexe (le modèle du héros d'un jeu, par exemple), il arrive souvent qu'un même point soit utilisé par plusieurs primitives, et le vertex s'en retrouve ainsi dupliqué. L'utilisation des index permet de se passer de ces copies en disant à la carte graphique quel vertex utiliser via un numéro, en quelque sorte. L'avantage étant que là où un vertex fait très vite 32 voire 64 octets, un index ne fait que 2 ou 4 octets.
|
|
Données vertices | La Tesselation |
|
Imprimer
Envoyer
3 Réactions
103 Approbations





Flux RSS
Dernières réactions
N'y a t'il rien a faire pour pouvoir lire cet article ? Il est pointe par plusieurs site mais ... est impossible a lire
J'ai essaye avec firefox et chrome sous linux ...
Merci d'avance.