.un exemple3d en OPENGL pour c++
La conversion vers la 3D est un
véritable défi pour un programmeur, car a moins dutiliser
un moteur 3D déjà prés, cela demande une très bonne maîtrise
des mathématiques et un parfait sens de la logique et de
lobservation, mais on peut résumer ce changement
par utilisation de 3 coordonnés à la place de 2 pour la
2D (X,Y)à(X,Y,Z) serte cela va causer dautre
changement quon va découvrir.
Avant on désignait un plan par 3 points de 2 coordonnés dans la 2D et pour la 3D on va faire de même par 3 points de 3 coordonnés afin de former un plan dans lespace ou ce quon appellera plus tard une face ou un triangle dan lespace. Cette facette se révèle être le noyau de tout objet 3D. Une face se compose comme on la déjà dit de 3 points (X,Y,Z) (on peut dire 3 vertex) afin de déterminer sa position dans lespace mais afin daméliorer le rendu on a introduit dans la 3D le calcule de leffet de la lumière sur cette facette pour cela on affect a chaque vertex 3 autre coordonnés appelé les normales, on a aussi ajouté les propriétés du matériel utiliser par cette facette qui se résume par 3 propriétés en RGB diffuse(la couleur du matériel ou de la face), ambiant(couleur ambiante du matériel), specular(couleur de la réflexion de la lumière sur le matériel).Facultativement on conte aussi la propriété BLEND qui défini lopacité de la facette (la transparence). Enfin 3 autres coordonnés (3 points de 2 coordonnés (X,Y) ) afin de définir la position de la texture dan la facette.
Résumé en image :
VERTEX: 3 points
(x,y,z)............................................................
NORMALES:3 vecteurs(A,B,C)
Le vecteur normales est un vecteur perpendiculaire par rapport à la face afin de le calculer en trouve tout simplement léquation Ax+By+Cz+D=0 de la face et le vecteur normales sera VEC(A,B,C) ou -1<A,B,C<1 pour cela on convertis le vecteur en un vecteur unitaire.Pour le lissage on affect a chaque vertex un vecteur normales pour cela on calcule la moyenne de tous les vecteurs des face attacher ou qui utilise un même vertex par exemple :VEC((A1+A2)/2,(B1+B2)/2,(C1+C2)/2) si 2 face A1x+B1y+C1z+D1=0 A2x+B2y+C2z+D2=0 utilise un même vertex.
.................
Les coordonnés texture:3 points(x,y)
La texture est une image que lon applique sur un objet3D(ou une face).Un coordonnés texture set un point(x,y) dont x,y des nombres réels ou 0<x<1 et 0<y<1 si par exemple x=5.6 la valeur qui sera tenu en compte sera x=(x-entier(x))=(5.6-5)=0.6 et ces coordonnés serviront à définir lemplacement de la texture dans la face comme des épingle.
.............
Il existe des multitudes de logiciel de dessin 3D comme MAYA, Amapi3D, 3DstudioMax et sont extension CharacterStudio pour animer des personnages 3D,Poserpour le dessin des personnages.
Leur principe est dinsérer des objets et de les modéliser, ajouter des effets spéciaux(feux, eau ) et de crée des animations 3D ou des objets 3D (*.3ds, *.dxf ) qui peuvent servir pour dautre logiciel (exportation) ou à des jeux.
Pour la programmation 3D (jeux, logiciel..) presque tous les langages de programmation sont bon (Basic, c++, Delphi) mais je vous conseille largement le visuel c++ 5 ou supérieur un peut compliqué mais efficace. Il existe des fichiers *.dll dans Windows qui contienne des moteurs 3D comme OPENGL, DIRECTX, qui utilise la carte graphique afin de dessiner des objets 3D et les animer. Si vous navez pas une puissante carte graphique il existe des moteurs 3D software qui nutilise que les ressource soft comme FastGraph et dautre mais si vous voulez vous dresser les cheveux sur la tête vous pouvait créer votre propre moteur 3D (trop de temps, détude, de réflexion, de calcule mathématique ) vous pouvait utiliser les ressource software GDI (GDI32.DLL) qui dessine a la base des objet 2D mais vous pouvait lutiliser pour la 3D en programmant les propriété que nous avons vu (vertex, normales, coordonnés texture, matériel, rotation3D ) jais essayer cest plutôt long mais le résultat est fantastique (moteur 3d 100% personnaliser+ vertex, normales, coordonnés texture, matériel, rotation3D+gestion des ambre +brouillard )
1.equation d'un plan dans l'espace:
pour 3 VERTEXS P1(x1,y1,z1), P2(x2,y2,z2) , P3(x3,y3,z3).
3 vecteurs VEC1(A1,B1,C1)=(x2-x1,y2-y1,z2-z1)
................VEC2(A2,B2,C2)=(x3-x1,y3-y1,z3-z1)
................VEC3(A3,B3,C3)=(X-x1,Y-y1,Z-z1)
le determinant des 3 vecteur est NULL.
|X-x1...Y-y1...Z-z1|
|A2......B2......C2...|
|A3......B3......C3...|=(X-x1)*(B2*C3-B3*C2)-(Y-y1)*(A2*C3-A3*C2)+(Z-z1)*(A2*B3-A3*B2)
..............................=A*X+B*Y+C*Z+D=0 (aprés calcule)
2.Vecteur unitair dans l'espace:
pour un vecteur VEC(A,B,C)
LNG= racine²(A²+B²+C²)
A=A/LNG
B=B/LNG
C=C/LNG
3.Rotation dans l'espace:
un vertex P(x,y,z) effectue une rotation de N degré autour PR(a,b,c) par raport:
(x,y): X=(x-a)*cos(N)-(y-b)*sin(N)+a
........Y=(x-a)*sin(N)+(y-b)*cos(N)+b
(z,y): Z=(z-c)*cos(N)-(y-b)*sin(N)+c
........Y=(z-c)*sin(N)+(y-b)*cos(N)+b
(x,z): X=(x-a)*cos(N)-(z-c)*sin(N)+a
........Z=(x-a)*sin(N)+(z-c)*cos(N)+c