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
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.
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