FreeGLUT ve Joystick ile Grafik Programlama

Sat, Apr 29, 2017 One-minute read

Bu yazımızda openGL kütüphanesi olan freeGLUT3 fonksiyonlarını bir joystick yardımı ile kullanarak oluşturduğumuz bir nesneyi hareket ettireceğiz.

Derleme sistemimiz Ubuntu 17.04 g++ editörümüz Sublime Text 3

Nesnemiz şekildeki kare.

Şeklimizi aşağıdaki kodumuzla oluşturuyoruz. Burada spin adlı bir statik değişkene joystickten aldığımız x ekseni değerlerini aktarıyoruz.

glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glRotatef(spin, 0.0, 0.0, 1.0); //static spin=0.0
    glColor3f(1.0, 1.0, 1.0);
    glRectf(-25.0, -25.0, 25.0, 25.0);
    glPopMatrix();
    spin += donus; //add joystick spin ratio

Bu kısımdan sonra ise Joystick tanıtma ve bunu glut içerisine referans etmemiz gerekiyor.

Glut bunun için bir fonksiyon geliştirmiş. glutJoystickFunc adlı fonksiyonu parametre olarak alan bir fonksiyon.Bu fonksiyon aynı zamanda kaç milisaniyede bir analog veriyi kontrol etmesi gerektiğini de alıyor.

glutJoystickFunc(joystick,25);

Parametre olarak aldığı joystick fonksiyonu ise burada görebiliriz.

buttonmask joystick üzerindeki hangi butonlara basıldığını anlamak için; x,y ve z ise analog tuşlardaki eksenlerin -1000 ile +1000 arasındaki değerlerini ölçmek için kullanılıyor.

Biz bu dönüşü rotate fonksiyonunda kullanacağımız için mod360 değerini alıyoruz.

void joystick(unsigned int buttonmask, int x, int y, int z)
{ 
     donus  = x%360;
     glutPostRedisplay();
     y_axis  = y;
     z_axis  = z;
     cout<<"X EKSENİ "<<x
     <<endl<<"Y EKSENİ "<<y
     <<endl<<"Z EKSENİ "<<z<<endl;
   
}

Çalışma videosu

sources:

https://www.opengl.org/discussion_boards/showthread.php/132295-JoyStick-implementation-with-GLUT