如何获取相对于我的 sf::View 的鼠标坐标?

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

我正在使用在 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);
    }

Viewport image

我试图让视口的左上角对应于0,0,但即使我使用mapCoordsToPixel函数,它仍然给出相对于窗口而不是RenderTexture正在使用的视图的坐标。我需要做什么才能将其转换为视图坐标?

我尝试了 SFML 论坛上的很多解决方案,但仍然不起作用。

c++ sfml imgui
1个回答
0
投票

您可以通过调用

捕获图像在窗口坐标中的左上角坐标
ImVec2 offset = GetCursorPos();

在您致电

ImGui::Image(mRenderTexture)
之前。 如果你从
offset
中减去
sf::Mouse.getPosition(currentWindow)
你应该得到你想要的。

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