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