我正在使用在 ImGui::Image 中显示 sf::RenderTexture 并尝试获取相对于它的鼠标坐标。
这是我的代码:
if (ImGui::Begin("Viewport", nullptr, GetFlags()))
{
mRenderTexture.clear(mClearColor);
if (!mRenderTexture.create(800, 600))
{
spdlog::error("Failed to create render texture");
return;
}
mView.reset(sf::FloatRect(0, 0, mRenderTexture.getSize().x, mRenderTexture.getSize().y));
mRenderTexture.setView(mView);
auto mousePos = mRenderTexture.mapCoordsToPixel(ImGui::GetMousePos);
spdlog::info("Mouse pos: ({}, {})", mousePos.x, mousePos.y);
mRenderTexture.display();
ImGui::Image(mRenderTexture);
}
我试图让视口的左上角对应于0,0,但即使我使用mapCoordsToPixel函数,它仍然给出相对于窗口而不是RenderTexture正在使用的视图的坐标。我需要做什么才能将其转换为视图坐标?
我尝试了 SFML 论坛上的很多解决方案,但仍然不起作用。
您可以通过调用
捕获图像在窗口坐标中的左上角坐标ImVec2 offset = GetCursorPos();
在您致电
ImGui::Image(mRenderTexture)
之前。
如果你从 offset
中减去 sf::Mouse.getPosition(currentWindow)
你应该得到你想要的。