我使用 glfw 回调函数用鼠标移动相机。
鼠标回调函数为:
void mouse_callback(GLFWwindow *window, double xposIn, double yposIn)
{
if (is_pressed)
{
camera.ProcessMouseMovement((static_cast<float>(yposIn) - prev_mouse.y) / 3.6f, (static_cast<float>(xposIn) - prev_mouse.x) / 3.6f);
prev_mouse.x = xposIn;
prev_mouse.y = yposIn;
}
cur_mouse.x = xposIn;
cur_mouse.y = yposIn;
}
void mouse_btn_callback(GLFWwindow *window, int button, int action, int mods)
{
if (button == GLFW_MOUSE_BUTTON_LEFT && action == GLFW_PRESS)
{
prev_mouse.x = cur_mouse.x;
prev_mouse.y = cur_mouse.y;
is_pressed = true;
}
else
{
is_pressed = false;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,在这种情况下,即使在其他imgui窗口中操作,相机也会移动,如下所示。

我不知道如何处理这个问题。
我应该使用类似的东西将此逻辑放在 IMGUI 的开始和结束之间吗ImGui::IsWindowHovered()?
像这样:
ImGui::Begin("scene");
{
if(ImGui::IsWindowHovered())
{
//camera setting
}
}
ImGui::End()
Run Code Online (Sandbox Code Playgroud)
上面的回答都是错误的。这在亲爱的 ImGui 常见问题解答中得到了回答: https: //github.com/ocornut/imgui/blob/master/docs/FAQ.md#q-how-can-i-tell-whether-to-dispatch-mousekeyboard-to -dear-imgui-or-my-application TL;DR 检查鼠标的 io.WantCaptureMouse 标志。
小智 5
我今天也遇到了同样的问题。对于现在看到此内容的任何人,您必须在初始化 ImGui 之前定义 glfw 回调。ImGui 此时会设置自己的回调,并处理将输入发送到已经存在的回调(如果之前未使用)。如果您随后定义回调,则会覆盖 ImGui 创建的回调。
| 归档时间: |
|
| 查看次数: |
9303 次 |
| 最近记录: |