This shows you the differences between two versions of the page.
egc:laboratoare:09 [2020/12/14 22:09] florin_eugen.iancu [Maparea texturilor] |
egc:laboratoare:09 [2021/11/12 19:22] (current) victor.asavei [Cerinte laborator] |
||
---|---|---|---|
Line 74: | Line 74: | ||
* Ultimul argument il reprezinta vectorul de date al imaginii. | * Ultimul argument il reprezinta vectorul de date al imaginii. | ||
- | Asadar, ''glTextImage2D'' incarca o imagine definita prin __datele efective__, adica un array de ''unsigned char''s, pe __obiectul de tip textura__ legat la __punctul de legare__ ''GL_TEXTURE_2D'' al __unitatii de texturare__ active la momentul curent, nivelul 0 (o sa luam aceasta constanta ca atare pentru moment), cu formatul intern ''GL_RGB'' cu lungimea width si cu inaltimea height, din formatul ''GL_RGB''. Datele citite sunt de tip ''GL_UNSIGNED_BYTE'' (adica ''unsigned char'') si sunt citite de la adresa data. | + | **Asadar:** ''glTextImage2D'' incarca o imagine definita prin __datele efective__, adica un array de ''unsigned char''s, pe __obiectul de tip textura__ legat la __punctul de legare__ ''GL_TEXTURE_2D'' al __unitatii de texturare__ active la momentul curent, nivelul 0 (o sa luam aceasta constanta ca atare pentru moment), cu formatul intern ''GL_RGB'' cu lungimea width si cu inaltimea height, din formatul ''GL_RGB''. Datele citite sunt de tip ''GL_UNSIGNED_BYTE'' (adica ''unsigned char'') si sunt citite de la adresa data. |
+ | |||
+ | Pentru a va cimenta si mai mult aceste notiuni, gasiti detalii si exemple suplimentare **[[https://stackoverflow.com/a/8887844|in aceasta postare]]**. | ||
==== Utilizarea texturii ==== | ==== Utilizarea texturii ==== | ||
Line 117: | Line 119: | ||
</code> | </code> | ||
- | Multitexturarea este folositare in momentul in care reprezentam o un obiect topologic complex, de exemplu frunze, cu o textura ce are o topologie mult inferioara ca si complexitate (de exemplu un quad). Daca utilizam o asemenea reducere de complexitate trebuie sa avem o metoda prin care sa putem elimina, la nivel de fragment, fragmentele ce nu sunt necesare (evidentiate in imaginea urmatoare). | + | Multitexturarea este folositare in momentul in care reprezentam un obiect complex din punct de vedere topologic, de exemplu frunze, cu o textura ce are o topologie mult inferioara ca si complexitate (de exemplu un quad). Daca utilizam o asemenea reducere de complexitate, trebuie sa avem o metoda prin care sa putem elimina, la nivel de fragment, acele fragmente care nu sunt necesare (evidentiate in imaginea urmatoare). |
{{ :egc:laboratoare:lab9texturephoto4.png |}} | {{ :egc:laboratoare:lab9texturephoto4.png |}} | ||
- | Puntru aceasta putem sa folosim o textura de opacitate (alpha) care ne spune care sunt fragmentele reale, vizibile, ale obiectului. Combinatia de textura de opacitate si textura de culoare este suficienta pentru definirea acestui bambus: | + | Pentru aceasta, putem sa folosim o textura de opacitate (alpha) care ne spune care sunt fragmentele reale, vizibile, ale obiectului. Combinatia de textura de opacitate si textura de culoare este suficienta pentru definirea acestui bambus: |
{{ egc:laboratoare:lab9texturephoto5.png |}} | {{ egc:laboratoare:lab9texturephoto5.png |}} | ||
+ | |||
+ | Elementele individuale ale unui ''vec4'' pot fi accesate utilizand numele componentelor:\\ | ||
+ | - Pentru date geometrice: ''x, y, z, w''\\ | ||
+ | - Pentru date legate de culori (red, green, blue, alpha): ''r, g, b, a''\\ | ||
+ | - Pentru date de texturare: ''s, t, p, q''\\ | ||
Pentru a omite desenarea fragmentelor care nu sunt vizibile se foloseste directiva de shader ''discard''. | Pentru a omite desenarea fragmentelor care nu sunt vizibile se foloseste directiva de shader ''discard''. | ||
Line 209: | Line 216: | ||
* Ex: Faceti alpha discard daca valoarea ''alpha'' este mai mica de 0.5f | * Ex: Faceti alpha discard daca valoarea ''alpha'' este mai mica de 0.5f | ||
- Creati si incarcati pe GPU o textura random | - Creati si incarcati pe GPU o textura random | ||
- | * completati functia ''Laborator9::CreateRandomTexture'' | + | * completati functia ''Lab9::CreateRandomTexture'' |
* ! generati mipmaps : ''glGenerateMipmap(GL_TEXTURE_2D);'' | * ! generati mipmaps : ''glGenerateMipmap(GL_TEXTURE_2D);'' | ||
* textura va fi folosita in cadrul randarii pe cubul din stanga | * textura va fi folosita in cadrul randarii pe cubul din stanga | ||
Line 229: | Line 236: | ||
Bonus: | Bonus: | ||
- | - Sa se trimita timpul aplicatiei ''Engine::GetElapsedTime()'' catre fragment shader si sa se utilizeze pentru a cicla prin textura de pe globul pamantesc (pe coordonata OY) (doar pentru acel obiect, deci e nevoie de si de o variabila uniform pentru a testa obiectul randat) | + | - Sa se trimita timpul aplicatiei ''Engine::GetElapsedTime()'' catre fragment shader si sa se utilizeze pentru a cicla prin textura de pe globul pamantesc (pe coordonata OX) (doar pentru acel obiect, deci e nevoie de si de o variabila uniform pentru a testa obiectul randat) |
- Sa se roteasca spre directia camerei (doar pe OY) quadul cu textura de iarba astfel incat sa fie orientat tot timpul catre camera. <hidden>Sa se randeze inca de 2 ori aceasi textura in aceasi pozitie dar cu o rotatie (fata de cea pricipala) de +- 30 grade. | - Sa se roteasca spre directia camerei (doar pe OY) quadul cu textura de iarba astfel incat sa fie orientat tot timpul catre camera. <hidden>Sa se randeze inca de 2 ori aceasi textura in aceasi pozitie dar cu o rotatie (fata de cea pricipala) de +- 30 grade. | ||
</hidden> | </hidden> |