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.
|