Differences

This shows you the differences between two versions of the page.

Link to this comparison view

egc:laboratoare:fr:05 [2019/11/06 21:32]
alexandru.gradinaru created
egc:laboratoare:fr:05 [2019/11/06 21:52] (current)
alexandru.gradinaru
Line 1: Line 1:
-====== ​Laboratorul ​05 ======+====== ​Laboratoire ​05 ======
  
-===== Spațiul Obiect ​=====+===== Espace/​Repère objet =====
  
-Spațiul obiect mai este denumit și **SPAȚIUL COORDONATELOR LOCALE**.+L'​espace objet est également appelé ​**ESPACE DES COORDONNÉES LOCALES**.
  
-Pentru a putea lucra mai eficient și a reutiliza obiectele ​3D definiteîn general fiecare obiect este definit într-un sistem ​de coordonate propriuObiectele simple sau procedurale pot fi definite direct din cod însă majoritatea obiectelor utilizate în aplicațiile ​3D sunt specificate în cadrul unui program ​de modelare precum **3D Studio Max****Maya****Blender** etc. Definind independent fiecare obiect ​3D, putem să îi aplicăm o serie de transformări de rotațiescalare și translație pentru a reda obiectul în scena 3D. Un obiect încărcat poate fi afișat ​de mai multe ori prin utilizarea unor **//​matrici ​de modelare//​**câte una pentru fiecare instanță a obiectului inițialce mențin transformările ​3D aplicate acestor instanțe.+Afin de pouvoir travailler plus efficacement et de réutiliser les objets ​3D définischaque objet est généralement défini dans son propre système ​de coordonnéesLes objets simples ou procéduraux peuvent être définis directement à partir du code, mais la plupart des objets utilisés dans les applications ​3D sont spécifiés dans un programme ​de modélisation tel que 3D Studio Max , Maya , Blender ​etc. En définissant indépendamment chaque objet 3D, nous pouvons appliquer une série ​de transformations rotationnellesscalaires et de translation pour rendre l'​objet dans la scène ​3D. Un objet chargé peut être affiché plusieurs fois à l'​aide ​de matrices ​de modélisation ​une pour chaque instance de l'​objet initialqui conservent les transformations ​3D appliquées à ces instances.
  
