2014-05-01 3 views
0

Lors du traitement, vous pouvez créer des formes 3D assez facilement en donnant simplement des positions de sommet dans un certain ordre.Modèles de sommets 3D optimaux OpenGL

Exemple pour un carré simple:

beginShape();// QUAD would work as parameter 
vertex(10,10); 
vertex(20,10); 
vertex(20,20); 
vertex(10,20); 
endShape(); 

Ce que je me demande est si je veux créer plusieurs quadriceps qui forme une plus grande place (c.-à certains des coins partagent des quadriceps), dois-je créer les quadrilatères plus petits par eux-mêmes et ainsi créer des sommets qui se chevauchent ou est-il un moyen de définir simplement les sommets que je peux alors utiliser pour plusieurs quads sans en créer de nouveaux à la même position?

Exemple:

X:1, 2 
+---+---+ Y: 
| | | 
| | | 1, 
+---o---/ 
| | | 
| | | 2 
+---+---+ 

Le coin milieu partagé entre tous les quads (marqué 'o') aura 4 sommets se chevauchant à partir de tous les quads voisins. Le point de sommet moyen le plus à droite (marqué '/') aura 2 sommets qui se chevauchent des quadrants en (2,1) et (2,2)

N'est-ce pas très inefficace quand il s'agit de vertexcount?

Cela pourrait être la façon dont fonctionne OpenGL mais dans mon esprit cela ne semble pas très efficace, si je me trompe, dites-le moi.

Répondre

2

Ce que vous décrivez est la méthode originale de dessin de sommets dans OpenGL 1.0. Il y a eu des méthodes plus efficaces depuis la spécification OpenGL 1.1, qui a été publiée en 1997. Vérifiez les appels d'API comme glDrawElements, qui vous permet d'utiliser des indices de vertex.

+0

Je pourrais m'étendre là-dessus mais comme j'utilise le traitement, j'aimerais utiliser les fonctions built-in vertex et beginShape. Cela ressemblerait cependant à un simple interligne pour dessiner la forme entière sans utiliser un PShape mais est-ce que cela signifie une performance pire puisque l'objet n'est pas chargé en mémoire de la même manière qu'un PShape? –

0

Ce que vous voulez est connu comme une primitive Quad Strip.

Vous fournissez vos sommets dans un ordre spécial, et il réutilisera 2 des 4 sommets qui composent le quad adjacent. L'ordre correct des sommets dans une bande est tel que chaque primitive impaire est enroulée à l'envers. Les bandes sont conçues pour la géométrie connectée, si vous voulez dessiner des quads non connectés en utilisant une bande quadruple, vous devez faire quelque chose appelé "redémarrage primitif".

Bien sûr, les quads sont dépréciés dans OpenGL moderne; les triangles soutiennent le même concept. En fait, un seul quad non-dénudé a le même ordre de vertex qu'une bande de triangle qui remplit la même zone.

Vous pouvez également utiliser le dessin indexé, où vous référencez les sommets de chaque primitive par leur ID. Cela nécessite un stockage supplémentaire d'un tableau d'index, mais il a l'avantage supplémentaire de vous permettre de réutiliser des sommets dans des maillages qui ne sont pas une série de primitives connectées.

+0

Si faire un tableau de vecteurs 3D pour chaque sommet permettrait de résoudre mon problème, je vais sûrement l'essayer. Et comme vous l'avez dit, les QUAD et les QUAD_STRIP sont obsolètes et j'aimerais rester sur les fonctionnalités supportées/modernes. –