| 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: 
   
 
 
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
Red  ucgeni  kirmizi  yapar
Blue ucgeni  mavi   yapar
Green  ucgeni  yesil yapar
RGB  ucgeni  kirmizi,yesil ve mavi  yapar. .
 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. |