Texture - Günlük Kayıt #3


  • Texture, nesneye ayrıntı vermek için kullanılan 2D görüntüdür. (1D ve 3D texturelar mevcuttur.)
  • Texture bize o nesnenin çok ayrıntılı olduğu hissiyatını vermektedir.
  • Texture kullanılacağı zaman her vertex hangi kısımdan özel parça alacağını belirleyen texture koordinatlara sahip olmalıdır.
  • Texture koordinatları 0 ile 1 aralığındadır.
  • Texture color'ı texture koordinatları kullanarak almak sampling olarak adlandırılır.
  • Texture koordinatları, texture image'in sol alt (0,0) köşesinden başlar, sağ üst köşesinde(1,1) biter. Bununla ilgili örnek bu bağlantıdan görülebilir. 
  • Texture koordinatları genelde (0,0) ve (1,1) arasında değişmektedir. Fakat bu koordinatların dışına çıkarsak OpenGL default olarak texture imageleri tekrar edecektir. (Kısacası verilen texture koordinatın floating olduğu için integer kısmını ihmal ediyoruz.) Ancak bu durum bize bağlı değişebilir:
    • GL_REPEAT: OpenGL'in default olarak texturelara yaptığı işlemdir. Dokular tekrar eder.
    • GL_MIRRORED_REPEAT: Yukarıdakinden farklı olarak her image'i her tekrarla birlikte yansıtır.
    • GL_CLAMP_TO_EDGE: Koordinatları 0 ile 1 arasında sabitler.
    • GL_CLAMP_TO_BORDER: Aralığın dışında kalan koordinatlara istenilen bir border renk verilir.
  • Bu parametreler glTexParameter* fonksiyonunda kullanılmaktadır. (3. parametre olarak)
  • Örnek: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
  • İlk argüman texture hedefini verir. 2D çalışıldığı için GL_TEXTURE_2D seçilir.
  • 2. argüman hangi seçeneği belirlemek istediğimizi ve hangi doku ekseni için söylememizi gerektirir. Bu yüzden WRAP seçeneğini yapılandırmak ve S ekseni için belirtmek istiyoruz. Aynı zamanda T ekseni içinde belirtebiliriz. Son seçenek ise yukarıda bahsettiğimiz texture wrapping mode ile alakalı.Eğer GL_CLAMP_TO_BORDER kullanılırsa yapılması gereken işlem glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, border_Color);
  • Texture filtreleme için oldukça önemli iki tane ayar var. Bunlar GL_NEAREST ve GL_LINEAR seçenekleridir.
    • GL_NEAREST: OpenGL'nin default doku filtreleme metodudur. Bu ayarda OpenGL merkez koordinatlarına en yakın olan pikseli seçer. Bir diğer ismi nearest neighbor filtering
    • GL_LINEAR: Texture koordinatın komşu texturelarından interpolated değer alır ve texturelar arasında ortalama bir renk elde eder.
    • Texture filtreleme, magnifying ve minifying olarak ayarlanabilir. glTexParameter* kullanılır.
    • glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    • glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  • Mipmap denen önemli bir kavram söz konusudur. Seyrek bir ormanda olduğumuz düşünülsün. Bir tane yakında bir tane de uzakta ağaç olsun. Bu ağaçların sahip olduğu doku aynı ancak. Uzaktaki ağacın çözünürlüğü bizim için o kadar önemli değil. Bu yüzden farklı bir mipmap kullanmak iyi olacaktır. OpenGL nesneye olan mesafeye en iyi uyan farklı bir mipmap texture kullanacaktır. Nesne çok uzakta olduğu için, daha küçük çözünürlük kullanıcı tarafından fark edilmeyecektir. Performans açısından da önemlidir.
  • Bir texture'u elle mipmap'lamak yerine OpenGL bu işlemi glGenerateMipmap fonksiyonu ile bizim için gerçekleştiriyor.

Hiç yorum yok:

Yorum Gönder