Crearea unei texturi în memoria RAM

texturile sunt adesea stocate în fișiere. Pentru a accelera de calcul în dimensiuni de imagini textura OpenGL trebuie să fie divizibil cu puteri ale lui 2, și anume egal cu 2 n x2 m. unde n și m sunt numere întregi. Pentru a afișa o textură similară cu obiectul trebuie să efectuați câțiva pași:

1) Încărcați memoria textură imagine a fișierului grafic.

2) Crearea unui (nume) textură identificator.

3) Faceți o textură identificator activ.

4) Creați o memorie de textură.

5) Setați proprietățile texturii.

6) Setați proprietățile de textură de interacțiune cu obiectul.

7) Se permite texturi de cartografiere apelare glEnable (GL_TEXTURE_2D).

8) Desemnarea coordonatele texturii obiectului.

9) În cazul în care textura nu mai este necesar, pentru a interzice lor apel de afișare glDisable (GL_TEXTURE_2D).

Luați în considerare cazul cel mai simplu de a folosi textura - cartografiere textura pe un poligon plat. Pentru a demonstra texturi multiple, presupunem că este necesar pentru a efectua maparea a două texturi diferite, pe trei fețe vizibile ale cubului (o textură pe partea din față a unui observator al feței cubului, două copii ale altor textura - superioare și laterale figuri).

7.1 Programul a instituit două variabile globale pentru fiecare textura:

falls_tex int unsigned;

sawdust_tex int unsigned;

Variabile falls_tex și ID-urile sawdust_tex sunt texturile și falls_image și sawdust_image concepute pentru stocarea de imagini de textură din fișiere și nume sawdust_filename falls_filename. Încărcați imagini în memoria este realizată în texturile funcția de inițializare textures_init ():

falls_image = auxDIBImageLoad (falls_filename);

sawdust_image = auxDIBImageLoad (sawdust_filename);

După descărcarea imaginilor aveți nevoie pentru a crea identificatori texturi. Identificatorii - sunt numere întregi care disting textura reciproc. În cazul în care textura este doar una, ID-ul nu este necesar pentru aceasta. Pentru a crea identificatori este o glGenTextures function ():

glGenTextures void (int n, int nesemnate texturi *);

n parametru specifică numărul de ID-uri texturi create, parametrul texturi este un pointer la o matrice în care pentru a stoca acești identificatori. Dimensiunea acestei matrice nu ar trebui să fie mai mică decât n. De exemplu, pentru a crea zece texturi de identificare poate fi o provocare:

ids unsigned int [10];

glGenTextures (10); IDS

Matricea este convenabil pentru a stoca identificatori de texturi similare, de exemplu, diferite tipuri de iarbă sau frunze în peisaje simulate. 7.1 Identificatorii programului texturile sunt stocate în variabile distincte, astfel inițializarea texturi creează doi identificatori diferiți:

glGenTextures (1 falls_tex);

glGenTextures (1 sawdust_tex);

După crearea Identificatorii de textură, atât la rândul lor, sunt selectate și proprietăți active sunt stabilite pentru ele. Selectarea texturii activă se realizează funcția glBindTexture ():

anula glBindTexture (țintă Glenum, nesemnate int textura);

Parametrul țintă specifică tipul de textura - GL_TEXTURE_2D (bidimensional) sau GL_TEXTURE_1D (unidimensional). În cele ce urmează considerăm textura doar două-dimensional. Parametrul Texture este un identificator al texturii, care este necesară pentru a activa. De exemplu, pentru a face o falls_tex textură activă, este necesar pentru a apela o funcție de genul:

glBindTexture (GL_TEXTURE_2D, falls_tex);

Deși textură imagine falls_tex deja încărcate dintr-un fișier într-o variabilă de tip falls_image AUX_RGBImageRec, dar textura este mai stabilit. În plus față de imaginea octet din textura este un set de proprietăți care afectează maparea texturii pe obiect. De exemplu, acest nivel de detaliu, metoda de scalare și a texturii legarea cu un obiect. Aceste proprietăți sunt setate la crearea textura.

Cu nivelul de detaliere, puteți seta mai multe imagini pentru o textură care vă permite să aplicați cu mai multă precizie textura obiectelor dimensiunea proiecții bidimensionale care sunt mai mici decât dimensiunea texturii. Nivelul zero detaliu corespunde imaginii originale dimensiune 2 n x2 m. primul nivel - 2 n-1 x2 m-1. k nivel -lea - 2 n-k x2 m-k. Numărul de niveluri posibile este egal cu min (n, m).

Pentru a crea o textură a fost utilizată funcția sau gluBuild2DMipmaps () glTexImage2D ():

