This shows you the differences between two versions of the page.
egc:laboratoare:fr:01 [2019/10/03 04:13] alexandru.gradinaru |
egc:laboratoare:fr:01 [2019/10/03 06:46] (current) alexandru.gradinaru |
||
---|---|---|---|
Line 149: | Line 149: | ||
Dans lelaboratoire, le modèle d'application graphique présenté ci-dessus est mis en oeuvre par la classe '' World''. | Dans lelaboratoire, le modèle d'application graphique présenté ci-dessus est mis en oeuvre par la classe '' World''. | ||
- | L'étape 2 est gérée par les instances de InputController, tandis que l'étape 4 est fournie par les variables '' FrameStart () '', '' Update (float deltaTime) '' et '' FrameEnd () '' héritées de la classe 'World'. ''. La classe '' World'' étend déjà '' InputController '' pour faciliter le travail en laboratoire. \\ | + | L'étape 2 est gérée par les instances de InputController, tandis que l'étape 4 est fournie par les variables '' FrameStart () '', '' Update (float deltaTime) '' et '' FrameEnd () '' héritées de la classe '' World ''. La classe '' World'' étend déjà '' InputController '' pour faciliter le travail en laboratoire.\\ |
Tous les laboratoires seront mis en œuvre sur la base de "SimpleScene" qui offre les fonctionnalités suivantes: | Tous les laboratoires seront mis en œuvre sur la base de "SimpleScene" qui offre les fonctionnalités suivantes: | ||
* Scène 3D avec rendu d'un système de référence cartésien en coordonnées OpenGL | * Scène 3D avec rendu d'un système de référence cartésien en coordonnées OpenGL | ||
Line 177: | Line 177: | ||
<note tip>Si vous ne savez pas quoi faire pour une commande particulière ou quels sont les paramètres de la fonction, il est conseillé de consulter la documentation: https://www.opengl.org/sdk/docs/man/ | <note tip>Si vous ne savez pas quoi faire pour une commande particulière ou quels sont les paramètres de la fonction, il est conseillé de consulter la documentation: https://www.opengl.org/sdk/docs/man/ | ||
</note> | </note> | ||
- | La version actuelle de cette norme est la 4.6. Pour le cours EGC, nous utiliserons la norme 3.0 / 3.3, qui est en même temps la version actuelle de la version mobile d’OpenGL, appelée OpenGL ES https: //fr.wikipedia.org/wiki/OpenGL_ES. | + | La version actuelle de cette norme est la 4.6. Pour le cours EGC, nous utiliserons la norme 3.0 / 3.3, qui est en même temps la version actuelle de la version mobile d’OpenGL, appelée OpenGL ES https://fr.wikipedia.org/wiki/OpenGL_ES. |
- | \\ | + | |
Depuis 2016, l'API Vulkan a été lancée. Elle offre un accès bas niveau avancé aux capacités graphiques modernes des processeurs graphiques. La norme Vulkan est orientée vers le développement d’applications hautes performances et sa complexité dépasse de loin les aspects fondamentaux qui seront présentés dans les points suivants: laboratoire / point de rebroussement. | Depuis 2016, l'API Vulkan a été lancée. Elle offre un accès bas niveau avancé aux capacités graphiques modernes des processeurs graphiques. La norme Vulkan est orientée vers le développement d’applications hautes performances et sa complexité dépasse de loin les aspects fondamentaux qui seront présentés dans les points suivants: laboratoire / point de rebroussement. | ||
=== Utiliser l'API === | === Utiliser l'API === | ||
- | Pe parcursul laboratoarelor (dar și a cursului) se va trece prin toate etapele importante ce stau la baza redării grafice. Astfel vor fi învățate concepte precum: | + | Pendant les travaux pratiques (mais également pendant le cours), vous passerez par toutes les étapes importantes qui sont à la base du rendu graphique. Cela enseignera des concepts tels que: |
- | * încărcare și randare de obiecte 3D simple | + | * chargement et rendu d'objets 3D simples |
- | * funcționarea pipeline-ului grafic | + | * opération de pipeline graphique |
- | * vizualizare, proiecție, control camera | + | * visualisation, projection, contrôle de la caméra |
- | * utilizare shadere (vertex și fragment shader) | + | * utiliser des shaders (vertex et fragment shader) |
- | * iluminare | + | * éclairage |
- | * texturare | + | * texture |
- | ==== Cerințe generale de laborator ==== | + | ==== Conditions générales de laboratoire ==== |
- | * Citiți cu foarte mare atenție Framwork-ul de laborator întrucât îl veți utiliza pe tot parcursul laboratorului de EGC inclusiv și la temele de casă | + | * Lisez très attentivement le cadre du laboratoire, car vous l'utiliserez tout au long du laboratoire EGC, y compris les devoirs. |
- | * Citiți comentariile din cod – ar trebui să răspundă la majoritatea întrebărilor pe care le aveți | + | * Lisez les commentaires dans le code - il devrait répondre à la plupart des questions que vous avez. |
- | * Citiți documentația de la [[ https://github.com/UPB-Graphics/Framework-EGC/blob/master/Source/Core/Window/InputController.h | __InputController.h__]] întrucât veți utiliza constant funcțiile din cadrul acestei clase (prin suprascriere) pentru definirea de interacțiuni și comportament personalizat | + | * Lisez la documentation sur [[https://github.com/UPB-Graphics/Framework-EGC/blob/master/Source/Core/Window/InputController.h | __InputController.h__]] car vous utiliserez constamment les fonctions de cette classe (écrasement) pour définir des interactions et un comportement personnalisé |
- | * Dacă nu ințelegeți modelul de funcționare al aplicației rugați asistentul să explice încă o dată cum funcționează toată aplicația | + | * Si vous ne comprenez pas le modèle d'exploitation de l'application, demandez à l'assistant d'expliquer à nouveau comment fonctionne l'application dans son ensemble. |
== C++ == | == C++ == | ||
- | Framework-ul este scris în limbajul C++, ce va fi utilizat pe tot parcursul laboratoarelor. | + | Le framework est écrit en C ++, et sera utilisé dans tous les laboratoires. |
- | Conceptele utilizate în cadrul laboratorului și care trebuie știute sunt: | + | Les concepts utilisés en laboratoire et qui doivent être connus sont: |
- | * concepte de bază de OOP - obiecte, moștenire, metode virtuale, etc | + | * concepts de base de la POO - objets, héritage, méthodes virtuelles, etc. |
- | * utilizarea standard libraries: în special [[http://www.cplusplus.com/reference/vector/vector/ | std::vector]], [[ http://www.cplusplus.com/reference/list/list/ | std::list ]] și [[ http://www.cplusplus.com/reference/unordered_map/unordered_map/ | std::unorderd_map ]] | + | * utiliser des bibliothèques standard: en particulier [[http://www.cplusplus.com/reference/vector/vector/ | std::vector]], [[ http://www.cplusplus.com/reference/list/list/ | std::list ]] et [[ http://www.cplusplus.com/reference/unordered_map/unordered_map/ | std::unorderd_map ]] |
<note tip> | <note tip> | ||
- | Pentru cei mai puțin familiarizați cu limbajul C++ recomandăm să parcurgeți tutoriale: [[http://www.learncpp.com/ | Learn C++ ]] | + | Pour ceux qui sont moins familiers avec C ++, nous vous recommandons de suivre des tutoriels: [[http://www.learncpp.com/ | Learn C++ ]] |
</note> | </note> | ||
== Visual Studio 2017 == | == Visual Studio 2017 == | ||
- | * În cadrul laboratorului vom utiliza [[https://visualstudio.microsoft.com/vs/older-downloads/|Visual Studio 2017 Community Edition]] sau la alegere [[https://www.visualstudio.com/vs/community/|Visual Studio 2019 Community Edition]] (prin conversie de proiect) | + | * En laboratoire, nous utiliserons [[https://visualstudio.microsoft.com/vs/older-downloads/|Visual Studio 2017 Community Edition]] ou à votre choix [[https://www.visualstudio.com/vs/community/|Visual Studio 2019 Community Edition]] (par conversion de projet) |
- | * Installer-ul de Visual Studio vine cu posibilitatea de a instala modular doar ceea ce este necesar. Pentru acest laborator trebuie instalat doar modulul default **Desktop development with C++**, care se regăsește în **Workloads** | + | * Le programme d’installation de Visual Studio offre la possibilité d’installer de manière modulaire uniquement les éléments requis. Pour cet atelier uniquement le module par défaut ** Développement de bureau avec C ++ **, disponible dans ** Workloads ** |
- | * Framework-ul conține deja un proiect preconfigurat pentru Visual Studio 2017 __Framework_EGC.sln__ (folderul [[https://github.com/UPB-Graphics/Framework-EGC/tree/master/Visual%20Studio| /Visual Studio]]) | + | * Le framework contient déjà un projet préconfiguré pour Visual Studio 2017 __Framework_EGC.sln__ (dossier[[https://github.com/UPB-Graphics/Framework-EGC/tree/master/Visual%20Studio| /Visual Studio]]) |
- | * Deschideți soluția în Visual Studio 2017 | + | * Ouvrez la solution dans Visual Studio 2017 |
<note tip> | <note tip> | ||
- | Cei care nu au mai utilizat IDE-ul **Visual Studio** pentru scrierea de aplicații C++ sunt rugați să citească toturialul [[https://msdn.microsoft.com/en-us/library/jj620919.aspx#BKMK_CreateApp | Getting Started with C++ in Visual Studio]] | + | Ceux qui n’ont pas utilisé **Visual Studio** pour écrire des applications C ++ sont invités à lire le fichier Toturial [[https://msdn.microsoft.com/en-us/library/jj620919.aspx#BKMK_CreateApp | Getting Started with C++ in Visual Studio]] |
</note> | </note> | ||
Line 222: | Line 222: | ||
==== GLM ==== | ==== GLM ==== | ||
- | În grafică, matematica este folosită peste tot, de la simple matrici pentru rotații până la integrale infinit dimensionale pentru algoritmii folosiți în industria filmului, de aceea ne dorim să avem un suport de matematică robust, bine documentat și nu în ultimul rând cât mai apropiat de formatul OpenGL. În loc să scriem noi o librărie de matematică vom folosi librăria GLM. GLM ne oferă rotații, translații, vectori de dimensiune 2/3/4, matrici și multe alte funcționalități avansate (e.g. modele de zgomot). Vom folosi doar cele mai simple funcționalități în laboratoarele de la această materie. | + | Dans les graphiques, les mathématiques sont utilisées partout, des simples matrices de rotation aux intégrales infiniment dimensionnelles des algorithmes utilisés dans l'industrie cinématographique. C'est pourquoi nous souhaitons disposer d'un support mathématique robuste, bien documenté et aussi proche de Format OpenGL. Au lieu d'écrire une bibliothèque mathématique, nous utiliserons la bibliothèque GLM. GLM nous fournit des rotations, des translations, des vecteurs de taille 2/3/4, des matrices et de nombreuses autres fonctionnalités avancées (par exemple, des modèles de bruit). Nous n'utiliserons que les fonctionnalités les plus simples dans les laboratoires de ce sujet. |
<code cpp> | <code cpp> | ||
Line 237: | Line 237: | ||
- | ==== Laboratorul 1 ==== | + | ==== Laboratoire 1 ==== |
=== Framework === | === Framework === | ||
- | Framework-ul de laborator se găsește pe [[https://github.com/UPB-Graphics/Framework-EGC | Github]] \\ | + | Le cadre de laboratoire peut être trouvé sur [[https://github.com/UPB-Graphics/Framework-EGC | Github]] \\ |
- | Puteți să descărcați direct arhiva accesând [[https://github.com/UPB-Graphics/Framework-EGC/archive/master.zip | acest link ]] | + | |
+ | Vous pouvez télécharger l'archive directement en y accédant [[https://github.com/UPB-Graphics/Framework-EGC/archive/master.zip | ce lien ]] | ||
- | === Informații laborator === | + | === Informations de laboratoire === |
- | <note important> Sursele ce stau la baza fiecărui laborator se află în directorul: __/Source/Laboratoare/Laborator**N**/__, **N** reprezentând numărul laboratorului. | + | <note important> Les sources sous-jacentes à chaque laboratoire figurent dans le dossier: __/Source/Laboratoare/Laborator**N**/__, **N** représentant le numéro de laboratoire. |
</note> | </note> | ||
- | În cadrul laboratorului 1 puteți încărca modele 3D în cadrul scenei și cere afișarea scenei utilizând funcția | + | Dans le laboratoire 1, vous pouvez télécharger des modèles 3D sur la scène et demander l’affichage de la scène à l’aide de la fonction |
<code cpp> | <code cpp> | ||
RenderMesh(Mesh * mesh, glm::vec3 position, glm::vec3 scale) | RenderMesh(Mesh * mesh, glm::vec3 position, glm::vec3 scale) | ||
</code> | </code> | ||
- | Culorile pixelilor prin care se reprezintă scena sunt salvate într-un buffer, numit Framebuffer. Contextul definit oferă automat un astfel de buffer și este configurat să ruleze cu double-buffering | + | Les couleurs de pixel par lesquelles la scène est représentée sont stockées dans une mémoire tampon appelée Framebuffer. Le contexte défini fournit automatiquement un tel tampon et est configuré pour fonctionner avec une double mise en mémoire tampon. |
- | API-ul OpenGL utilizat în cadrul laboratorului: | + | L'API OpenGL utilisée dans le laboratoire: |
<code cpp> | <code cpp> | ||
- | // defineste un spatiu de desenare in spatiul ferestrei de vizualizare | + | // définit un espace de dessin dans l'espace de la fenêtre |
- | // x, y reprezinta coordonatele coltului stanga jos | + | // x, y représente les coordonnées du coin inférieur gauche |
- | // width, height reprezinta dimensiunea spatiului de desenare. | + | // width, height représente la taille de l'espace de dessin. |
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); | void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); | ||
- | // seteaza culoarea cu care va fi colorat tot ecranul la operatia de clear | + | // Définit la couleur avec laquelle tout l'écran sera coloré lors de l'effacement |
void glClearColor(float r, float g, float b, float a); | void glClearColor(float r, float g, float b, float a); | ||
- | // implementeaza operatia de clear | + | // met en œuvre l'opération d'effacement |
void glClear(GL_COLOR_BUFFER_BIT); | void glClear(GL_COLOR_BUFFER_BIT); | ||
</code> | </code> | ||
<note important> | <note important> | ||
- | Culorile în OpenGL sunt specificate ca float în intervalul 0 - 1 | + | Les couleurs dans OpenGL sont spécifiées en tant que float dans la plage 0 - 1 |
- | Bufferul de culoare utilizat (atât în cadrul laboratorului dar și în mod uzual datorită limitărilor impuse de afișarea pe monitore) este în format RGBA32. Fiecare componentă (red, green, blue, alpha) ocupă 8 biți, deci intervalul 0 – 255. Astfel: \\ | + | Le tampon de couleur utilisé (à la fois dans le laboratoire et généralement en raison de limitations imposées par l'affichage sur le moniteur) est au format RGBA32. Chaque composant (rouge, vert, bleu, alpha) occupe 8 bits, donc la plage 0 - 255. Ainsi: \\ |
- | * roșu (255, 0, 0) este reprezentată ca (1, 0, 0) pe procesorul grafic\\ | + | * le rouge (255, 0, 0) est représenté par (1, 0, 0) sur le processeur graphique\\ |
- | * galben este (1, 1, 0) și tot așa | + | * le jaune est (1, 1, 0) et ainsi de suite |
</note> | </note> | ||
- | == Control aplicație == | + | == Contrôle d'application == |
- | Programul rulat oferă posibilitatea vizualizării scenei create prin intermediul unei camere predefinite. | + | Le programme en cours offre la possibilité de visualiser la scène créée par une caméra prédéfinie. |
<note tip> | <note tip> | ||
- | Taste de control pentru cameră | + | Touches de contrôle pour la caméra |
- | * **W, A, S, D, Q, E** - deplasare față, stânga, spate, dreapta, jos, sus | + | * **W, A, S, D, Q, E** - avant, gauche, arrière, droite, bas, haut |
- | * **MOUSE RIGHT + MOUSE MOVE** - rotație cameră | + | * **MOUSE RIGHT + MOUSE MOVE** - roatation de caméra |
</note> | </note> | ||
- | === Cerințe laborator === | + | === Exigences de laboratoire === |
- | - Descărcați framework-ul, compilați și rulați proiectul | + | - Téléchargez le framework, compilez et exécutez le projet |
- | * Trebuie să deschideți proiectul Framework_EGC.sln (folderul __/Visual Studio__) în Visual Studio 2017 | + | * Vous devez ouvrir le projet Framework_EGC.sln (dossier __/Visual Studio__) avec Visual Studio IDE |
- | - Încărcați un alt model 3D și randați-l în scenă la o poziție diferită față de cele 2 cuburi | + | - Téléchargez un autre modèle 3D et affichez-le dans une position différente de celle des deux cubes. |
- | * __/Resources/Models__ conține o serie de modele 3D ce pot fi încărcate | + | * __/Resources/Models__ contient un certain nombre de modèles 3D pouvant être téléchargés |
- | * În ''Laborator1::Init()'' găsiți modul în care puteți să declarați (și încărcați) un nou obiect de tip ''Mesh'' | + | * Dans ''Laborator1::Init()'' découvrez comment vous pouvez déclarer (et télécharger) un nouvel objet de type ''Mesh'' |
- | - La apăsarea unei taste să se schimbe culoarea de ștergere a ecranului | + | - Appuyer sur une touche change la couleur de la gomme à l'écran |
- | - La apăsarea unei taste să se schimbe obiectul afisat (render) la o poziție (să cicleze prin 3 obiecte, de ex cube, teapot, sphere) | + | - Lorsque vous appuyez sur une touche, modifiez l'objet affiché (rendu) en une position (pour parcourir 3 objets, par exemple un cube, une théière, une sphère - cube, teapot, sphere) |
- | - Să se miște prin spațiu un obiect oarecare la apăsarea tastelor W, A, S, D, E, Q (pozitiv și negativ pe toate cele 3 axe) | + | - Pour déplacer un objet dans l'espace en appuyant sur les touches W, A, S, D, E et Q (positif et négatif sur les 3 axes) |
- | <note important>Citiți cu atenție documentația evenimentelor de input din fișierul ''[[https://github.com/UPB-Graphics/Framework-EGC/blob/master/Source/Core/Window/InputController.h | InputController.h]]'' întrucât le veți utiliza în cadrul fiecărui laborator</note> | + | <note important>Veuillez lire attentivement la documentation des événements saisis dans le fichier ''[[https://github.com/UPB-Graphics/Framework-EGC/blob/master/Source/Core/Window/InputController.h | InputController.h]]'' comme vous les utiliserez dans chaque laboratoire</note> |