This shows you the differences between two versions of the page.
|
pgapi:laboratoare:01 [2025/09/29 18:12] andrei.lambru |
pgapi:laboratoare:01 [2025/12/03 10:16] (current) andrei.lambru |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Laboratorul 01 ====== | ====== Laboratorul 01 ====== | ||
| + | <hidden> | ||
| ===== Framework laborator ===== | ===== Framework laborator ===== | ||
| Framework-ul de laborator este cel de la EGC, îmbogățit cu noi funcționalități. Pentru cei care doresc, conținutul laboratoarelor de EGC se poate găsi în [[:pgapi:recapitulare]]. | Framework-ul de laborator este cel de la EGC, îmbogățit cu noi funcționalități. Pentru cei care doresc, conținutul laboratoarelor de EGC se poate găsi în [[:pgapi:recapitulare]]. | ||
| Line 6: | Line 7: | ||
| Framework-ul de laborator se găsește pe [[https://github.com/UPB-Graphics/gfx-framework | Github]] \\ | Framework-ul de laborator se găsește pe [[https://github.com/UPB-Graphics/gfx-framework | Github]] \\ | ||
| Puteți să descărcați direct arhiva accesând [[https://github.com/UPB-Graphics/gfx-framework/archive/refs/heads/master.zip | acest link ]] | Puteți să descărcați direct arhiva accesând [[https://github.com/UPB-Graphics/gfx-framework/archive/refs/heads/master.zip | acest link ]] | ||
| + | </hidden> | ||
| ===== Obiecte de tip framebuffer și umbre ===== | ===== Obiecte de tip framebuffer și umbre ===== | ||
| Line 11: | Line 13: | ||
| ==== Introducere ==== | ==== Introducere ==== | ||
| - | În acest laborator, vom introduce atât elemente noi de OpenGL, cât și o abordare pentru calcularea umbrelor realizate de iluminarea unei surse de lumină de tip spot. Metoda prezentată aici se numeste //metoda mapării umbrelor//, întâlnită în engleză sub numele de //shadow mapping//, ce a fost prezentată în cadrul cursului de EGC din anul III. Va recomandăm să revizualizați secțiunea despre [[:pgapi:recapitulare#introducere1 | texturi]] din pagina de [[:pgapi:recapitulare]]. Această recomandare reapare mai jos în pagină, acolo unde noțiunile de la EGC sunt explicit necesare. | + | În acest laborator, vom introduce atât elemente noi de OpenGL, cât și o abordare pentru calcularea umbrelor realizate de iluminarea unei surse de lumină de tip spot. Metoda prezentată aici se numește //metoda mapării umbrelor//, întâlnită în limba engleză sub numele de //shadow mapping//, ce a fost prezentată în cadrul cursului de EGC din anul III. Vă recomandăm să revizualizați secțiunea despre [[:pgapi:recapitulare#introducere1 | texturi]] din pagina de [[:pgapi:recapitulare]]. Această recomandare reapare mai jos în pagină, acolo unde noțiunile de la EGC sunt explicit necesare. |
| Prima parte a laboratorului se concentrează doar pe descrierea obiectelor de tip framebuffer. Partea a doua reia sumar metoda mapării umbrelor și oferă mai multe detalii doar despre pașii tehnicii, ce țin de utilizarea obiectelor de tip framebuffer. | Prima parte a laboratorului se concentrează doar pe descrierea obiectelor de tip framebuffer. Partea a doua reia sumar metoda mapării umbrelor și oferă mai multe detalii doar despre pașii tehnicii, ce țin de utilizarea obiectelor de tip framebuffer. | ||
| Line 17: | Line 19: | ||
| ==== Obiecte de tip framebuffer ==== | ==== Obiecte de tip framebuffer ==== | ||
| - | Redarea scenei în fereastra de desenare se realizează, de fapt prin redarea scenei într-o textură specială, ce este afișată ulterior în fereastră. API-ul grafic OpenGL nu permite desenarea direct într-o textură, ci impune utilizarea unui obiect suplimentar, numit buffer de cadru sau framebuffer. Acest obiect conține: | + | Redarea scenei în fereastra de desenare se realizează, de fapt, prin redarea scenei într-o textură specială, ce este afișată ulterior în fereastră. API-ul grafic OpenGL nu permite desenarea direct într-o textură, ci impune utilizarea unui obiect suplimentar, numit buffer de cadru sau framebuffer. Acest obiect conține: |
| - | * **Texturile cu format de culoare în care se redă scena**. Pot să fie mai multe texturi pe care se desenează, până la un număr limită dat de procesorul grafic, care este în general 8. În laboratorul 6 o să vedem aplicații pentru care este necesară desenarea în mai multe texturi. Putem să ne gândim la o textură ca la o structură de date în care păstrăm informație oarecare, nu doar culoare. De exemplu: putem păstra poziția în spațiul lume a fragmentului, obținută prin interpolare între vârfuri, sau vectorul normal în spațiul lume al fragmentului, obținut prin același proces de interpolare. | + | * **Texturile cu format de culoare în care se redă scena**. Pot să fie mai multe texturi pe care se desenează, până la un număr limită dat de procesorul grafic, care este în general 8. În laboratorul următor o să vedem aplicații pentru care este necesară desenarea în mai multe texturi. Putem să ne gândim la o textură ca la o structură de date în care păstrăm informație oarecare, nu doar culoare. De exemplu: putem păstra poziția în spațiul lume a fragmentului, obținută prin interpolare între vârfuri, sau vectorul normal în spațiul lume al fragmentului, obținut prin același proces de interpolare. |
| - | * **Textura în care se păstrează informația de adâncime** a fragmentelor desenate în texturile cu format de culoare. Această informație este utilizată în pasul de test de adâncime din procesul de rasterizare. | + | * **Textura în care se păstrează informația de adâncime** a fragmentelor desenate în texturile cu format de culoare. Această informație este utilizată în pasul din procesul de rasterizare în care se realizează de testul de adâncime. |
| === Crearea obiectelor de tip framebuffer === | === Crearea obiectelor de tip framebuffer === | ||
| Line 102: | Line 104: | ||
| </code> | </code> | ||
| - | După cum s-a menționat mai sus, putem avea mai multe texturi cu format de culoare atașate unui framebuffer. Acest mecanism va fi prezentat în detaliu în laboratorul 6. Dar, ca o previzualizare a informației din acel laborator, codul de mai jos scrie în 4 texturi diferite, de tipuri diferite și se poate observa că textura din atașamentul de culoare numărul 0 este complet roșie, iar cea din atașamentul de culoare numărul 1 este complet albastră. | + | După cum s-a menționat mai sus, putem avea mai multe texturi cu format de culoare atașate unui framebuffer. Acest mecanism va fi prezentat în detaliu în laboratorul 2. Dar, ca o previzualizare a informației din acel laborator, codul de mai jos scrie în 4 texturi diferite, de tipuri diferite și se poate observa că textura din atașamentul de culoare numărul 0 este complet roșie, iar cea din atașamentul de culoare numărul 1 este complet albastră. |
| <code glsl> | <code glsl> | ||