我想使用鼠标按钮使相机旋转。
相机旋转得很好,但问题出在鼠标按钮上。当我释放鼠标按钮并再次按下时,旋转重置回中心(0.0,0.0f,0.0f):
void mouse_input(GLFWwindow* window, int key, int action, int mods)
{
if (key == GLFW_MOUSE_BUTTON_MIDDLE && action == GLFW_PRESS)
{
mousemovement = true;
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
}
if (key == GLFW_MOUSE_BUTTON_MIDDLE && action == GLFW_RELEASE)
{
mousemovement = false;
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
}
}
void cursor_callback(GLFWwindow* window, double xpos, double ypos)
{
float lastposx = 1920.0f / 2;
float lastposy = 1080.0f / 2;
if (mousemovement)
{
if (firstMouse) {
lastposx = xpos;
lastposy = ypos;
firstMouse = false;
}
float speed = 0.05f;
float offsetx= 0.0f;
float offsety = 0.0f;
offsetx = (xpos - direction.x);
offsety = (direction.y - ypos);
float jaw = 0.0f;
float pitch = -90.0f;
offsetx *= speed;
offsety *= speed;
jaw += offsetx;
pitch += offsety;
if (pitch < -90.0f)
{
pitch = -90.0f;
}
if (90.0f < pitch)
{
pitch = 90.0f;
}
direction.x = cos(glm::radians(jaw)) * cos(glm::radians(pitch));
direction.y = sin(glm::radians(pitch));
direction.z = sin(glm::radians(jaw)) * cos(glm::radians(pitch));
cameraFront = glm::normalize(direction);
lastposx = xpos;
lastposy = ypos;
}
else
{
previouscamerafront = direction;
}
}
我尝试使用前面的前置摄像头创建另一个 vec3 变量。
我希望使用鼠标中键来旋转相机。
有人可以帮我吗?
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
这将隐藏光标并将其锁定到指定的窗口。然后,GLFW 将处理“光标重新居中”和偏移计算的所有细节,并为应用程序提供虚拟光标位置。该虚拟位置通常通过光标位置回调和轮询提供。
每次禁用光标(即每次按下中键时),光标的位置将设置为窗口的中心。
因此,要么不要禁用光标,要么保持禁用状态,要么处理重新居中。