Extras din laborator
In zilele noastre, texturile sunt in majoritate standard in privinta jocurilor. Cu acest scop a fost creat si OpenGL-ul. Spre deosebire de rigidul si neobisnuitul DirectX API, crearea texturilor nu este o forma de pedeapsa. Singurul lucru cu care trebuie sa-ti bati capul este sa incadrezi parametrii si mediul creat in decor.
O textura este o imagine aplicata pe un polygon. Prin atasarea vertexurilor (in spariul ecranului) la puncte de control numite coordonate texturale u si v (in spatiul texturilor), obtinem o interpolare pe ecran. Texturile sunt in mod obisnuit folosit pentru a adauga o infatisare unor suprafete ce ar fi dificil de produs daca s-ar folosi poligoane.
Fig. 1. Transformarile formeaza spatii texturale in spatial ecranului.
Exista un lucru foarte important de luat in seama cand se folosesc texturile in OpenGL: pentru o performanta cat mai buna, texturile trebuie sa fie imagini patrate si sa aiba dimensiunea putere de 2. Deci, dimenisiunile bune folosite pentru texturi sunt: 2, 4, 8, 16, 32, 64, 128, 256, 512, …
Numele texturilor
Pentru a incepe, ne trebuie in primul rand un nume pentru textura noastra. Acesta este in general un numar pe care OpenGL-ul il foloseste sa indexeze toate texturile diferite. Pentru a denumi o textura trebuie sa apelam functia glGenTextures.
#define NR_MAX_TEXTURI 2
GLuint texture [NR_MAX_TEXTURI];
glGenTextures(2,texture);/* aici se genereaza doua obiecte textura */
Acum ca am denumit textura, putem sa trecem de la o textura la alta folosind functia glBindTexture. De fapt aceasta allege cu ce textura se lucreaza. In acest moment, ar trebui sa observi ca sunt doua tipuri de texturi in OpenGL, 1D si 2D. Foarte probabil nu vei folosi 1D, asa ca vom prezenta texturile 2D. Deci hai sa selectam numele texturii pe care tocmai am creat-o.
// allege textura curenta
glBindTexture( GL_TEXTURE_2D, texture[0] );Texture Parameters
Daca vrem sa folosim o textura diferita va trebui sa folosim: texture[1], texture[2], etc. In exemplul nostrum, alegem doua texturi (NR_MAX_TEXTURI 2): numai texture[a] si texture[1] sunt disponibile aici.
Acum putem incepe lucrulla textura curenta. In primul rand, trebuie sa dam parametrii texturii. In al doilea rand, trebuie sa incarcam datele texturii. Inainte sa incepem, ar trebui sa declaram situatia cadrului textural. Cadrul exact pe care il vei decalra poate sa fie diferit de cel prezentat aici. GL_MODULATE preia culoarea si datele din textura si le multiplica cu datele din glColor si/sau sistemul de iluminare.
// alegeti modulate pentru a amesteca textura cu culoarea pentru umbre/nuante
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
In continuare avem patru parametrii texturali pe care trebuie sa ii declaram. Aici putem crea efecte precum filtrarea texturala biliniara sau triliniara, dar si mipmapping-ul. Deasemenea putem spune daca textura se impatureste/indoaie la capete sau este dreapta. Repet pentru ca este cea mai obisnuita folosire. Cititi comentariile prntru detalii astura modului in care lucreaza fiecare.
// cand zona de texturare este mica, filtrul biliniar cel mai apropiat mipmap
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST );
// cand zona de texturare este mare, filtrul bilinear originalul glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
// textura se indoaie/impatureste la capete (repeat) glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
Functia glTexParameter() este o parte extreme de importanta a texturarii in OpenGL, aceasta functie determina comportamentul si modul de afisare al texturilor cand sunt redate. In cele ce urmeaza avem o sumedenie de parametric si efectul lor asupra texturii redate. Fiecare textura poate avea propriile proprietati, care nu sunt globale. Proprietatile unei texturi nu vor afecta alte texturi.
Preview document
Conținut arhivă zip
- Cartografia Texturilor - Open GL.doc