您好,我正在关注此页面中的 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 设为静态成员变量,因为否则我的回滚函数将无法访问它。
静态函数将无法访问类的成员。您可以使用 lambda 来连接它
glfwSetScrollCallback(window, [camera](GLFWwindow* window,double xoffset, double yoffset) { camera.scroll_callback(window, xoffset, yoffset); });
使用
glfwSetWindowUserPointer()
将 Camera
对象的 this
指针存储在 GLFWwindow
对象内,然后您的回调可以使用 glfwGetWindowUserPointer()
取回指针。