在2d Plane上向相机中心变焦

时间:2017-06-10 15:42:40

标签: c++ geometry 2d sfml

再一次,相机在2D平面上进行缩放。我搜索了很多,并且知道有类似的问题,但我显然太愚蠢了,无法运用我能找到的东西。

基本上我将所有元素的距离乘以mouseDelta乘以double,它是0.5和1之间的camX。适用于所有元素,但是因为相机的锚点({{ 1}},camY)是摄像机的左上角,凸轮焦点中的对象相对于焦点改变其位置。我想滚动“朝向”焦点。这是我得到的,但它的表现非常奇怪:

如上所述,

camX和camY是凸轮左上角的坐标。 mouseDelta是全局存储的缩放级别,由每个wheel-event更改。 screenX是屏幕/窗口的宽度(无论如何全屏) screenY是屏幕/窗口的高度

if (newEvent.type == sf::Event::MouseWheelMoved) //zoom
{

    mouseDelta += ((double)newEvent.mouseWheel.delta)/20;
    if (mouseDelta > 1) { mouseDelta = 1; }
    else if (mouseDelta < 0.5) { mouseDelta = 0.5; }

    //resize graphics
    for (int i = 0; i < core->universe->world->nodes.size(); i++) {
        core->universe->world->nodes.at(i).pic->setSize(mouseDelta);
    }
    for (int i = 0; i < core->universe->world->links.size(); i++) {
        core->universe->world->links.at(i).pic->setSize(mouseDelta);
    }

    camX = (camX + screenX/2) - (camX + screenX/2)*mouseDelta;
    camY = (camY + screenY/2) - (camY + screenY/2)*mouseDelta;
}

0 个答案:

没有答案