Question

Voici ma question. Je suis tesselating complexe, auto-intersection, polygones multicontours avec des centaines de vertices. Le GLU Tesselator se bloque avec le numéro pointeur 0x0000000 null. Il ne jamais se bloque lorsque je ne fais pas des polygones auto intersection. Si elle ne coupe pas, il ne sera jamais tomber en panne, peu importe les circonstances. Je vérifie la valeur NULL dans ma demande EVERYWHERE, 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 il se bloque jamais, mais les versions de Windows mesa et sur la base GLU 1.3 fois crash. Rien ne se bloque en mode débogage strangly suffisant. Pour obtenir de plus amples informations, j'ai compilé GLU de Mesa et vu que la première une assertion échoue, si je commente que dehors, il y a un pointeur qui est NULL à partir d'une fonction qui ne parvient pas à malloc. Je suis très incertain à ce stade ce qu'il faut faire. Que pouvais-je faire pour essayer de résoudre ce problème? Dois-je juste essayer de faire une version de GLU de Mesa qui fonctionne pour moi? Je ne suis pas sûr comment procéder d'ici.

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

Était-ce utile?

La solution

Au moins sous Windows, GLU_TESS_ERROR_5 signifie que l'une des coordonnées était trop grande. Plus précisément, GLU exige que les coordonnées sont suffisamment petits pour être multipliés ensemble sans trop-plein. La spécification dit que la limite est définie dans la GLU_TESS_COORD_TOO_LARGE constante. Si cela existe constante, vérifiez que la valeur absolue de chaque coordonnée est inférieure à ce qu'elle. Sinon, 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 de gammes progressivement plus petites.

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

Si cela ne fonctionne pas, voir s'il existe une version plus récente de GLU disponible. Je ne sais pas à propos de Mesa, mais la version d'OpenGL livré 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top