2010-10-06 5 views
8

J'ai essayé googler et de la recherche sur la pile, mais je ne trouve rien :-(
(Mapping irregular shapes or other polygons (cartoons, sprites) to triangles in OpenGL ES)OpenGL ES - Comment dessiner un polygone rempli?

Je veux dessiner un polygone rempli OpenGL ES sur iPad (2D, 3D ne ont pas besoin) (Je suis nouveau à OpenGL & & OpenGL ES) il semble simple sur OpenGL mais avec ES avec juste peut dessiner le triangle.

mais je ne peux pas trouver un bon tutoriel sur ce :-( -t-il existe-t-il un wrapper/library ou autre chose qui pourrait m'aider?

Je ne veux pas utiliser CoreGraphics, il est trop lent pour ce que je fais ^^
Et si possible, en évitant la bibliothèque trop (grand) comme Cocos2D.

Modifier: travailler sur le problème, voici quelques liens utiles (éditera)
Liens
- Polygon Triangulation
http://www.vterrain.org/Implementation/Libs/triangulate.html
http://en.wikipedia.org/wiki/Polygon_triangulation (WIKI) http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml (polygone sans trous) http://www.cs.unc.edu/~dm/CODE/GEM/chapter.html (polygone AVEC trous, code C)

Solution
Je vais essayer d'utiliser la tessellation polygonale pour obtenir des triangles. Au début, je vais essayer (http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml) et comme j'ai besoin de polygone avec des trous, le second (http://www.cs.unc.edu/~dm/CODE/GEM/chapter.html). Si quelqu'un a une meilleure façon, S'IL VOUS PLAÎT, dites-moi un commentaire ^^

Merci :-)

Répondre

3

Cocos2D est opengl d'emballage de bibliothèque fraîche et possède de nombreuses fonctionnalités de usefull (principalement pour les jeux, mais sans s'y limiter) .

Pour l'utilisation de polygones: http://flipcode.net/archives/Efficient_Polygon_Triangulation.shtml Je l'ai déjà utilisé auparavant et cela a bien fonctionné.

Cheers, Krzysztof Zablocki

+0

Ok mais si possible, je voudrais éviter Cocos2D juste pour dessiner des polygones xD (mais en passant, utiliser Cocos2D signifie ajouter beaucoup de taille à l'archive finale? Puis-je créer une vue au-dessus d'autres UIView sans problème? – Vinzius

+0

Vous pouvez utiliser Uglit opengl et normal sans problème, cocos2d offre beaucoup plus de fonctionnalités que dessiner des polygones donc si vous avez seulement besoin de polygones simples alors ce n'est pas nécessaire :) –

+0

ouais j'ai seulement besoin de polygones, mais merci ;-) – Vinzius

6

Je ne l'ai pas essayé d'utiliser OpenGL ES, mais à en juger d'un coup d'œil dans la documentation que vous devriez être en mesure de dessiner un polygone convexe en utilisant par exemple un « ventilateur de triangle »:

glVertexPointer(2, ..., arrayOfCoordinates) 
... 
glDrawElements(GL_TRIANGLE_FAN, ... , arrayOfIndices); 

On peut penser à un « ventilateur de triangle », comme les rayons d'une roue de bicyclette divisant la surface de la roue dans des « triangles » (le bord extérieur d'une roue de bicyclette est de bien sûr, mais j'espère que vous avez l'idée).

MISE À JOUR: Je trouve un petit diagramme sur le web: http://www.cse.msu.edu/~cse472/step6_stuff/step6.1.gif

+1

Tant que le polygone est convexe! –

+0

@Daniel: Précisément! (est-ce que je n'ai pas mentionné cela?) Bien sûr, il serait facile de diviser le polygone en triangles et de dessiner ceux qui utilisent GL_TRIANGLES, mais il semblait vouloir éviter cela ... –

+0

Oui, je travaille sur une solution basée sur un code trouvé ici (http://www.cocos2d-iphone.org/forum/topic/848) Mais cela ne fonctionne que si le polygone est convexe, comme dit Daniel Si quelque chose marche je vous le dis – Vinzius

0

En non-OpenGL ES on aurait tendance à utiliser la tessellator de la bibliothèque GL Utility (glu).J'ai trouvé this project qui vise à rendre glu disponible pour l'iPhone et qui prétend supporter la tessellation polygonale - si cela fonctionne, alors ce serait une bonne option.

+0

Merci, je vais jeter un oeil pour voir si elle peut être utilisée :-) – Vinzius

+1

J'ai essayé de compiler le projet, mais il semble avoir "quelques" problèmes ^^ encore merci – Vinzius

+0

glu tessellation est maintenant obsolète, quelle est la façon moderne d'atteindre ce sur non-ES opengl? –

2

Sur la page Discussion sur la triangulation des polygones de Wikipédia Je soutiens que plus de triangles seront plus rapides.

J'ai écrit un triangulation engine qui prend en charge les trous et s'exécute en temps O (n log (n)). Je l'ai testé sous Gdk, puis en ai fait une application Android.

+0

Je vais jeter un oeil :-) merci. – Vinzius

+0

J'ai découvert et corrigé un certain nombre de bugs. Veuillez attendre mon prochain commit avant de l'essayer. –

+0

J'ai commis une nouvelle version. Regardez dans le fichier .h avant de commencer. –

2

Quel est votre choix final? J'ai récemment testé 5 des libs en lien ci-dessous énumérées: http://vterrain.org/Implementation/Libs/triangulate.html

Mais aucun d'entre eux est satisfaisant ...

  1. iphone-glu: (http://code.google.com/p/iphone-glu /)

    • Bogues dans l'algorithme? il y a des petits trous pas rempli, ou parfois tirer à l'extérieur du polygone
  2. Triangulte: (http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml)

    • ne prend pas en charge trous ...
  3. Triangulation: (http://www.cs.unc.edu/~dm/CODE/GEM/chapter.html)

    • Buggy, court parfois hors des limites, ou indice négatif etc ...
  4. poly2tri: (http://code.google.com/p/poly2tri/)

    • Buggy, crash dans certains cas
  5. openglespolygon: (https://github.com/nroets/OpenGlEsPolygon)

    • algorithme imparfait? il y a des petits trous (non remplis) le long des bords du polygone
+0

Salut. Je n'ai pas trouvé une bonne solution comme vous l'avez expliqué dans votre post ... Donc pour le moment j'essaye de m'en passer. Si vous trouvez une solution, je suis intéressé. – Vinzius

+0

Merci. J'utilise maintenant la 3ème option après avoir modifié certains bogues d'initialisation de variables locales (initialiser à 0). Je ne suis pas sûr s'il y a d'autres bogues, mais comme il ne plante pas maintenant dans mon projet, je pense que c'est le meilleur choix auquel je peux penser. (J'ai eu tellement de mal à me connecter à Stack Overflow avec stackExchange ID, c'est ma première connexion réussie depuis mon inscription (j'ai épinglé l'onglet en chrome, de sorte que chaque fois que je lance chrome, il essayera de se connecter Stack Overflow ...)) –

+0

@DongMa, la 3ème option ne permet plus de télécharger le code source. – Dmitriy

0

Lorsque vous avez besoin faire la triangulation des polygones avec des trous, vous pouvez utiliser GPC. Il existe une fonction de tringulation appelée gpc_polygon_to_tristrip.

Pour le rendu utiliser GL_TRIANGLE_STRIP. Mais lisez d'abord la licence gpc!

+0

Merci, je vais jeter un oeil ;-) – Vinzius