16 Nisan 2013 Salı

Opengl ile Menü Oluşturma

GLUT kütüphanesi ,interaktif kontrol için pop-up menü fonksiyonları sağlar. Şimdi bu fonksiyonları sırasıyla görelim.

glutCreateMenu(menu_callback_func):

Adından da anlaşılacağı üzere yeni bir menü oluşturmamızı sağlıyor. menu_callback_func callback fonksiyonumun adı. Siz farklı bir ad verebilirsiniz. 


void menu_callback_func ( int ID )
{
   
}

Callback fonksiyonumuz yukarıdaki formatta olacak. Herhangi bir değer döndürmüyor. (Yani void) Ayrıca bir adet int türü parametre alıyor. ID değeri menüye ait elemanların id değeridir.

Örnek :  

if(ID == 0)
   exit(0);

Yukarıdaki gibi bir kod farenin ilişkili butonuna tıklandığında ilgili id değerine (mesela çık) basıldığında pencereyi kapatır. Siz de buna benzer komutlar yazabilirsiniz.


glutAddMenuEntry ( const char *label, int value ): Menüye yeni eleman ekliyor.

- label: Menü biriminin kullanıcıya gösterilen ismidir.
- value: Bu birim seçildiğinde ID’si , menü callback fonksiyonuna gönderilir.

Örneğin : glutAddMenuEntry("Kopyala",0);
glutAddMenuEntry("Kes",1);



glutAttachMenu ( int button ): 

button: Menu ile hangi fare butonu ilişkilendirileceği belirleniyor. Aşağıdaki enum değerlerden birini parametre kısmına eklemelisiniz.

GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON

glutAddSubMenu( const char *label, int value ): Menü içerisinde alt menüler oluşturur.

Böyle bir alt menü oluşturmak için şöyle bir ifade kullanabilirsiniz:

int deneme = glutCreateMenu(menu);
glutAddSubMenu("Kategori adı", deneme);

Örnek menü programı : 


    int shrinkMenu = glutCreateMenu(processShrinkMenu);
    glutAddMenuEntry("Shrink",0);
    glutAddMenuEntry("NORMAL",1);

    int fillMenu = glutCreateMenu(processFillMenu);
    glutAddMenuEntry("Fill",3);
    glutAddMenuEntry("Line",4);

    int colorMenu = glutCreateMenu(processColorMenu);
    glutAddMenuEntry("Red",5);
    glutAddMenuEntry("Blue",6);
    glutAddMenuEntry("Green",7);
    glutAddMenuEntry("Orange",8);

    int mainMenu = glutCreateMenu(processMainMenu);
    glutAddSubMenu("Polygon Mode", fillMenu);
    glutAddSubMenu("Color", colorMenu);

    // menüyü farenin sağ tuşuna ilişkilendir
    glutAttachMenu(GLUT_RIGHT_BUTTON);

Programı çalıştırıp pencere üzerinde farenizin sağ tuşuna tıklarsanız aşağıdaki gibi bir ekranla karşılaşırsınız.

Ekran çıktısı :