format de fichier 3D... [Prog, C, 3D] - C++ - Programmation
Marsh Posté le 02-05-2002 à 23:46:41
Salut! 
 
en gros ce que tu veux, c'est du vocab opengl  et surtout des maths de base, je te conseil www.opengl.org, le
 et surtout des maths de base, je te conseil www.opengl.org, le 
site officiel... 
sinon,... 
vertex, c'est un point dans l'espace de coord (x,y,z) 
(c'est grace à eux que tu "dessines" des plans -> ensemble de vertex) 
 
normale, c'est un vecteur perpendiculaire à un plan, qui dit vecteur, 
dit 3 coord (x,y,z), les normales sont les composantes essentielles 
de retitution de la lumiere par un objet. (en optique, les ondes lumineuses 
incidentes, reflechies, refractée sont reférencée par rapport à la normal 
au plan sur lequel est envoyée, l'onde incidente (la source lumineuse)) 
...d'ou l'importance de definir les normales aux plans, les plans  
permettant de creer des objets... 
 
pour definir la normale à un plan, tu dois avoir 2 vertexs de ce  
plan, ensuite tu effectue le produit vectoriel n=v1^v2 pour avoir 
la normale du plan, il faut de plus que la longeur de ta normale 
soit unitaire=> norme(n)=1, pour ca tu divise n par la longueur 
de n.(la norme de n) 
 
Tes objets sont donc constitués de plans, tu peux appliquer une texture 
sur ces plans, en clair une image, pour les habiller, les rendre 
plus realiste, on definit les cordonnees de texture (mapping) par 
les composantes (s,t) par exemple...pour faire simple, si l'on considere 
un carre,(un plan quoi), le coin inf gauche->(0,0) 
    le coin inf droit->(0,1) 
    le coin sup gauche->(1,0) 
           le coin sup droit->(1,1) 
(ca doit etre ca... )
 ) 
si tu passes ces coordonnees, tu recouvrira d'une image, le plan, 
par ex, si tu les x 2, tu auras 4 images (damier) sur le plan, en mode 
repetition...voilà 
 
sinon, un peu de C: 
strcat(chaine,fin) 
permet de concatener chaine+fin dans chaine, donc tu prends 
chaine="fichier" (attention , la taille de chaine suffisante 
pour les deux) 
fin=".obj" et hop... 
 
pour recupere "fichier", tu peux utiliser strncpy, en gros... 
strncpy(chaine,argv[1],long_de_argv[1]-4) 
pour recuper dans chaine, juste "fichier"... 
mais regarde un bon cours de C sur les string... 
 
a+ 
Marsh Posté le 03-05-2002 à 00:02:49
ok merci bien. 
Mais peux tu me dire pourquoi quand je lis un fichier d'un objet 3D (clipart), il y a autant de vertex que de normales ? 
 
et à partir de la lecture d'un fichier 3DS Max, j'obtiens des vertex et des faces, comment je calcule les normales ? 
 
 
et après il y a les textures  
 
Marsh Posté le 03-05-2002 à 00:23:41
Mathematiquement, tu as une normale par face plane, la dir perp 
est la meme pour tous les points de la surface, 
tu est surement dans le cas de surfaces courbes, ou la direction 
de la normale est differente pour chaque pt de la surface, 
une courbe (et a forciori une surface courbe) est constituee de 
plein de petit segment (finement decoupé) pour recree un aspect 
courbe, donc, on peut specifier une normale pour chaque sommet 
(sommets des polygones)... 
en opengl, tu dois assigner les normales aux sommets d'ou le nombre 
identique... 
 
les vecteurs normaux definissent l'orientation de l'objet par ra 
pport aux source lumineuses, en fait, cela va permettre de paramettrer 
la quantite de lum recut a chaque sommet.... 
 
un polygone possede 2 faces, avant et arriere qui peuvent etre 
restituee de maniere differentes... 
pour le calcul des normals utilise les produits vectoriels, une  
recherche sur google t'eclairera (cours de math) 
Marsh Posté le 03-05-2002 à 00:28:19
ReplyMarsh Posté le 03-05-2002 à 00:32:27
| djkurgan a écrit a écrit  : t'es pas couché!!!;-) | 
Non, en ce moment je fais du 12h 4h du mat', c'est pourri, mais bon.
Marsh Posté le 03-05-2002 à 00:33:46
sinon, ca va? 
le stage ca roule? yves m'a dit que tu te prennais la tete... 
Marsh Posté le 03-05-2002 à 00:36:56
Yves est très gentil, mais déjà que je suis pas productif, il vient super souvent pour me tenir compagnie. Remarque j'ai rien contre, on a fait une heure d'aïkido comme ça... Mais mon travail avance peu. En fait en info, quand le profil ingénieur est bien intégré, le DEA c'est nul, et le stage c'est pire. Si tu tiens à rendre un service à Pat', dis lui d'oublier le DEA, si elle en a encore envie, envoie-la sur www.researchindex.com et dit lui qu'elle passera sa vie sur ce site, si elle choisit cette voie.
Marsh Posté le 03-05-2002 à 00:39:48
Ok, de toute facon, elle a plus trop le DEA en tete, ca lui passe 
comme une envie de pissee... 
bon, je vais faire dodo et je lui ferais part de la comission... 
allez a+ et bon courage, j'ai l'adsl, je vadrouillerai peut-etre plus 
souvent sur hardware... 
allez bye! 
Marsh Posté le 03-05-2002 à 00:42:27
| djkurgan a écrit a écrit  : Ok, de toute facon, elle a plus trop le DEA en tete, ca lui passe comme une envie de pissee... bon, je vais faire dodo et je lui ferais part de la comission... allez a+ et bon courage, j'ai l'adsl, je vadrouillerai peut-etre plus souvent sur hardware... allez bye! | 
Passe une bonne nuit, cher ami. Je veille.
Marsh Posté le 04-05-2002 à 15:30:32
Je suis content de voir que t'as retrouvé ton pote mais comment on calcule les normales à partir des vertex ? (pour l'orientation).
Marsh Posté le 04-05-2002 à 15:45:10
| nibbles1 a écrit a écrit  : Je suis content de voir que t'as retrouvé ton pote mais comment on calcule les normales à partir des vertex ? (pour l'orientation). | 
 
 
 
