Yazan : Şadi Evren ŞEKER

Bilgisayar grafiklerinde uzakta olan objelerin, uzaklık hissinin arttırılması için puslu gösterilmesi mümkündür. Buradaki amaç şekillerin renklerinin daha gri tonlara yakın gösterilmesi ve bu sayede uzaklık hissinin oluşturulmasıdır.

Aynı zamanda dumanlı ortamların modellenmesi için de kullanılabilir. Sis etkisi oluşturmak için aşağıdaki OpenGL kodlarından faydalanılabilir:

 glEnable(GL_FOG);
   {
      GLfloat fogColor[4] = {0.5, 0.5, 0.5, 1.0};

      fogMode = GL_EXP;
      glFogi (GL_FOG_MODE, fogMode);
      glFogfv (GL_FOG_COLOR, fogColor);
      glFogf (GL_FOG_DENSITY, 0.35);
      glFogf (GL_FOG_START, 1.0);
      glFogf (GL_FOG_END, 5.0);
   }

Yukarıdaki koddaki komtular sırasıyla aşağıda açıklanmıştır. Yukarıdaki kod bir şekil değiştirme (transformation) gibi şekil basılmadan önce uygulanabilir.

glEnable(GL_FOG);

Fog effecti komutlarını aktifleştirir.

GLfloat fogColor[4] = {0.5, 0.5, 0.5, 1.0};
glFogfv (GL_FOG_COLOR, fogColor);

Oluşturulacak olan sisin (dumanın, pusun) rengi ve alfta çarpanı. (yukarıdaki örnekte gri renktedir. Örneğin kırmızı renk için 1.0,0.0,0.0,1.0 parametreleri verilmelidir)

glFogfv (GL_FOG_COLOR, GL_EXP);

Kullanılacak olan sis’in şekiller üzerine nasıl uygulanacağını belirleyen matematiksel fonksiyondur. 3 farklı seçenekten birisi uygulanabilir : GL_LINEER, GL_EXP veya GL_EXP2. Bu seçenekler aşağıda açıklanmıştır:

GL_LINEAR için kullanılan fonksiyon f = (end – z) / (end – start)

GL_EXP için kullanılan fonksiyon f = e^-(density dot z)

GL_EXP2 için kullanılan fonksiyon f = e^-( (density dot z)^2)

yukarıdaki formüllerde end: sis’in bitişi , start: sis’in başlangıcı, e evrensel logaritma kökü, density: sis’in yoğunluğu, dot (dot product yani skalar çarpım), z ise objenin kameraya olan uzaklığını ifade etmektedir.

glFogf (GL_FOG_DENSITY, 0.35);

Uygulancak olan sisin yoğunluğu (ne kadar çok yoğun olursa şekiller o kadar az görülür. ) sayı float tipindendir yani 0 ile 1 arasında değerler alabilir.

     glFogf (GL_FOG_START, 1.0);
      glFogf (GL_FOG_END, 5.0);

Sis’in kameraya göre ne kadar uzaklıkta tanımlı olduğudur. Yani yukarıdaki satırlardan sonra sis 1 float birim uzaktan başlayarak 5 float birim uzağa kadar etkili olacaktır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir