This shows you the differences between two versions of the page.
|
ipg:laboratoare:08 [2025/09/30 14:12] andrei.lambru |
ipg:laboratoare:08 [2025/11/27 09:29] (current) andrei.lambru |
||
|---|---|---|---|
| Line 35: | Line 35: | ||
| ==== Eșantionare directă ==== | ==== Eșantionare directă ==== | ||
| - | Se eșantioneaza direct valoarea celulei de la coordonata în spațiul grilei 2D, cu valoarea fiecărei componente a coordonatei rotunjită în jos. Astfel, pentru exemplul de sus, unde coordonata de texturare este (716.8, 563.2), se eșantionează valoarea celulei (716, 563). | + | Se eșantionează direct valoarea celulei de la coordonata în spațiul grilei 2D, cu valoarea fiecărei componente a coordonatei rotunjită în jos. Astfel, pentru exemplul de sus, unde coordonata de texturare este (716.8, 563.2), se eșantionează valoarea celulei (716, 563). |
| ==== Eșantionare liniară ==== | ==== Eșantionare liniară ==== | ||
| Line 72: | Line 72: | ||
| ==== Piramida „mipmap” ==== | ==== Piramida „mipmap” ==== | ||
| - | Conceptul de piramidă „mipma” a fost propus de Lance Williams în anul 1983 și constă în stocarea unei „piramide” de versiuni de diferite rezoluții ale unei imagini. Un astfel de exemplu se poate observa în imaginea de mai jos, în care în aceeași grilă, în partea stângă este stocată imaginea la rezoluția inițială, iar în partea dreaptă sunt stocate versiunile imaginii inițiale la rezoluție de 2, 4, 8, până la 128 de ori mai mică. | + | Conceptul de piramidă „mipmap” a fost propus de Lance Williams în anul 1983 și constă în stocarea unei „piramide” de versiuni de diferite rezoluții ale unei imagini. Un astfel de exemplu se poate observa în imaginea de mai jos, în care în aceeași grilă, în partea stângă este stocată imaginea la rezoluția inițială, iar în partea dreaptă sunt stocate versiunile imaginii inițiale la rezoluție de 2, 4, 8, până la 128 de ori mai mică. |
| {{ :ipg:laboratoare:mipmap.jpg?300 |}} | {{ :ipg:laboratoare:mipmap.jpg?300 |}} | ||
| Line 80: | Line 80: | ||
| </note> | </note> | ||
| - | Această piramidă este utilă în momentul în care este dorită o eșantionare într-o vecinatate mai mare de 2x2. Situația aceasta apare în momentul în care prin procesul de interpolare, doi pixeli vecini obținuti prin rasterizare au atribuite coordonate de texturare ce in grila 2D se află la distanță mai mare de o celulă. De exemplu, dacă doi pixeli vecini se află la distanță de 50 de celule în grila 2D, putem considera că dimensiunea pixelului, în spațiul grilei 2D este de 50 de celule. Astfel, putem utiliza versiunile imaginii ce au rezoluția cea mai apropiată de dimensiunea pixelului. Pentru imaginea de mai sus, aceste versiuni au rezoluție de 64x64 și 32x32. Pentru eșantionare, avem două opțiuni. | + | Această piramidă este utilă în momentul în care este dorită o eșantionare într-o vecinătate mai mare de 2x2. Situația aceasta apare în momentul în care prin procesul de interpolare, doi pixeli vecini obținuti prin rasterizare au atribuite coordonate de texturare ce în grila 2D se află la distanță mai mare de o celulă. De exemplu, dacă doi pixeli vecini se află la distanță de 50 de celule în grila 2D, putem considera că dimensiunea pixelului, în spațiul grilei 2D este de 50 de celule. Astfel, putem utiliza versiunile imaginii ce au rezoluția cea mai apropiată de dimensiunea pixelului. Pentru imaginea de mai sus, aceste versiuni au rezoluție de 64x64 și 32x32. Pentru eșantionare, avem două opțiuni. |
| === Eșantionare directă === | === Eșantionare directă === | ||
| Line 139: | Line 139: | ||
| Pentru parametrul de filtrare, în situația în care doi pixeli vecini obținuti prin rasterizare au coordonate de textură la distanță mai mare de o celulă din grila 2D, prin parametrul ''GL_TEXTURE_MIN_FILTER'' se poate specifica: | Pentru parametrul de filtrare, în situația în care doi pixeli vecini obținuti prin rasterizare au coordonate de textură la distanță mai mare de o celulă din grila 2D, prin parametrul ''GL_TEXTURE_MIN_FILTER'' se poate specifica: | ||
| - | * ''GL_NEAREST'' - eșantionare directă doar din imaginea inițială. | + | * ''GL_NEAREST'' - eșantionare directă doar din imaginea inițială; |
| - | * ''GL_LINEAR'' - eșantionare liniară doar din imaginea inițială. | + | * ''GL_LINEAR'' - eșantionare liniară doar din imaginea inițială; |
| - | * ''GL_NEAREST_MIPMAP_NEAREST'': eșantionare directă din versiunea imaginii inițiale ce are rezoluția cea mai apropiată de dimensiunea pixelului în spațiul grilei 2D. | + | * ''GL_NEAREST_MIPMAP_NEAREST'': eșantionare directă din versiunea imaginii inițiale ce are rezoluția cea mai apropiată de dimensiunea pixelului în spațiul grilei 2D; |
| - | * ''GL_LINEAR_MIPMAP_NEAREST'': eșantionare liniară din versiunea imaginii inițiale ce are rezoluția cea mai apropiata de dimensiunea pixelului în spațiul grilei 2D. | + | * ''GL_LINEAR_MIPMAP_NEAREST'': eșantionare liniară din versiunea imaginii inițiale ce are rezoluția cea mai apropiată de dimensiunea pixelului în spațiul grilei 2D; |
| - | * ''GL_NEAREST_MIPMAP_LINEAR'': interpolare liniară între valorile obținute prin eșantionare directă a versiunilor imaginii inițiale ce au rezoluțiile cele mai apropiate de dimensiunea pixelului în spațiul grilei 2D. | + | * ''GL_NEAREST_MIPMAP_LINEAR'': interpolare liniară între valorile obținute prin eșantionare directă a versiunilor imaginii inițiale ce au rezoluțiile cele mai apropiate de dimensiunea pixelului în spațiul grilei 2D; |
| * ''GL_LINEAR_MIPMAP_LINEAR'': interpolare liniară între valorile obținute prin eșantionare liniară a versiunilor imaginii inițiale ce au rezoluțiile cele mai apropiate de dimensiunea pixelului în spațiul grilei 2D. | * ''GL_LINEAR_MIPMAP_LINEAR'': interpolare liniară între valorile obținute prin eșantionare liniară a versiunilor imaginii inițiale ce au rezoluțiile cele mai apropiate de dimensiunea pixelului în spațiul grilei 2D. | ||
| Pentru parametrul de filtrare, în situația în care doi pixeli vecini obținuti prin rasterizare au coordonate de textură la distanța mai mică de o celulă din grila 2D, prin parametrul ''GL_TEXTURE_MAG_FILTER'' se poate specifica: | Pentru parametrul de filtrare, în situația în care doi pixeli vecini obținuti prin rasterizare au coordonate de textură la distanța mai mică de o celulă din grila 2D, prin parametrul ''GL_TEXTURE_MAG_FILTER'' se poate specifica: | ||
| - | * ''GL_NEAREST'' - eșantionare directă doar din imaginea inițială. | + | * ''GL_NEAREST'' - eșantionare directă doar din imaginea inițială; |
| * ''GL_LINEAR'' - eșantionare liniară doar din imaginea inițială. | * ''GL_LINEAR'' - eșantionare liniară doar din imaginea inițială. | ||
| Line 163: | Line 163: | ||
| Procesul de eșantionare este realizat de o entitate autonomă implementată hardware sub forma unui procesor în interiorul procesorului grafic sau software în driver-ul companion procesorului. Această entitate autonomă este numită **unitate de texturare** și numărul lor este în general limitat la 32. | Procesul de eșantionare este realizat de o entitate autonomă implementată hardware sub forma unui procesor în interiorul procesorului grafic sau software în driver-ul companion procesorului. Această entitate autonomă este numită **unitate de texturare** și numărul lor este în general limitat la 32. | ||
| - | Pentru a utiliza procesul de eșantionare, trebuie să asociem obiectul de tip textură pe care dorim sa îl eșantionăm cu o unitate de texturare, numerotat cu identificatori de la 0 la 31 și să transmitem la un program de tip shader numărul unității de texturare: | + | Pentru a utiliza procesul de eșantionare, trebuie să asociem obiectul de tip textură pe care dorim să îl eșantionăm cu o unitate de texturare, numerotată cu identificatori de la 0 la 31 și să transmitem la un program de tip shader numărul unității de texturare: |
| <code cpp> | <code cpp> | ||
| Line 215: | Line 215: | ||
| </note> | </note> | ||
| - | Un alt exemplu de aplicare a utilizării obitectelor de tip textură pentru a stoca informații generice este utilizarea unei grile 2D pentru a păstra un deplasament în spațiul obiectului. Astfel, la desenarea unui plan, se poate modifica componenta y a coordonatei fiecărui vârf pe baza informației din grila 2D, proiectată pe toată suprafața planului. Un exemplu de imagine ce păstrează o astfel de informație se poate vedea mai jos: | + | Un alt exemplu de utilizare a obiectelor de tip textură pentru a stoca informații generice este folosirea unei grile 2D pentru a păstra un deplasament în spațiul obiectului. Astfel, la desenarea unui plan, se poate modifica componenta y a coordonatei fiecărui vârf al geometriei din care este construit planul pe baza informației din grila 2D, proiectată pe toată suprafața planului. Un exemplu de imagine ce păstrează o astfel de informație se poate vedea mai jos: |
| {{ ipg:laboratoare:heightmap.png?200 | }} | {{ ipg:laboratoare:heightmap.png?200 | }} | ||