Une petite question pour les developpeurs de jeux et autres lockeurs de frames depuis 1987:
Je développe une petite appli qui peut afficher et modifier des objets 3D. J’accepte en entrée 3 types de fichiers: “.X" (DirectX) ".LWO” (Lightwave) et “*.3DS” (3DStudio).
Seulement voila le format LWO me pose quelques soucis:
Import de fichier LWO qui ne se composent pas uniquement de triangle: lorsque j’ai une surface de plus de 3 cotés qui en plus dans certains cas a des angles concaves, comment je fais pour la “triangliser” ? quelqu’un pourrais me donner un algo qui marche dans tous les cas? j’ai cherché a en mettre un au point, mais ça ne marche jamais dans tous les cas… et mes recherches sur google sont restée jusque la infructueuses.
Le calcul des normales: j’ai la aussi fait une methode pour calculer correctement les normales, mais je n’arrive jamais a avoir un ombrage parfait il reste toujours des “glitchs” qui restent. (Genre avec un cone qui doit avoir la base a angle droit avec le reste, mais ou le tour du cone doit etre lissé. En gros ce que je fais actuellement c’est ça:
je met dans une table toutes les faces utilisant un vertex.
je calcul l’angle entre toutes ces faces et si l’angle dépasse 45° je duplique le vertex pour que l’angle ne soit pas lissé.
Je calcule les normales en moyennant les normales de chaque faces adjacentes.
mais cet algo “maison” n’est vraiment pas parfait et j’aimerai vraiment savoir si il n’y a pas de manière standard et propre de le faire.
J’ai regardé un peu toutes les sources de loader que j’ai pu trouver, mais aucun ne gére ces paramètres correctement…
Donc si quelqu’un a un lien ou une piste ou un tutorial ou n’importe quoi pour m’aider je lui en serait éternellement reconnaissant pendant toute la matinée.
Je ne connais rien au sujet, mais comme les réponses ne sont pas encore nombreuses, je me permets ce petit lien : http://rzr.online.fr/docs/extrusion/00index.htm
On y voit entre autres un code de calcul des normales.
(Je ne vais pas laisser un ex-codeur amiga et futur auteur de shareware dans la panade sans essayer de réagir, quand même)
[quote]Je ne connais rien au sujet, mais comme les réponses ne sont pas encore nombreuses, je me permets ce petit lien : http://rzr.online.fr/docs/extrusion/00index.htm
On y voit entre autres un code de calcul des normales.
(Je ne vais pas laisser un ex-codeur amiga et futur auteur de shareware dans la panade sans essayer de réagir, quand même)[/quote]Merci pour le lien.
ça ne m’aide pas des masses, car ce qui est expliqué est un calcul “standard” des normales… mais j’apprécie l’effort
Je ne m’attendais pas a avoir 1400 réponses sur ce sujet terriblement précis et spécifique, mais je voulais quand même essayer…
Il y a la page de Paul Bourke sur les format de fichiers, dont lightwave et ses restrictions.
N’ayant jamais eu à le lire, je te refile n’anmoins l’url : http://astronomy.swin.edu.au/~pbourke/geomformats/
en esperant que cela puisse t’aider.
[quote]Il y a la page de Paul Bourke sur les format de fichiers, dont lightwave et ses restrictions. N’ayant jamais eu à le lire, je te refile n’anmoins l’url : http://astronomy.swin.edu.au/~pbourke/geomformats/ en esperant que cela puisse t’aider.[/quote]mmh… je garde l’url dans mes bookmarks. mais ça m’aide pas: le problème n’est pas vraiment lorsque je lit le fichier… c’est ensuite pour le calcul des normales de l’objet selon l’angle entre chaques faces… ainsi que la “trianglisation” des polys qui ont plus de 3 cotés.
Une question en passant : ils sont “plans” tes n-gones ? (c’est comme ca qu’on appels un polygones a n points (un poly donc on connais pas le nombre de points quoi ) ?)
[quote]Une question en passant : ils sont “plans” tes n-gones ? (c’est comme ca qu’on appels un polygones a n points (un poly donc on connais pas le nombre de points quoi ) ?)[/quote]j’ajouterais meme qu’un polygone est un n-gone et que la reciproque est vraie
[quote]Une question en passant : ils sont “plans” tes n-gones ? (c’est comme ca qu’on appels un polygones a n points (un poly donc on connais pas le nombre de points quoi ) ?)[/quote]oui, oui, ils viennent du fichier Lightwave qui fournis que des “n-gones” plans.
un “polygone”, ça ne précise pas le nombre de points non plus? non?
Petit truc rapide pour le calcul d’une triangulation…
Si le n-gon est convexe (normalement, c’est le cas). Calcul du centre de gravite du n-gon, et d’un triangleFan a partir de ce centre
si il est concave, decoupe le en n-gon convexe!
Pour connaitre la convexite d’un n-gon, tu prends le centre de garvite et tu calcule la somme des angles en partant du centre. Exemple, je suis pas tres clair: un n-gon [N1, N2, N3…] et un centre de gravite G. Tu calcule l’angle N1G, N2G, puis N2G,N3G, etc… La somme doit faire 2*PI.
Pour le calcul des normales: Soit un point P, n edges partant de ce point. Tu calcule le produit vectoriel de norme 1 entre les edges qui forment un triangle et tu sommes les vecteurs. Ca te donnera la normale moyenne (normalize la).
[quote]Petit truc rapide pour le calcul d’une triangulation… - Si le n-gon est convexe (normalement, c’est le cas). Calcul du centre de gravite du n-gon, et d’un triangleFan a partir de ce centre - si il est concave, decoupe le en n-gon convexe! Pour connaitre la convexite d’un n-gon, tu prends le centre de garvite et tu calcule la somme des angles en partant du centre. Exemple, je suis pas tres clair: un n-gon [N1, N2, N3…] et un centre de gravite G. Tu calcule l’angle N1G, N2G, puis N2G,N3G, etc… La somme doit faire 2*PI. Pour le calcul des normales: Soit un point P, n edges partant de ce point. Tu calcule le produit vectoriel de norme 1 entre les edges qui forment un triangle et tu sommes les vecteurs. Ca te donnera la normale moyenne (normalize la). Voila, voila…[/quote]pour la triangulation, mes ngones sont concaves a trous. donc ça complique pas mal.
Sinon je comprend bien comment determiner si un poly est convexe ou concave. ok, mais ensuite je fait comment pour le decouper en chtit polys convexes? et je ne pense pas que cet algo fonctionne avec des “ngones a trous”?
Pour les normales: ok je sais comment calculer une normale ma question portait plutot sur la reconstitution des normales depuis un fichier LWO… car lorsqu’on lit un fichier LWO on doit recupere le “smooth angle” dans le fichier et ensuite checker toutes les faces et verifier leur angle l’une par rapport a l’autre pour savoir si on doit faire un angle doux (smooth) ou dur (flat)… j’ai un algo mais il ne marche pas bien, et je me disais que je ne dois quand meme pas etre le premier a vouloir charger un fichier LWO et qu’il existait une methode standard… mais je trouve pas cette methode standard.
enfin bon je vais voir ce que je peux faire avec vos differentes infos…
Apres lecture du format LWO sur http://www.wotsit.org, je n’ai pas
trouve de reference a des polygons concaves a trous. Ca me parait zarbe
comme format d’export…
Enfin, on tu peux toujours regarder les methodes du glu pour les
tesselations de polygon concave a tous (voir le redbook pour plus
d’exemple).
Enfin, j’ai pas tres bien saisi ton histoire de normale et de smoothing
group…
EDIT: ok, j’ai compris que l’angle est un angle max authorise entre 2 polygones pour avoir du smoothing. En calculant la normale des 2 polygones, et le produit scalaire normee, tu calcules le cosinus de l’angle entre les 2. Apres, si on a smoothing, les proints communs auront pour normal la moyenne des normales des edges, sinon, ils sont separes et chaque point a comme normal la normale a son polygone
bon le format LWO peut contenir des polys concaves ça c’est sur. je l’ai vérifié.
Par contre tu me mets le doute sur les trous. Je sais que dans l’editeur de Lightwave tu peux avoir des trous dans tes polys. mais peut etre qu’il les supprimes en exportant… ça faut que je vérifie.
Pour le Glu& Redbook… j’utilise DirectX donc voila c’est rapé.
Pour les normales, laisse tomber… c’est pas clair mon explication, mais faudrais un dessin ou un screenshot pour etre plus clair…
[quote]bon le format LWO peut contenir des polys concaves ça c’est sur. je l’ai vérifié.
Par
contre tu me mets le doute sur les trous. Je sais que dans l’editeur de
Lightwave tu peux avoir des trous dans tes polys. mais peut etre qu’il
les supprimes en exportant… ça faut que je vérifie.
Pour le Glu& Redbook… j’utilise DirectX donc voila c’est rapé.[/quote]
Le GLU est disponible (avec les sources!) gratuitement sur le site de SGI. Tu peux au moins jeter un coup d’oeil a l’algo de tesselation qu’ils proposent…