-În generalfiecare obiect ​3D este definit cu centrul ​(sau centrul bazei ca în poza de mai josîn originea propriului său sistem ​de coordonatedeoarece în acest fel pot fi aplicate mai ușor transformările ​de modelareAstfelrotația și scalarea față de centrul propriu sunt efectuate întotdeauna față de origine.+En généralchaque objet 3D est défini avec le centre ​(ou le centre ​de la base, comme dans l’illustration ci-dessousà l’origine ​de son propre système de coordonnéesce qui permet d’appliquer plus facilement les transformations ​de modélisationAinsila rotation et la mise à l'​échelle au centre lui-même sont toujours effectuées par rapport à l'origine.
  
  
-===== Spațiul Lume =====+===== Espace/​Repère du monde =====
  
-Spațiul lume sau **SPAȚIUL COORDONATELOR GLOBALE** este reprezentat prin intermediul **//​matricei ​de modelare//​**aceeași despre care s-a vorbit mai susMatricea se obține printr-o serie de **rotații****scalări** și **translații**Prin înmulțirea fiecărui vertex al unui obiect ​(mesh 3D) cu această ​matrice, ​obiectul va fi mutat din spațiul ​local în spațiul lumeadică se face trecerea de la coordonate locale la coordonate globale.+L'​espace mondial ou l'​espace GLOBAL COORDINATES est représenté par la matrice ​de modélisation ​la même que celle mentionnée ci-dessusLa matrice est obtenue par une série ​de rotations ​d' échelles et de translations ​En multipliant chaque sommet d'un objet (maillage ​3D) avec cette matrice, ​l'​objet sera déplacé de l'​espace ​local vers l'​espace mondialc'​est-à-dire le passage des coordonnées locales aux coordonnées globales.
  
-Folosind matrici ​de modelare diferite putem amplasa ​un obiect în scenă de mai multe oriîn locații diferitecu rotație și scalare diferită dacă este necesar. Un exemplu este prezentat în scena de mai jos.+En utilisant différentes matrices ​de modélisation,​ nous pouvons placer ​un objet sur la scène à plusieurs reprisesà différents endroitsavec une rotation et une mise à l'​échelle différentes si nécessaire. Un exemple est présenté dans la scène ci-dessous.
  
 {{ :​egc:​laboratoare:​lab05:​use_model_matrix.png?​500 | World Space }} {{ :​egc:​laboratoare:​lab05:​use_model_matrix.png?​500 | World Space }}
  
-===== Spațiul de Vizualizare ​=====+===== Espace/​Repère du visualisation ​=====
  
-Spațiul ​de vizualizare sau **SPAȚIUL CAMEREI** este reprezentat ​de **matricea de vizualizare**.+L'​espace du visualisation ou l'​espace ​de caméra est représenté par la matrice ​de vue .
  
-Matricea ​de modelare poziționează obiectele în scenăîn spațiul lumeDar o scenă poate fi vizualizată din mai multe puncte ​de vederePentru aceasta există transformarea ​de vizualizare. +La matrice ​de modélisation positionne les objets dans la scènedans l'​espace mondialMais une scène peut être vue de plusieurs points de vuePour cela, il y a la transformation ​de visualisationSi nous avons plusieurs objets dans une scènechaque objet a une matrice de modélisation différente ​(qui le déplace de l'​espace objet vers l'​espace monde), mais tous les objets ont la même matrice de visualisationLa transformation ​de visualisation est définie pour toute la scène.
-Dacă într-o scenă avem mai multe obiectefiecare obiect are o matrice de modelare diferită ​(care l-a mutat din spațiul obiect în spațiul lume), însă toate obiectele au aceeași ​matrice de vizualizareTransformarea ​de vizualizare este definită pentru întreaga scenă.+
  
 {{ :​egc:​laboratoare:​lab05:​word_view_space.png | World Space and View Space}} {{ :​egc:​laboratoare:​lab05:​word_view_space.png | World Space and View Space}}
  
-În spațiul lume camera poate să fie considerată ca un obiect având cele axe locale ​OX, OY, OZ (vezi poza). Matricea ​de vizualizare se poate calcula folosind funcția ''​glm::​lookAt''​.+Dans l'​espace mondial, la caméra peut être considérée comme un objet ayant les axes locaux ​OX, OY, OZ (voir la photo). La matrice ​de visualisation peut être calculée à l'aide de la fonction ​glm::​lookAt.
  
 <code cpp> <code cpp>
Line 37: Line 36:
 \\ \\
  
-Ox,​Oy,​Oz ​sunt axele sistemului ​de coordonate ale lumii (spațiul scenei ​3D). Punctul ​nu este marcat în imagine. +Ox, Oy, Oz sont les axes du système ​de coordonnées du monde (espace de scène ​3D). Le point n'est pas marqué dans l'​image. O'', O'y', O''sont les axes du système ​de coordonnées ​de l'​observateur (l'​espace d'​observation). Le point '​n'​est pas marqué dans l'​image ​(il se trouve à l'​intérieur de la machine).
-Ox,Oy,Oz’ sunt axele sistemului ​de coordonate al observatorului (spațiul ​de vizualizare). Punctul ​O’ nu este marcat în imagine ​(este înăuntrul aparatului).+
  
-Vectorul ​**forward** ​este direcția în care observatorul privește, și este de asemenea normala ​la planul ​de vizualizare ​(planul fiind baza volumului ​de vizualizarece seamănă cu o piramidă și este marcat cu contur portocaliu). Vectorul ​**right** ​este direcția dreapta din punctul ​de vedere al observatoruluiVectorul ​**up** ​este direcția sus din punctul ​de vedere al observatorului.+Le vecteur ​**forward** ​est la direction dans laquelle l'​observateur regarde et est également normal pour le plan de visualisation ​(le plan étant la base du volume ​de visualisationqui ressemble à une pyramide et est marqué d'un contour orange). Le vecteur ​**right** ​est la bonne direction du point de vue de l'​observateurLe vecteur ​**up** ​est la direction ascendante du point de vue de l'​observateur.
  
-În imagineobservatorul este un pic înclinatîn mod intenționatîn jos, față de propriul sistem de axeCând observatorul este perfect aliniat cu axeleright coincide cu +xup coincide cu +y’, iar forward coincide cu -zÎn imaginese poate vedea că up nu coincide cu +yiar forward ​nu coincide cu -z.+Dans l'​imagel'​observateur est légèrement inclinéintentionnellement vers le basvers son propre système d'axesLorsque l'​observateur est parfaitement aligné sur les axesla droite coïncide avec + x 'la haut coïncide avec + y' et l'​avant coïncide avec -z 'Dans l'​imageon peut voir que up ne coïncide pas avec + y 'et que forward ​ne coïncide pas avec -z'.
 </​note>​ </​note>​
  
-Vectorul ​"​up" ​se proiectează în planul ​de vizualizarecu direcția ​de proiecție paralelă cu normala ​la planul ​de vizualizareProiecția acestuia dă direcția axei verticale a planului ​de vizualizare.+Le vecteur ​"​up" ​est projeté dans le plan de visualisationla direction ​de projection étant parallèle à la normalisation par rapport au plan de visualisationSa projection donne la direction de l'axe vertical du plan de visualisation.
  
-În spațiul lume camera poate fi considerată ​un simplu obiect ​3D asupra căruia aplicăm transformările ​de rotație și translațieDacă în spațiul lumecamera poate fi poziționată oriunde și poate avea orice orientare, în spațiul ​de vizualizare ​(spațiul observatorcamera este întotdeauna poziționată în (0,​0,​0) ​și privește în direcția ​OZ negativă.+Dans l'​espace du monde, la caméra peut être considérée comme un simple objet 3D sur lequel nous appliquons les transformations ​de rotation et de translationSi dans l’espace mondialla caméra peut être positionnée n’importe où et dans n’importe quelle orientation. Dans l’espace ​de visualisation ​(la zone d’observation), la caméra est toujours positionnée dans (0,​0,​0) ​et regarde dans la direction ​OZ négative.
  
-Matricea ​de vizualizare conține transformări ​de rotație și translație, la fel ca și matricea ​de modelareDe aceeadacă ținem scena pe loc și mutăm camerasau dacă ținem camera pe loc și rotim/translatăm scenaobținem același efect:+La matrice ​de visualisation contient les transformations ​de rotation et de translationde même que la matrice ​de modélisationPar conséquentsi nous maintenons la scène en place et déplaçons la caméraou si nous tenons la caméra en place et faisons pivoter ​traduire la scènenous obtenons le même effet:
  
 <​note>​ <​note>​
Line 56: Line 54:
 </​note>​ </​note>​
  
-Totușicele două matrici au scopuri diferiteUna este folosită pentru poziționarea obiectelor în scenă, iar cealaltă pentru vizualizarea întregii scene din punctul ​de vedere al camerei.+Cependantles deux matrices ont des objectifs différentsL'un sert à positionner des objets dans la scène et l'​autre à visualiser la scène entière du point de vue de la caméra.
  
 <​note>​ <​note>​
-**Exemplu:** Dacă vrem să ne uităm pe axa **OX**(lumedin poziția ​(3, 5, 7) codul corespunzător pentru funcția ​glm::​lookAt ​este:+ExempleSi nous voulons regarder l’axe ​OX (mondeen position ​(3, 5, 7), le code correspondant à la fonction ​glm :: lookAt ​est:
  
 <code cpp> <code cpp>
Line 66: Line 64:
 </​note>​ </​note>​
  
-===== Spațiul ​de Proiecție ​=====+===== Espace ​de projection ​=====
  
  
-După aplicarea transformării ​de vizualizareîn spațiul ​de vizualizarecamera se află în origine ​și privește înspre **–OZ**Pentru a putea vizualiza pe ecran această informație este necesar să se facă proiecția spațiului vizualizat ​de cameră într-un spațiu ​2D. Cum spațiul vizibil al camerei poate fi de diferite feluri, cel mai adesea trunchi ​de piramida ​(**proiecție perspectivă**sau paralelipiped ​(**proiecție ortografică**), în OpenGL ​este necesară trecerea într-un spațiu ​final numit spațiu ​de proiecție ce reprezintă ​un **//cub//** centrat în origine ​cu dimensiunea ​2, deci coordonatele ​X, Y, Z între ​-1 și +1.+Après avoir appliqué la transformation ​de visualisationdans l’espace ​de visualisationla caméra est à l’origine ​et regarde vers - OZ . Pour pouvoir visualiser ces informations à l'​écran,​ il est nécessaire ​de projeter l'​espace visualisé par la caméra dans un espace ​2D. L'​espace visible ​de la pièce pouvant être de différentes sortes, le plus souvent le tronc pyramidal ​projection en perspective ​ou le parallélipipède ​projection orthographique ​), il est nécessaire de passer à OpenGL ​vers un espace ​final appelé espace ​de projection qui représente ​un cube centré à l'origine ​avec dimension ​2, donc les coordonnées ​X, Y, Z sont comprises entre -1 et +1.
  
-Din spațiul ​de proiecție este foarte ușor matematic să obținem proiecția finală ​2D pe viewport fiind nevoie doar să mapăm informația din cubul [-1,​1] ​scalată corespunzător pe viewport-ul definit de aplicație.+À partir ​de l'​espace de projection, il est très facile d'​obtenir mathématiquement la projection ​2D finale dans la fenêtre, il suffit de mapper les informations du cube [-1,​1] ​à l'​échelle correspondante dans la fenêtre définie par l'​application.
  
-==== Matricea ​de Proiecție ​====+==== Matrice ​de projection ​====
  
-Trecerea din spațiul ​de vizualizare în spațiul ​de proiecție se face tot utilizând o matrice, ​denumită **matrice de proiecție**calculată în funcție de tipul de proiecție definitBiblioteca **GLM** oferă funcții ​de calcul ​pentru cele mai utilizate 2 metode ​de proiecție în aplicațiile ​3D, anumeproiecția **perspectivă** și **ortografică**+Le passage ​de l'​espace ​de visualisation à l'​espace de projection s'​effectue également à l'aide d'​une ​matrice, ​appelée ​matrice de projection ​calculée selon le type de projection définiLa bibliothèque ​GLM offre des fonctions ​de calcul ​pour les deux méthodes ​de projection les plus utilisées dans les applications ​3D, à savoirla projection en perspective et la projection orthographique
  
-Datele ​(vertecșii din spațiul ​de vizualizaresunt înmulțite cu **matricea ​de proiecție** pentru a se obține pozițiile corespunzătoare din spațiul ​de proiecție.+Les données ​(sommets dans l'​espace ​de visualisationsont multipliées par la matrice ​de projection pour obtenir les positions correspondantes dans l'​espace ​de projection.
  
-==== Proiecția Ortografică ​====+==== Projection orthographique ​====
  
-În proiecția ortografică observatorul este plasat ​la infinitDistanța până ​la geometrie nu influențează proiecția și deci nu se poate determina vizibil din proiecțieProiecția ortografică păstrează paralelismul liniilor din scenă.+Dans la projection orthographique,​ l'​observateur est placé à l'​infiniLa distance à la géométrie n'​influence pas la projection et ne peut donc pas être déterminée de manière visible à partir de la projectionLa projection orthographique préserve le parallélisme des lignes de la scène.
  
 {{ :​egc:​laboratoare:​lab05:​ortographic_view.png | Ortographic Projection }} {{ :​egc:​laboratoare:​lab05:​ortographic_view.png | Ortographic Projection }}
  
-Proiecția ortografică este definită ​de lățimea și înălțimea ferestrei ​de vizualizare cât și a distanței ​de vizualizare dintre planul **din apropiere** și planul **din depărtare**În afara acestui volum obiectele nu vor mai fi văzute pe ecran.+La projection orthographique est définie par la largeur et la hauteur ​de la fenêtre ​de visualisation,​ ainsi que par la distance ​de visualisation entre le plan proche et le plan distant ​À part ce volume, les objets ne seront plus visibles à l'​écran.
  
 {{ :​egc:​laboratoare:​lab05:​ortographic_matrix.png | Ortographic Matrix }} {{ :​egc:​laboratoare:​lab05:​ortographic_matrix.png | Ortographic Matrix }}
  
-Matricea ​de proiecție poate fi calculată utilizând funcția ''​glm::​ortho''​ unde punctele **leftrightbottom, top** sunt relative față ​de centrul ferestrei ​(0, 0) și definesc **înălțimea** și **lățimea ferestrei ​de proiecție**+La matrice ​de projection peut être calculée à l'aide de la fonction ​glm::​ortho ​où les points gauchedroitbas et haut sont relatifs au centre ​de la fenêtre ​(0, 0) et définissent la hauteur et la largeur de la fenêtre ​de projection.
  
 <code cpp> <code cpp>
Line 95: Line 93:
 </​code>​ </​code>​
  
-==== Proiecția Perspectivă ​====+==== Projection perspective ​====
  
-Proiecția perspectivă este reprezentată de un trunchi ​de piramidă ​(frustumdefinit prin cele planuri**cel din apropiere** și **cel din depărtare**cât și de deschiderea unghiurilor de vizualizare pe cele axe, OX și OY. În proiecția perspectivă distanța până ​la un punct din volumul ​de vizualizare influențează proiecția.+La projection perspective est représentée par un tronc de pyramide ​(troncdéfini par les plansle plus proche et le plus éloigné ​ainsi que par l'​ouverture des angles ​de vision sur les axes, OX et OY. Dans la projection en perspective,​ la distance jusqu’à ​un point du volume ​de visualisation influence la projection.
  
 {{ :​egc:​laboratoare:​lab05:​perspective_view.png | Perspective View }} {{ :​egc:​laboratoare:​lab05:​perspective_view.png | Perspective View }}
  
-Matricea ​de proiecție în acest caz poate fi calculată cu ajutorul funcției ''glm::perspective'' ce primește ca parametri deschiderea unghiului ​de vizualizare pe orizontală ​(**Field of View - FoV**), raportul dintre lățimea și înălțimea ferestrei ​de vizualizare ​(**aspect ​ratio**), cât și distanța până ​la cele planuri ​zFar și zNear.+Dans ce cas, la matrice ​de projection peut être calculée à l'aide de la fonction ​glm::perspectivequi reçoit comme paramètres l'ouverture du champ de vision ​( FoV ), le rapport entre la largeur et la hauteur ​de la fenêtre de visualisation ​rapport d'aspect ), ainsi que la distance jusqu'​à ​2. Plans zFar et zNear.
  
 {{ :​egc:​laboratoare:​lab05:​perspective_matrix.png | Perspective Matrix }} {{ :​egc:​laboratoare:​lab05:​perspective_matrix.png | Perspective Matrix }}
  
-În cazul proiecției perspectivădupă înmuțirea coordonatelor din spațiul viewcomponenta w a fiecărui vertex este diferităceea ce înseamnă că spațiul ​de proiecție nu e același pentru fiecare vertexPentru a aduce toți vectorii în același spațiu se împarte fiecare componentă a vectorului rezultat cu **componenta ​w**Această operație este realizată automat de procesorul graficîn cadrul unei aplicații fiind nevoie doar de înmulțirea cu matricea ​de proiecție.+Dans le cas de la projection en perspectiveaprès avoir adouci les coordonnées dans l'​espace de visionla composante de chaque sommet est différente, ce qui signifie que l'​espace ​de projection n'est pas le même pour chaque sommetPour amener tous les vecteurs dans le même espace, divisez chaque composante du vecteur résultant par la composante ​w . Cette opération est effectuée automatiquement par le processeur graphiquedans une application ne nécessitant que la multiplication par la matrice ​de projection.
  
  
 {{ :​egc:​laboratoare:​lab05:​perspective_correction.png | Normalized Device Coordinate Space }} {{ :​egc:​laboratoare:​lab05:​perspective_correction.png | Normalized Device Coordinate Space }}
  
-Volum de vizualizare perspectivă ​(**stânga**și rezultatul obținut ​(**dreapta**în urma aplicării transformării ​de proiecție asupra geometriei din scenă+Volume ​de la vue en perspective ​(à gauche ​et résultat obtenu ​(à droite ​suite à l'​application ​de la transformation de projection à la géométrie de la scène
  
-===== Spațiul Coordonatelor ​de Dispozitiv Normalizate ​(NDC) =====+===== Espace ​de coordonnées de périphérique normalisé ​(NDC) =====
  
-După aplicarea transformărilor de **Modelare****Vizualizare** și **Proiecție** iar apoi **divizarea cu W** a vectorilorse obține spațiul ​de coordonate normalizate ​(**NDC**reprezentat de un CUB centrat în origine (0, 0, 0) cu latura ​2. Informația din acest cub se poate proiecta foarte ușor pe orice suprafață ​2D de desenare definită de utilizator.+Après application des transformations Modélisation , Visualisation et Projection ​puis en divisant les vecteurs par W , nous obtenons l’espace ​de coordonnées normalisé ​( NDC ) représenté par un CUB centré à l’origine (0, 0, 0) avec la face 2. Les informations contenues dans ce cube peuvent être: projetez facilement sur toute surface de dessin ​2D définie par l'​utilisateur.
  
 {{ :​egc:​laboratoare:​lab05:​NDC.png | Normalized Device Coordinate Space }} {{ :​egc:​laboratoare:​lab05:​NDC.png | Normalized Device Coordinate Space }}
  
-Exemplu rezultat al proiecției în coordonate dispozitiv normalizate ​(**NDC**). Proiecție **ortografică** ​(stânga), **perspectivă** ​(dreapta)+Exemple de résultat de la projection en coordonnées d'​appareil normalisées ​( NDC ). Projection orthographique ​(à gauche), perspective ​(à droite)
  
 {{ :​egc:​laboratoare:​lab05:​NDC2.png?​700 | Normalized Device Coordinate Space }} {{ :​egc:​laboratoare:​lab05:​NDC2.png?​700 | Normalized Device Coordinate Space }}
  
-Exemplu vizualizare **spațiu ​NDC** din direcția camerei ​(**stânga**și **proiecția** corespunzătoare pentru un anumit viewport ​(**dreapta**)+Exemple de vue de l' espace ​NDC à partir de la direction de la caméra ​(à gauche ​et de la projection correspondante pour une fenêtre particulière ​(à droite ​)
  
 +===== Application des transformations de modélisation,​ de visualisation et de projection =====
  
-===== Aplicarea Transformărilor ​de ModelareVizualizare și Proiecție ===== +Les transformations ​de modélisation, de visualisation et de projection s’appliquent en multipliant chaque sommet de la géométrie de la scène par les matrices calculées.
- +
-Aplicarea trasformărilor ​de **Modelare, Vizualizare și Proiecție** se face prin înmulțirea fiecărui vertex al geometriei din scenă cu cele matrici calculate.+
  
 <code cpp> <code cpp>
Line 134: Line 131:
  
 <​note>​ <​note>​
-În cadrul laboratorului trebuie doar să calculăm aceste matrici și să le trimitem ca parametru funcției ​de randare ''​RenderMesh''​Înmulțirile respective sunt executate pe procesorul grafic în cadrul programului ​vertex shader ​ce va fi introdus începând cu laboratorul următor.+En laboratoire,​ il suffit ​de calculer ces matrices et de les envoyer en tant que paramètre à la fonction de rendu RenderMesh. ​Les multiples respectifs sont exécutés sur le processeur graphique dans le programme ​vertex shader ​qui sera introduit à partir du prochain laboratoire.
 </​note>​ </​note>​
  
-===== Transformări ​de Cameră ​=====+===== Transformations ​de la caméra ​=====
  
-Implementarea unei camere în cadrul unei aplicații ​3D depinde ​de cerințele aplicațieiÎn practică cele mai utilizate tipuri ​de implementări de cameră sunt**First person** și **Third person**.+L'​implémentation d'une caméra dans une application ​3D dépend des exigences ​de l'​applicationDans la pratique, les types d’implantation ​de salles les plus utilisés sont les suivantspremière personne et troisième personne ​.
  
 ==== First-person Camera ==== ==== First-person Camera ====
  
-Camera de tipul **First-person** presupune faptul că scena 3D este vizualizată din perspectiva ochilor unui observator, adesea umanConstrângerile de implementare sunt următoarele:+La caméra à la première personne suppose que la scène ​3D est vue à partir des yeux d'un observateur souvent humainLes contraintes d'​implémentation sont les suivantes:
  
-=== Translația camerei First-person ​===+=== Translation de caméra à la première personne ​===
  
-  * translațiile **față/spate** se calculează utilizând vectorul **forward** ​(direcția ​de vizualizare sau proiecția acestuia în planul orizontal ​XOZ) +  * les translations avant arrière sont calculées à l'aide du vecteur avant (la direction ​de visualisation ou sa projection dans le plan horizontal ​XOZ) 
-  * translațiile sus/jos se calculează utilizând vectorul ​local Up sau cel mai adesea **direcția ​OY globală** ​(''​glm::​vec3(0,​ 1, 0)''​+  * les traductions up down sont calculées à l'aide du vecteur ​local Up ou le plus souvent de la direction globale ​OY ( glm::​vec3(0,​ 1, 0)) 
-  * translațiile dreapta/stânga se calculează folosind vectorul local **right** ​(ce se poate obține și prin operația ​de **cross product** între vectorii **forward** și **up**sau folosind proiecția acestuia pe planul orizontal **XOZ**+  * traductions du droit gauche vecteur est calculé à partir du coin droit (qui peut être obtenu par le fonctionnement du produit vectoriel entre les vecteurs ​de l'​avant et vers le haut ou avec sa projection sur le plan horizontal xOz
  
 <code cpp> <code cpp>
Line 155: Line 152:
 </​code>​ </​code>​
  
-=== Rotația camerei First-person ​===+=== Rotation de la caméra à la première personne ​===
  
-  * rotațiile se fac păstrând observatorul pe loc și modificând direcția în care privește acesta +  * les rotations sont effectuées en maintenant l'​observateur en place et en changeant la direction dans laquelle il est concerné 
-  * pentru rotația **stânga/dreapta**vectorii **forward** respectiv **right** se pot calcula prin aplicarea transformării ​de rotație în jului axei OY globaleSe poate roti și în jurul axei **OY locale** ​(**vectorul up**), însă în general nu prea are aplicabilitate practică +  * pour la rotation gauche ​droite ​les vecteurs avant et droit peuvent être calculés en appliquant la transformation ​de rotation à l'​axe ​OY globalIl peut également être pivoté autour de l'​axe ​OY local vecteur haut ), mais en général, il est peu applicable dans la pratique. 
-  * **vectorul up** se poate recalcula folosind **cross product** între **right** și **forward**+  * le vecteur haut peut être recalculé en utilisant le produit croisé entre droite et avant
 <code cpp> <code cpp>
 forward = RotateWorldOY(angle) * forward; forward = RotateWorldOY(angle) * forward;
Line 166: Line 163:
 </​code>​ </​code>​
  
-  * rotația **sus/jos** se poate face rotind vectorii **forward** respectiv **up** în jurul vectorului **axei ​OX** adică ** vectorul right** ​(right rămâne ​constant)+  * la rotation haut bas peut être effectuée en faisant pivoter les vecteurs avant et haut autour du vecteur axe OX, c’est-à - dire le vecteur droit (le droit reste constant)
 <code cpp> <code cpp>
 forward = RotateLocalOX(angle) * forward; forward = RotateLocalOX(angle) * forward;
Line 173: Line 170:
  
 <note tip> <note tip>
-Matricile ​de rotație necesare se pot calcula folosind funcția ​''​glm::​rotate''​+Les matrices ​de rotation requises peuvent être calculées à l'aide de la fonction ​''​glm::​rotate''​
  
 <code cpp> <code cpp>
Line 179: Line 176:
 </​code>​ </​code>​
  
-  * primul parametru reprezintă o **matrice de modelare** asupra căreia aplicăm transformarea specificatăAtunci când nu avem o transformare precedentă se pornește ​de la matricea identitate ''​glm::​mat4(1.0f)'' ​\\  +  * le premier paramètre représente une matrice de modélisation sur laquelle nous appliquons la transformation spécifiéeQuand on n'a pas de transformation précédente,​ on part de la matrice identité ​glm::​mat4(1.0f) \\  
-  ​* **rotationAxis** este axa față de care rotimÎn cazul nostru pentru rotația față de **OX** este vectorul **right**pentru rotația față de **OZ** este vectorul **forward**,​ sau ''​glm::​vec3(0,​ 1, 0)''​ pentru rotația față de **OY global** \\  +  * rotationAxis ​est l'axe vers lequel nous tournonsDans notre cas, rotation avec OX est le bon vecteur ​rotation avec OZ est le vecteur direct ou glm::​vec3(0,​ 1, 0)rotation avec OY global\\  
-  * întrucât vectorii utilizați sunt ''​glm::vec3''​ când facem înmulțirea va trebui să construim ​un vector de componente ca să putem înmulți cu matricea de 4x4Puteți construi vectorul astfel: \\+  * Étant donné que les vecteurs utilisés correspondent ​glm::vec3à la multiplication,​ nous devrons construire ​un vecteur à 4 composantes pour pouvoir le multiplier par la matrice 4 × 4. Vous pouvez construire le vecteur comme suit: \\
 <code cpp> <code cpp>
 glm::vec3 forward = ... glm::vec3 forward = ...
 glm::vec4 newVec = glm::​vec4(forward,​ 1.0); glm::vec4 newVec = glm::​vec4(forward,​ 1.0);
 </​code>​ </​code>​
-  * Dacă vrem să rotim vectorul ​"forward" ​în jurul **axei ​OY globale** atunci facem astfel:+  * Si nous voulons faire pivoter le vecteur ​"en avant" ​autour de l' axe OY global, nous le faisons:
 <​code>​ <​code>​
  
Line 200: Line 197:
  
 <note important>​ <note important>​
-După ce ați făcut calculele ​de rotație aveți grijă să păstrați vectorii normalizați+Après avoir effectué les calculs ​de rotation, assurez-vous de garder les vecteurs normalisés.
 <code cpp> <code cpp>
 glm::vec3 vector = ... glm::vec3 vector = ...
Line 209: Line 206:
 ==== Third-person Camera ==== ==== Third-person Camera ====
  
-În cazul camerei ​de tip Third-person **observatorul** ​se mută în jurul unui obiect de interesce reprezintă întotdeauna centrul atențieiDeci rotațiile ​se fac într-un mod diferit+Dans le cas d'une caméra ​de type 3ème personne, l' observateur ​se déplace autour d'un objet d'​intérêtqui représente toujours le centre de l'​attentionDonc, les rotations ​se font de manière différente
  
-=== Rotația Camerei Third-person ​===+=== Rotation à la troisième personne ​===
  
-  * se translatează observatorul pe direcția ​de vizualizare în punctul de interes ​(target) +  * l'​observateur est traduit dans le sens de la visualisation au point d'​intérêt ​(target) 
-  * se aplică rotația de tip **First-person** specifică +  * la rotation spécifique à la première personne est appliquée 
-  * se traslatează observatorul înapoi pe noua direcție de vizualizare cu aceeași distanță+  * ramener l'​observateur dans la nouvelle direction d'​observation à la même distance
  
 <note important>​ <note important>​
-În laborator aveți variabila ​distanceToTarget ​care reține distanța până ​la punctul față de care rotim+Dans le laboratoire,​ vous avez la variable ​distanceToTarget ​qui maintient ​la distance jusqu'​au point où nous faisons pivoter
 </​note>​ </​note>​
  
  
-=== Translația Camerei ​Third-person ===+=== La translation du caméra ​Third-person ===
  
-Poziția camerei depinde ​de poziția punctului ​de interesAstfelmișcarea punctului ​de interes va  determina și translația camerei în mod corespunzător.+La position ​de la caméra dépend ​de la position du point d'​intérêtAinsile mouvement du point d’intérêt déterminera également la traduction ​de la caméra en conséquence.
  
-===== Cerințe laborator ​=====+===== Exercices ​=====
  
-  - Descarcăți ​[[https://​github.com/​UPB-Graphics/​Framework-EGC/​archive/​master.zip|framework-ul de laborator]] +  - Télécharger ​[[https://​github.com/​UPB-Graphics/​Framework-EGC/​archive/​master.zip|le framework de laboratoire]] 
-  - Să se implementeze camera de tip First Person ​(fișierul __LabCamera.h__+  - Implémenter la caméra à la première personne ​(fichier LabCamera.
-  - Să se implementeze camera de tip Third Person ​(fișierul __LabCamera.h__)  +  - Implémenter la caméra à la troisième personne ​(fichier LabCamera.
-  - Să se completeze funcțiile ​de translație ale camerei din ''​Laborator5::​OnInputUpdate()''​ +  - Compléter les fonctions de translation de la caméra ​de Laborator5::​OnInputUpdate() 
-  - Să se completeze funcțiile ​de rotație ale camerei din ''​Laborator5::​OnMouseMove()''​ +  - Compléter les fonctions de rotation de la caméra à partir ​de Laborator5::​OnMouseMove() 
-  - Să se deseneze încă ​obiecte în scena 3D având rotația/scalarea/translația diferite +  - Dessinez ​autres objets dans la scène ​3D avec une rotation ​mise à l'​échelle ​translation différente 
-    * aveți grijă să setați matricea ​de modelare ​de fiecare dată înainte ​de desenare +    * assurez-vous ​de définir la matrice ​de modélisation à chaque fois avant de dessiner 
-    * utilizați ​''​glm::​translate()'',​ ''​glm::​rotate()'' ​și ''​glm::​scale()'' ​pentru a construi o matrice de modelare pentru fiecare obiect +    * utiliser ​''​glm::​translate()'',​ ''​glm::​rotate()'' ​et ''​glm::​scale()'' ​pour construire une matrice ​pour chaque modélisation ​de l'​objet 
-  - Schimbare proiecție perspectivă/ortografică +  - Changer de perspective ​projection orthographique 
-    * **tasta ​O** face trecerea în proiecție ortografică +    * la touche ​permet de passer à la projection orthographique 
-    * **tasta ​P** face trecerea în proiecție perspectivă +    * la touche ​permet de passer à la projection en perspective 
-  - Să se modifice ​FoV-ul camerei în cazul proiecției persepective +  - Changer le FoV de la caméra dans le cas de la perspective de projection 
-    * folosiți ​taste pentru a modifica pozitiv și negativ ​FoV-ul +    * Utilisez ​touches pour changer le FoV positif et négatif 
-    * se va folosi ''​OnInputUpdate()''​ +    * sera utilisé ​OnInputUpdate() 
-  - Să se modifice lățimea și/sau înălțimea ferestrei ​de proiecție în cazul proiecției ortografice +  - Changer la largeur et ou la hauteur ​de la fenêtre de projection dans le cas de la projection orthographique 
-    * se va folosi ''​OnInputUpdate()''​+    * sera utilisé ​OnInputUpdate()
  
  
  
  
egc/laboratoare/fr/05.1573068732.txt.gz · Last modified: 2019/11/06 21:32 by alexandru.gradinaru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0