有没有办法在类中使用glfwSetScrollCallback函数?

问题描述 投票:0回答:2

您好,我正在关注此页面中的 opengl 教程并尝试实现相机类。 这是我的相机类代码。

class Camera
{
public:
    
    static float fov;
    glm::vec3 pos;
    glm::vec3 front;
    glm::vec3 up;

    bool firstMouse;
    float screen_width;
    float screen_height;


    Camera(float screen_width, float screen_height);
    ~Camera();

    
    void setup_scroll_inputs(GLFWwindow* window);
    static void scroll_callback_static(GLFWwindow* window, double xoffset, double yoffset);
};

和cpp

void Camera::setup_scroll_inputs(GLFWwindow* window)
{
    glfwSetScrollCallback(window, Camera::scroll_callback_static);
}
void Camera::scroll_callback_static(GLFWwindow* window, double xoffset, double yoffset)
{
    fov -= (float)yoffset;
    if (fov < 20.0f)
        fov = 20.0f;
    if (fov > 100.0f)
        fov = 100.0f;
    
}

我想要实现的是每当向上或向下滚动时的放大和缩小功能。 我尝试将

glfwSetScrollCallback
函数放入相机类成员函数中,因为 我想保持我的主要功能尽可能干净。 我的
scroll_callback
函数必须是静态成员函数,因为
glfwSetScrollCallback
需要一个函数指针。 但是,我想让
scroll_callback
函数能够访问相机的成员变量。 有没有办法实现这个目标?

目前,我将 fov 设为静态成员变量,因为否则我的回滚函数将无法访问它。

c++ opengl glfw
2个回答
0
投票

静态函数将无法访问类的成员。您可以使用 lambda 来连接它

glfwSetScrollCallback(window, [camera](GLFWwindow* window,double xoffset, double yoffset) { camera.scroll_callback(window, xoffset, yoffset); });

0
投票

使用

glfwSetWindowUserPointer() 
Camera
对象的
this
指针存储在
GLFWwindow
对象内,然后您的回调可以使用
glfwGetWindowUserPointer()
取回指针。

© www.soinside.com 2019 - 2024. All rights reserved.