Mark Kilgard tarafindan yazilan bu makale
GL Utility Toolhit (GLUT) hakkindaki serinin ucuncusudur.GLUT,OpenGL
gelistirenleri icin cok kullanisli bir sistemdir cunku
GLUT , OpenGL uygulama bolumune bagli API ' yi
basit bir sekilde ogrenme ve kullanma teknigini ozetler
Onceki makalede aciklandigi gibi OpenGL
deki tasarlanan sebepler sadece gelismis
bir 3D API 'in emirlerine bagli yapi
icerir . Windows'u acmak klavye kullanmak , giris, etc..guclu
tasaridir ve bu yuzden o , OpenGL'nin alani disindadir.GLUT,
bu problemin cevabidir: GLUT ,windows, double buffering,
metin cevirisi , klavye girisi ve menu gibi elle kullanilan
seyler gibi cok yonlu genel tasarilar sunar.
Bugun OpenGL uygulamalarimizin icindeki menulerin
kullanimini arastiracagiz. Bir menu , kullanim-uygulama
iletisiminin birden fazla nicelikleridir.Onceki makalemizde
(Windows Management) ,giris yeni
anahtar kullanimi icin diger teknigi gosterdik.GLUT
,mouse olayi kadar iyi
klavye yerlestirme olaylari icerir ve bu olaylari
kullanmak icin kaydedilmis olaylari geri cagirmamiza
izin verir." Hot key "in dezavantajidirki onlar
gorunmez, onlar Key'in ne oldugunu okuyan
veya hatirlayan bir kullanici ister . Diger taraftaki
menuler daha aciktir cunku onlar sekillidir
ve
bugunku gecerli kullanim tercihlerini gosterir.
Bir ornek olarak burada program orneginin
( example1. tar. gz)kaynaklari
vardir.Bu program bizim onceki makale Windows
Management da ki
gosterilen ornegin degisigidir.Download
programi ve onun derlenmesi dosya olusturur.
Derleme, bir OpenGL (ornegin Mesa)ve GLUT kutuphanesine
ihtiyac duyar.Her ikiside acik olarak degerlidir
ve bir cok Linux dagitimlarinin bir
yolunu kapsar.Derlemede basarili bir dosyaya
sahip olduk,ornek 1.Onu kullan ve renkli ucgenli
(kirmizi, yesil, mavi ) yeni bir window goreceksiniz.
(soldaki sekle bakiniz).
Cerceve, arkadaki siyah ana pencereyi , ortadaki
ucgeni, arkadaki gri sub-window ve onun uzerine
yazilan bazi metinleri icerir.Ornegimiz gercekten
heyecan verici gercek bir tempodur bu
yuzden sub-window'daki zaman alani ileriye
hareket ettirilmelidir.
Mouse okunu ana pencerinin alaninda hareket
ettir sonra mouse tikla ve soldaki mouse dugmesini
birakma.Bu olay bizim ornekteki kullanimdir ve
o, takip edilen menuyu acar:
Menu uc olay kapsar (ceviri ve donus yapma, renk degistirme)
ve girilen alandan cikmak icin son hak icerir.Soldaki
mouse dugmesini tutarken her
etkiyi hareket ettir ve neler oldugunu
gozden gecir.
"Rotation On" ucgenin agirlik merkezi etrafinda donmeye
baslayacak , "Translation On"menu parcasi window'un karsisindaki
ucgenin yatayinda hareket edecek ve onu ekranda
kaplayacak amac sona erdigi zaman."Change Color"
hakki , bu yeni haklarla bir alt menu baslatacak:
-
Red ucgeni kirmizi yapar
-
Blue ucgeni mavi yapar
-
Green ucgeni yesil yapar
-
RGB ucgeni kirmizi,yesil ve mavi yapar.
Bu , OpenGL uygulama icindeki usa'nin en basit
bir ornegidir.Menu ve alt menunun goruntusu tasari
bagliligidir.Burada gosterilenler Linux GLUT'in
bir ornegidir.Windows 95\NT 'yi derle ve calistir,
menuler farkli bir gorunume sahip olacak.Oyle
bir kuraldir ki gorev sadece ve sadece GLUT kutuphanesi
kullanildigi zaman tasinabilir
.
Dikkat etki , ana menu menu girislerinin iki
farkli cesidine sonraahiptir.Gereken olay basarildigi
zaman, ilk tip (Rotation On, Translation On) gercekten
degisir.Bunun anlami, donme tarzindaki ucgeni baslattiktan
sonra arkasindan "Rotation Off" yazisini
goreceksiniz.Menu girisindeki baska bir tip "Change Color","Red","Blue"'
and "Green" gibi sabit kalir.
Okuyucunun yerinde olup bu menuleri nasil
programladigi tanimina devam etmeden once birkac
ilginc seylerden haberdar olmak isterdim.Bu demo'nun
iki yeni anahtari oldugunu hatirliyormusun? Bu anahtarlar ;
cikmak icin "q" , bilgi dosyasini acip kapamak icin"i" dir.Bunlari
simdi deneyin hala calisiyorlar.
Bilgi dosyasi acikken, curser'i gri alanda
herhangi bir yere getir ve faredeki sol
tusa tikla.Surpriz! Diger menuyu goruyor olmalisiniz.
Bu g�sterir ki menuler yaln�z olaylara (sol mouse tu�u) ba�lanmakla kalmaz,
OpenGL i�eri�ine g�re de �evirilirler.�nceki makalelerimizde belirtti�imiz
gibi bir GLUT alt pencere kendi OpenGL i�eri�ini ta��r,burada o ger�e�in
di�er sonucunuda g�r�r�z.�ki menu ayn� olaylara fakat farkl� i�eriklere
ba�lan�rlar. Geli�tirenin,ba�vurusunu yazabilmesi i�in �ok kar��m��
aray�zeyi (yazabilmesi i�in) �imdi g��l� bir arac� var.
Daha da ilgin� olan ger�ek,I-keyi ve �er�evenin �zerindeki b�l�mdeki
cursoru hareket ettirmesini kullanarak informat�onal banneri kapat�rsan
Th�s �s a dummy menu� giri�ine geri d�nemezsin. Neden?��nk� alt pencereler
sakland���nda, t�m i�erik (ba�lan�lan menuler dahil) oldu�u gibi
gizlenirler.
�imdi program�n i�ndekiileri tan�maya ba�l�yal�m. Art�k okuyucular�n daha
�nceki makalelerde sunulan GLUT ve OpenGL malzemelerini yak�ndan tan�d���n�
zannediyorum. main() baz� farkl� b�l�mleri i�erir,
s�ra �nemlidir!:
- GLUT ba�lat�m�. G�sterim penceresini a�, command-line
arguments�e ge�,d�splay modu ve opt�ons se�eneklerini kur.
- Ana Pencere Tasar�m�. Ana pencereyi yarat pencereyle
ilgili uygun callback fonksiyonlar�n� kur, idle callback
fonksiyonlar�n� kur.
- Bir Alt Menu Yarat. Bu alt menu �Renk De�i�imi� ni
i�erir ve sonra ana menuye dahil olur.
- Ana Menu Yarat. Ana menu kur,menu par�alar�n� ekle ve
par�alardan biri gibi alt-menuyu (�nceki) dahil et, sonra da mouse�un sol
tu�uyla bu menuyu ba�la. �unu bil ki hala ana pencerenin i�erdi�i b�l�mdeyiz.
- GL Call Listesi Yarat. Bu geli�tirilmi� Open GL
konusudur ve �imdi ayr�nt�l� bir �ekilde bakmayaca��z. Call List hakk�nda,
OpenGL objelerinin y�klenmesi esnas�nda yap�lan bir �e�it yoldur dememiz
yeterli. Bu b�l�mde d�rt tane Call List yani �a��rma listesi vard�r: k�rm�z�
��gen,mavi ��gen, ye�il ��gen ve de RGB ��geni.
- Alt Pencere Yarat.Bir alt pencere yarat, handle�I koru,
uygun geri �a��rma fonksiyonlar�n� kur. Alt pencere kurulduktan sonra, yeni
bir i�erik o yere girer.
- Alt-Pencere ��in Yeni Menu Yarat. Tam olarak �nceki
yapt�klar�m�z, yeni bir menu yapma menu ayr�nt�lar�n� ekleme ve bunu mouse�un
sol tu�uyla ba�lamak. �imdi menu alt pencerenin i�eri�iyle ba�lanacak.
Menu haz�rlaman�n haricinde, okuyucu i�in di�er b�t�n ayr�nt�lar
(b�l�mler) ilgili olabilir. Menu yarat�m code�unun h�zl� bir denetimin,
nas�l basit oldu�unu ortaya ��kar�r. Menuler int glutCreateMenu ( void (f*)
(int) ),y�netiminde yap�l�r, f fonksiyonu hareketi do�rudan yapan ve
hedeflenmi� menu ayr�nt�s� taraf�ndan geri d�nd�r�len numaralar� geri al�r.
glutCreatemenu taraf�ndan �evrilen de�er,yeni yap�lm�� penceres� i�in bir
tamsay� ay�r�c�s�d�r.
Geri �a��r�m fonksiyonlar�n�n �nceden menu olaylar�n� ele almas� �ok
basitt�r.void mainMenu (int) ya da void subMenu (int) �I incele. Temel
olarak istenilen bir switch ile ba�l�d�rlar.void glutAddMenuEntry (char *s,
int nr) fonksiyonunu kullanarak ayr�nt�lara eklenerek menu yap�lmas�ndan
sonra,menu ayr�nt� alan�na s textinin yaz�ld��� yere,menu ayr�nt�s�
se�ildi�inde �id� ge�i�i olan nr geri �a��rma fonksiyonu olur. Ayn�
menude menu ayr�nt�lar� i�in id�nin kullan�m�ndan ka��n�n�z.
Fonksiyonu kullanarak benzer �ekilde Alt menuler eklenirler vo�d
glutAddSubMenu (char *s, int nr).
Sonunda menuyu tamamlamak i�in glutAttachMenu fonksiyonunu kullanarak
(mouse�un sol tu�unu kullanarak) input olay�na ba�lan�l�r. Bu fonksiyon
ayn� zamanda GLUT_SA�_TU�,GLUT_ORTA_TUޒu da al�r.
Menu ayr�nt�lar� ayn� zamanda void glutChanceToMenuEntry (int entry,
char *s,int value ) komutu ile de�i�tirilebilir. �rne�imizde biz
glutChangeToMenuEntry(2, "Translation On", 2);
yi ana menunun 2. Numaras�na giri�te kulland�k.
Glut ba�ka imkanlara da izin verir: men� ayr�nt�s�n� alt-menu ve
v�se-verse �e �evirmede, menular� yok etmede, menu ayr�nt�lar�n� kald�rmada.
Bunlar� �u an a��klayam�yoruz ��nk� inan�yorum ki verdi�imiz �rnek gayet
basit ve kullan�labilir�ekilde uygulay�c�lar i�in yeterlidir. E�er glut�un
extra fonksiyonlar�n� ��renmek istiyorsan�z glut�un el kitab�na bak�n�z.
|