2010-08-05 7 views
1

Voici mon problème. Je suis en train de tesseler des polygones complexes, auto-intersection, multicontours avec des centaines de verticies. Le GLU Tesselator se bloque avec un problème de pointeur nul 0x0000000. Il ne se plante jamais quand je ne fais pas de polygones auto-croisés. Si elle ne se croise pas, elle ne s'écrase jamais quelles que soient les circonstances. Je vérifie pour NULL PARTOUT dans ma demande, je suis sûr que ce n'est pas de mon côté des choses. J'ai trouvé une ancienne version de GLU 1.2 de SGI et elle ne tombe jamais en panne, cependant les versions mesa et Windows basées sur GLU 1.3 se bloquent. Rien ne se bloque étrangement en mode débogage. Pour obtenir plus d'informations, j'ai compilé le GLU de Mesa et j'ai vu que d'abord un assert échoue, puis si je le commente, il y a un pointeur qui est défini sur NULL à partir d'une fonction qui échoue à malloc. Je suis très incertain à ce stade quoi faire. Que pourrais-je faire pour essayer de résoudre ce problème? Devrais-je juste essayer de faire une version de Mesa's GLU qui fonctionne pour moi? Je ne suis pas sûr de savoir comment procéder à partir d'ici.Recevoir GLU_TESS_ERROR_5 de GLU Tesselator

Après plus débogage je vois que je suis en train de GLU_TESS_ERROR_5 que je pense est un numéro d'erreur trop importante, mais je l'ai fait une boucle pour tester plus grand nombre que cela, mais pas de chance :(

+0

C'est marrant car googler GLU_TESS_ERROR_5 ne renvoie que cette page. – Calvin1602

+0

Votre polygone est-il plat? – Calvin1602

+0

Oui, il s'agit de polygones 2D – jmasterx

Répondre

1

au moins sous Windows, GLU_TESS_ERROR_5 signifie que l'une des coordonnées était trop grande, en particulier que GLU exige que les coordonnées soient suffisamment petites pour être multipliées sans débordement, la spécification indique que la limite est définie dans la constante GLU_TESS_COORD_TOO_LARGE. Si ce n'est pas le cas, je pense qu'il serait prudent de vérifier que les coordonnées sont comprises entre - 10^150 et 10^150. Si cela ne fonctionne pas, essayez des plages de plus en plus petites

Il se peut également qu'il y ait un problème avec la géométrie, ce qui déclenche un autre problème dans GLU. Essayez de trouver le polygone le plus simple qui déclenchera cette erreur.

Si cela ne fonctionne pas, vérifiez si une version plus récente de GLU est disponible. Je ne connais pas Mesa, mais la version d'OpenGL livrée avec VC++ est notoirement obsolète.

Si tout le reste échoue, vous pouvez essayer d'utiliser une autre bibliothèque pour effectuer la tesselation. Après une recherche rapide, Triangle 1 semble être un bon candidat.

Questions connexes