12 Nisan 2014 Cumartesi

Opengl Durum makinası


Opengl Durum makinası

Opengl bir durum motoru yada makinası gibi çalışmaktadır.Neden opengl bir durum makinasıdır, Bir pencere oluşturdugumuzda pencereye atadıgımız renk kırmızı,yeşil,mavi vs.. tanponlar(buffer) bu renk degerleri ile temizlenir

void penceretemizle(void)
{
glClearColor(1.0,1.0,1.0,1.0);
glClear(GL_COLOR_BUFFER_BIT);
glFlush();

}


ve bizim bir dahaki mudahalemize kadar penceremizin rengi belirledigimiz durumda kalır .Bu işleyiş oluştugu için opengl nin bir durum makinası olarak tabir edilmektedir duruma göre işlemek.Opengl bir cok durum degişimi söz konusudur .

örnegin noktanın boyutu,openglde nokta oluşturuldugu zaman sabit oluşum degeri 1 dir ,bir pencere oluşturup sadece bir nokta oluşturdugunuz zaman bu nokta görünmeyecek kadar ufak oluşmaktadır bu durumu degiştirmek için
glPointSize fonksiyonu ile noktanın belirlenmiş durmunu degiştire biliriz bu degişim diger opengl durumlarında oldugu gibi bir dahaki degişime kadar sabit kalacaktır . Bu ve bunun gibi bir cok durum degişimi söz konusudur ,projeksiyon,dönüşümler,çizgi,poligon,pixel paketleme ve çevrimleri,ışığın pozisyonu ve karakteristik özellikleri,nesnelerin metarial özellikleri, gibi durum degişimleri de mevcuttur.Bu durum degişimlerinde bazı ögelerin etkin ve pasif olarak belirlememiz gerekmektedir ,bu işlemi gercekleştiren komutlar glEnable ve glDisable komutlarıdır glEnable komutu belilenen parmetreyi aktif glDisable pasif hale getirmektedir.
Örnegin

openglde çizgi denetimini saglıyan komut
glLineStipple

void kesikcizgi(void)
{
glEnable(GL_LINE_STIPPLE);
glLineStipple(1,0xFF);
glBegin(GL_LINES);
glVertex2f(-0.4,0.0);
glVertex2f(0.4,0.0);
glEnd();
glDisable(GL_LINE_STIPPLE);
}


glLineStipple komutunu işlemeden önce bu komut u glEnable(GL_LINE_STIPPLE); aktif duruma getiriyoruz ve çizim işlemi
bittikten sonra glDisable(GL_LINE_STIPPLE); pasif duruma getiriyoruz eger pasif durma getirilmedigi taktirde diger LINES cizimler de glLineStipple ile belirtilen degerler ile işlenecektir.

Sorgulama
Her durum değişkeninin veya modun varsayılan bir değeri vardır,Bu varsayılan degerlere ulaşmak için
glGetBooleanv(), glGetDoublev(),glGetFloatv(), glGetIntegerv(), glGetPointerv(), ve glIsEnabled gibi komutlar ile sorgulama yapılmaktadır ,buna ek olarak bazı özel durum degişkenleri için sorgu komutlarıda var glGetLight(), glGetError(), ve glGetPolygonStipple() gibi,ek olarak glPushAttrib() ve glPushClientAttrib ile yıgınlara duru m degişkenleri kaydededilir ,glPopAttrib() ve glPopClientAttrib() bu komutlarla yıgınlara kaydedilen durum degişkenleri geriye döndurule bilir

Hiç yorum yok:

Yorum Gönder