Sadece 3D Grafik ve oyunlarda değil, hemen hemen her bilgisayar programında fareye (mouse) ihtiyaç duyarız. Bu dersimizde glfw'in basit fare fonksiyonlarını tanımayı ve fare girdilerini OpenGL içeriği üzerinde nasıl kullanabileceğimizi öğrenelim.
Dersimize mouse girdilerine erişebilmek için kullanacağımız fonksiyonları tanımakla başlayalım.
// Prototip tanımıglfwSetMouseButtonCallback: GLFWmousebuttonfun fonksiyon gösterici (Function pointer) türünden bir fonksiyondur. Pencere fare mesajlarını (girdilerini) bir geri çağırım (callback) fonkisyonuna tanımlamaya (yönlendirmeye) yarar.
GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow *window, GLFWmousebuttonfun cbfun);
// Kullanım şekli
glfwSetMouseButtonCallback(window, fonksiyon_adi);
Fonksiyon Parametreleri;
- GLFWwindow *window - Önceden oluşturduğumuz ve kullanacağımız pencere nesnesi
- GLFWmousebuttonfun cbfun - GLFWmousebuttonfun fonksiyon gösterici türünden bir callback fonksiyon ismi
// Prototip tanımıMouse girdilerinin bilgisini almak ve ihtiyacınıza göre programlayabilmek için oluşturmanız gereken geri çağırım fonksiyonu.
typedef void(* GLFWmousebuttonfun)(GLFWwindow *, int, int, int)
// Kullanım şekli
static void fonksiyon_adi(GLFWwindow *window, int button, int action, int mods)
{
if(button == GLFW_MOUSE_BUTTON_LEFT && action == GLFW_PRESS)
{
cout << "Mouse Girdisi -> Sol tusa basildi" << endl;
}
}
Fonksiyon Parametreleri ;
- GLFWwindow *window - Önceden oluşturduğumuz ve kullanacağımız pencere nesnesi
- int button- Mouse'a basılan ve bırakılan tuş girdi değerlerini alabileceğimiz değişken, tanımlanan tuş değerleri için tıklayınız.
- int action - Klavye girdilerinin durum (basma, bırakma ve basılı tutma) bilgisini alabileceğimiz değişken. Kullanabilir sabitler; GLFW_PRESS, GLFW_RELEASE yada GLFW_REPEAT
- int mods - Sistem tuşları yada değiştirici tuşlar (Modifier keys), "Ctrl", "Shift" ve "Alt" tuşlarının girdisini alabileceğimiz değişken.
// Mouse Girdisi gerçekleştiğinde çağırılacak fonksiyonu belirten fonksiyonAynı klavye örneğimizde olduğu gibi kütüphaneye fare geri çağırım (callback) fonksiyonumuzu glfwSetMouseButtonCallback() fonksiyonu sayesinde tanımlıyoruz.
glfwSetMouseButtonCallback(window, mouseBut_callback);
static void mouseBut_callback(GLFWwindow *window, int button, int action, int mods)Üsteki gibi geri çağırım fonksiyonumuzu global fonksiyon olarak tanımlayın. Faremizin geri çağırım fonksiyonunda, farenin 'Sol' tuşuna basıldığında üçgenimiz 'x' düzleminde değeri eksiltilerek, sola doğru hareket etmesini, farenin 'Sağ' tuşuna basıldığında 'x' düzleminde değeri arttırarak, sağa doğru hareket etmesini ve faremizin 'Orta' tuşunu basıldığında ise üçgenimizin başlangıç noktasına, yani x ve y düzleminin değişkenlerini sıfırlamasını (resetlemesini) sağladık. Ve son olarak konsol penceremizde çıktısını alarak kontrol ediyoruz.
{
if(button == GLFW_MOUSE_BUTTON_LEFT && action == GLFW_PRESS)
{
cout << "Mouse Girdisi -> Sol tusa basildi" << endl;
x -= 0.1f;
}
else if(button == GLFW_MOUSE_BUTTON_RIGHT && action == GLFW_PRESS)
{
cout << "Mouse Girdisi -> Sag tusa basildi" << endl;
x += 0.1f;
}
else if(button == GLFW_MOUSE_BUTTON_MIDDLE && action == GLFW_PRESS)
{
cout << "Mouse Girdisi -> Orta tusa basildi" << endl;
x = 0.0f;
y = 0.0f;
}
}
Bitbucket: main.cpp dosyasını indirmek için tıklayın.
Referans:
http://www.glfw.org/docs/latest/group__input.html
http://www.glfw.org/docs/latest/group__buttons.html
Hiç yorum yok:
Yorum Gönder