anula glTexImage2D (tinta GLenum, nivel int, int componente,

latime int, inaltime int, int frontieră, format GLenum,

tip GLenum, const pixeli * void);

int gluBuild2DMipmaps (target GLenum, componente int, latime int,

int înălțime, format GLenum, tip GLenum, void * const date);

Prima funcție creează o textură de un anumit nivel de detaliu (nivel) și funcționează numai cu imagini ale căror dimensiuni sunt multipli de puteri de 2. gluBuild2DMipmaps function () mai versatile. Acesta generează toate nivelurile de detaliu textura și nu impune restricții privind dimensiunile imaginii. Această caracteristică scalează imaginea în sine așa cum se dorește, dar rezultatele nu pot fi foarte bună calitate. Înainte de primul apel oricare dintre funcțiile necesare pentru a crea textura este necesară pentru a provoca glPixelStorei (), care specifică metoda de stocare în memorie imagini de rânduri (rând câte bytes aliniate).

Ia în considerare numirea setările funcției glTexImage2D ():

țintă - dimensiunea texturii (textura bidimensională la GL_TEXTURE_2D);

nivel - nivelul de detaliu. Pentru nivelul imaginii originale = 0;

componente - cantitatea de componentă de culoare din imagine (o imagine în format RGB componente = 3);

lățime și înălțime - lățimea și înălțimea imaginii;

frontieră - lățimea frontierei, în cazul în care frontieră nu este prezent, atunci frontiera = 0;

Format - format de imagine (de obicei GL_RGB);

tip - tipul de date de pixeli de imagine (de obicei, GL_UNSIGNED_BYTE);

pixeli - o matrice de pixeli din indexul de imagini.

De exemplu, crearea unei texturi poate fi realizată după cum urmează:

glPixelStorei (GL_UNPACK_ALIGNMENT, 1);

glTexImage2D (GL_TEXTURE_2D, 0, 3,

0, GL_RGB, GL_UNSIGNED_BYTE, falls_image-> date);

Un rezultat similar poate fi obținut folosind gluBuild2DMipmaps () funcție:

gluBuild2DMipmaps (GL_TEXTURE_2D, 3,

GL_RGB, GL_UNSIGNED_BYTE, falls_image-> date);

După crearea unei texturi, puteți seta proprietățile sale. Pentru aceasta este o funcție de:

void glTexParameter [if] (țintă GLenum, GLenum pname, [int, float] param)

Primul parametru pentru a viza textura bidimensional este GL_TEXTURE_2D. Al doilea parametru specifică variabila de proprietate textura pname. Noua valoare a parametrului este transmis param.

De exemplu, în cazul în care textura creată prin glTexImage2D (), apoi texturile de selecție regulă pentru obiecte cu dimensiuni care diferă de dimensiunile texturii, apelul poate fi setat:

glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

Aceste provocări indică faptul că crește sau descrește textura utilizat algoritmul GL_NEAREST. Conform acestei reguli, deoarece culoarea pixel obiect la care textura aplicată, culoarea este ales cel mai apropiat texel. În schimb, puteți specifica GL_NEAREST GL_LINEAR, atunci culoarea pixel va fi calculată ca medie aritmetică a celor mai apropiate patru texeli. În OpenGL, există patru reguli de calcul culoarea pixelilor printr-o combinație de texeli diferite niveluri de detaliu.

De asemenea proprietăți textura, pot fi specificate în proprietățile OpenGL textura de interacțiune cu obiectul. Pentru modul de culoare RGB sunt combinații de culori două moduri disponibile ale pixelului și Texel. În modul implicit (GL_MODULATE) este luată în considerare și culoarea pixelului, iar culoarea Texel. Culoarea rezultată se obține prin înmulțirea cu componentele corespunzătoare ale pixelului și Texel. De exemplu, în cazul în care culoarea Texel (.. Rt Gt Bt), iar culoarea obiectului de pixel la care textura aplicată, - (.. Rp Gp Bp), culoarea rezultată este (Rt * Rp Gt * Gp Bt * Bp ..). În cazul în care obiectul este desenat în negru (0, 0, 0), o textură pe ea nu va fi vizibil. În al doilea modul de interacțiune (GL_DECAL) culoarea obiectului nu este considerat, iar culoarea rezultată va fi întotdeauna culoarea Texel. Aceste moduri sunt stabilite după cum urmează:

glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

După textura a creat și un set de caracteristici, puteți utiliza aceste texturi pentru desen primitivelor. maparea texturii este realizată prin conectarea vârfurile primitivelor și coordonatele Texel. 7.1 Programul se realizează în funcție de afișare (). În cei trei pătrate desenate cu maparea texturii. Funcția glTexCoord2d () compară coordonatele coordonatele Texel ale nodurilor primitive.

Crearea unei texturi în memoria RAM