C++ / OpenGL [ 14 – Texture ]

Texture (Doku-Kaplama)

Texture dersimizde isleyecegimiz bazi parametrelerimizi inceliyelim;

  • GL_TEXTURE_1D​: Resimler bu dokuda tek boyuttalar. Sadece uzunluklari var yukseklik ve derinlikleri yok.
  • GL_TEXTURE_2D​: 2 boyutlu doku icin. Yukseklik ve genislikleri var derinlikleri yok
  • GL_TEXTURE_3D​: tum dokular 3 boyutlu. ek olarak derinlikte var.
  • GL_TEXTURE_RECTANGLE​: 2boyutlu tek resim dokusu. Normalizasyon ve doku kordinat sistemi icinde.
  • GL_TEXTURE_BUFFER​: Tek boyutlu doku minimapping yok . Data tampon objesinden gelmekte.
  • GL_TEXTURE_CUBE_MAP​: bir kup u olusturacak 6 farkli yuz icin 2 boyutlu doku ornegi.
  • GL_TEXTURE_1D_ARRAY​: Tek doku icinde bir cok tek boyutlu doku.
  • GL_TEXTURE_2D_ARRAY​: 2 boyutlusu.
  • GL_TEXTURE_CUBE_MAP_ARRAY​: 6 yuzlu kup icin dizi serisi.
  • GL_TEXTURE_2D_MULTISAMPLE​: 2 boyutlu tek doku. Tek degere bir ornek pixel atanir.
  • GL_TEXTURE_2D_MULTISAMPLE_ARRAY​: 2D dizi ve 2D cesitli doku ornekleri kombinasyonu.

bu kodlarimizda kaplama parametrelerini belirliyoruz.Ve dokumuzdaki kaymalari kontrol ediyoruz.

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, kaplama );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, kaplama );

kaplamaya gelebilecek degerler;
GL_REPEAT dokumuzu tekrarlamasini saglar.
GL_CLAMP boyutuna gore dokumuz kesilir.

ders14_texture_01

diger kontrol kodumuz dokumuz icin filtre gorevi gormekte,dokunun olceklendirilmesini kontrol ediyor.

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtre ); 
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filtre );

filter yerine gelebilecek degerler;

GL_NEAREST 
GL_LINEAR 

ders14_texture_02

ve ortam ayarlari icin gereken kod;

glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mod );

mod yerine gelebilecek degerler;

GL_REPLACE  //opak bir goruntu olarak ustunu orter

GL_MODULATE  // Aydinlatmada yararli bi kod olarak karsimiza cikar doku uzerinde parlama hassasiyetini module eder.

GL_TEXTURE // Orjinali neyse oyle ayarlar.

ders14_texture_03

bir sonraki texture methodumuz;

glTexImage2D( GL_TEXTURE_2D, level, ncomps, width, height, border, 
GL_RGB, GL_UNSIGNED_BYTE, Texture );

level   // mip-mapping kullanilacagi zaman degistirilir, normal degeri 0 verilmeli.

ncomps   // renkler ve opaklik degerleri icin parametre RGB icin “3” degeri ve RGBA icin “4” degeri girilmeli.

width  // doku kaplamanin genisligi,pixel olculerinde.

height // doku kaplamanin yuksekligi,pixel olculerinde.

border // kaplamamiza cerceve vermek istersek,normal degeri 0 (cerceve yok).

Texture // yukledigimiz ve ayarlari eklemek istedigimiz dokumuz.

Siradaki kodumuz Doku kaplamamizi aktif hale getirmek icin

glEnable( GL_TEXTURE_2D );   // kaplamayi acar.

glBindTexture(GL_TEXTURE_2D, texture[1]);  // texture dizimizde 1.ci siradakine denk gelen

dokumuzu bu kod sayesinde kapliyacagimiz cisime bagliyoruz.

// arada kalan bolgede kullanacagimiz cisimlere dokumuz islenecektir.

glDisable( GL_TEXTURE_2D ); // kaplamayi kapatir.

iki farkli texture bindTexture sayesinde su sekilde atanir;

[c language=”++”]
glEnable( GL_TEXTURE_2D );
glBindTexture( GL_TEXTURE_2D, tex0 );
glBegin( GL_QUADS );
. . .
glEnd();
glBindTexture( GL_TEXTURE_2D, tex1 );
glBegin( GL_TRIANGLE_STRIP );
. . .
glEnd();
[/c]

ornegin bir polygona texture imizi atamamiz icin kullanacagimiz kod;

[c language=”++”]
glBegin( GL_POLYGON );
glTexCoord2f( s0, t0 );
glNormal3f( nx0, ny0, nz0 );
glVertex3f( x0, y0, z0 );
glTexCoord2f( s1, t1 );
glNormal3f( nx1, ny1, nz1 );
glVertex3f( x1, y1, z1 );
. . .
glEnd();
[/c]

glTexCoord2f( 1, 0 ); //  resmimizin cisme oturmasi icin olceklendirme yapip cisme bagliyoruz.

her vertex noktasi icin TexCoord kullanmamiz gerekiyor.

glMatrixMode(GL_TEXTURE); matrisi sayesinde dokumuzun baslangic noktasini cismimiz uzerinde istedigimiz

yere atayabiliriz.Translate Rotate Ve Scale yardimci methodlarimiz ile

kullanacagimiz methodlara gore gorunumler bu sekilde olacaktir;

ders14_texture_05

ders14_texture_06

Bu dersimizde texture in genel kullanilan methodlarini gorduk

sonraki dersimizde SOIL kutuphanesiyle birlikte resim yukleyip cismimize texture atamayi 

adim adim yapacagiz. SOIL kutuphanesi kolay resim yuklememizi saglamak amaciyla kullanilacak

bir cok altarnetif yardimci kutuphaneler internette mevcut.

Bitmis bir projede texture in gorunumu su sekilde olacaktir.

ders14_texture_04

Leave a Reply

Your email address will not be published. Required fields are marked *