bé, alors : 
 
Pour une face, tu prends les 3 vertex qui la compose(mettons, V1,v2,v3) 
 
tu fais : 
 
v4 = v2 - v1 
v5 = v3 - v1 
 
 
normale = v4 cross v5 
 
normale = normalise(normale) 
 
 
et vala 
 
 
Bon, ensuite si tu veux des normales par vertex (et non par face), tu calcule deja les normales de toute les faces, et ensuite la normale d'un vertex est egal a la moyenne des normales des faces auquel le vertex appartient (:D) 
 
des fois que je suis pas clair 
 
Si un vertex v1 appartient aux faces f1,f2,f4, alors sa normale sera : 
 
(f1.normale+f2.normale+f4.normale)/3 
Marsh Posté le 04-05-2002 à 16:07:38
 c'est bien tout ça, mais moi je récupère tous les vertex puis les faces de façon brute, sans savoir comment ils/elles sont ordonné(e)s. Donc tes v1,v2 et v3, je ne sais pas où les pêcher.
 c'est bien tout ça, mais moi je récupère tous les vertex puis les faces de façon brute, sans savoir comment ils/elles sont ordonné(e)s. Donc tes v1,v2 et v3, je ne sais pas où les pêcher.  
 
Marsh Posté le 04-05-2002 à 16:13:06
| chrisbk a écrit a écrit  : Bon, ensuite si tu veux des normales par vertex | 
 
 
c'est bien ça que je veux. Enfin je pense, car dans un fichier 3DSMAX il y a autant de normales quede vertex. 
 
| chrisbk a écrit a écrit  : (f1.normale+f2.normale+f4.normale)/3 | 
 
 
ça me donnera la norme dela normale ça non ? 
et pour les x,y et z, je fais quoi   ?
 ? 
Marsh Posté le 04-05-2002 à 16:35:00
| nibbles1 a écrit a écrit  :  c'est bien tout ça, mais moi je récupère tous les vertex puis les faces de façon brute, sans savoir comment ils/elles sont ordonné(e)s. Donc tes v1,v2 et v3, je ne sais pas où les pêcher.   | 
 
 
? 
 
les face des .3ds ne sont pas une liste d'index vers des vtx ? 
 
si oui, ben les voila tes v1,v2 et v3 ! 
Marsh Posté le 04-05-2002 à 16:35:43
| nibbles1 a écrit a écrit  : ça me donnera la norme dela normale ça non ? et pour les x,y et z, je fais quoi  ? | 
 
 
 
nope . 
 
la norme de la normale c'est sqrt(x*x + y*y +z*z) 
 
la tu fais la moyenne de 3 normales (deja normées) 
Marsh Posté le 02-05-2002 à 21:30:10
On bosse dur un projet de conversion de format 3D (3dsMAX -> clipart)
le clipart est format propriétaire d'une boîte.
on a des problèmes pour convertir justement.
quelques questions:
1) c'est quoi un vertex (défini par x,y et z trois float) ?
2) c'est quoi une normale (défini par x,y et z trois float) ?
3) comment exprimer une normale en fonction du vertex ?
4) c'est quoi des coordonnées de mapping (défini par x et y deux float) ?
5) comment on les obtient ? calcule ?
6) question plus conne, si on prend en paramètre un fichier "fichier.3ds" (argv[1]), comment obtenir la chaîne de caractère "fichier.obj" ?
---------------
JeanBeulz, chercheur coincheur