Home Index Search Links About Us
[LinuxFocus Image]
[Navegation Bar]
  News   Archives   Companies   Tips  

GLUT: Menülerin Kullanımı

Yazar: Miguel Angel Sepulveda

Çeviri: İTÜ Fen-Edebiyat Fakültesi Öğrencilerinden Bir Grup


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.


Daha Çok Bilgi İçin:
© 1998 Miguel Angel Sepulveda
Bu sanalyörenin bakımı Miguel A Sepulveda tarafından yapılmaktadır.