glfwSetScrollCallback Fonksiyonu Nedir?
// Prototip Tanımı
GLFWscrollfun glfwSetScrollCallback (GLFWwindow * window, GLFWscrollfun cbfun);
// Kullanımı
glfwSetScrollCallback(window, Fare_Tekerlek_Callback_Adı);
glfwSetScrollCallback: Fare tekerlek girdisini elde etmek ve girdileri isteğimize göre programlayabilmek için tasarladığımız geri çağırın (callback) fonksiyonumuzu kütüphaneye tanımlamaya yarar.
Fonksiyon Parametreleri;
- GLFWwindow *window - Önceden oluşturduğumuz ve kullanacağımız pencere nesnesi
- GLFWscrollfun cbfun - GLFWscrollfun fonksiyon gösterici türünden bir geri çağırım fonksiyon ismi
Geri Çağırım Fonksiyonu
// Prototip
typedef void(* GLFWscrollfun)(GLFWwindow *, double, double)
// Kullanımı
static void mouseWheel_callback(GLFWwindow *window, double xoffset, double yoffset)
{
}
Mouse tekerlek (wheel) girdilerinin bilgisini almak ve ihtiyacınıza göre programlayabilmek için oluşturmanız gereken geri çağırım fonksiyonu.
Fonksiyon Parametreleri ;
- [in] GLFWwindow *window - Önceden oluşturduğumuz ve kullanacağımız pencere nesnesi
- [in] double xOffset - x-axis, Yatay (Horizontal) tekerlek girdisi (Not: İki tekerleği olan özel farelerde bulunmaktadır.)
- [in] double yOffset - y-axis, Dikey (Vertical) tekerlek girdisi
Örnek:
Bu örnek de, fare tekerlek girdisine (yOffset) göre kamerayı uzaklaştırma ve yakınlaştırma işlemlerini temsili olarak gerçekleştireceğiz.
// Zoom Faktörü
GLdouble dZoomFactor = 1.0;
İlk olarak global düzeyde bir zoom faktörü tanımlamamız gerekiyor. Ardından;
/* Render Alani */
float ratio;
int width, height;
// OpenGL içerik boyutu alınıyor. (Genişlik ve Yükseklik)
glfwGetFramebufferSize(window, &width, &height);
ratio = width / (float) height;
// OpenGL Komutları -- Örnek olması için koyuldu.
// OpenGL Derslerinde İşlenecek
glViewport(0, 0, width, height);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-ratio * dZoomFactor, ratio * dZoomFactor, 1 * dZoomFactor, -1 * dZoomFactor, 1.0, -1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Render alanında, glOrtho fonksiyonuna zoom faktörünü dahil edin. Burada yenilenen dZoomFactor değerine göre yakınlaşma ve uzaklaşma gerçekleşecek. Son olarak geri çağırım fonksiyonunu tanımlıyoruz.
// Fare Tekerleği Callback
static void mouseWheel_callback(GLFWwindow *window, double xoffset, double yoffset)
{
cout << "X offset : " << xoffset << endl;
cout << "Y offset : " << yoffset << endl;
if(yoffset > 0)
dZoomFactor -= 0.05;
else
dZoomFactor += 0.05;
cout << "Zoom Faktoru : " << dZoomFactor << endl;
}
Geri çağırım fonksiyonumuzda, yOffset değerini 'if' kontrolünden geçirerek, 0'dan büyük olması halinde zoom faktörünü %5 eksiltiyor yada %5 arttırma yapmasını istedik. Böylece yakınlaştırma veya uzaklaştırma işlemi ile OpenGL içeriğini yeniden ölçeklendirme yapmış olduk.
Sonuç
Bitbucket: main.cpp dosyasını indirmek için tıklayın.
Referans:
http://www.glfw.org/docs/latest/group__input.html
Hiç yorum yok:
Yorum Gönder