【发布时间】:2011-05-02 06:49:20
【问题描述】:
这似乎是一个很常见的问题,但我找不到与我相同情况的人。最接近的似乎是:OpenGL: scale then translate? and how?。
我真正需要帮助的问题是在使用 OpenGL 放大(和缩小)2d 场景时四处移动。缩小的代码很简单:
void RefMapGLScene::zoomOut(){
currentScale = currentScale-zoomFactor;
double xAdjust = (((get_width())*zoomFactor/2));
double yAdjust = ((get_height()*zoomFactor/2));
zoomTranslateX -= xAdjust;
zoomTranslateY -= yAdjust;
}
放大的代码基本相同(将zoomFactor添加到currentScale,并增加zoomTranslateX和Y)。
渲染一切的代码也很简单:
glPushMatrix();
glTranslated(-zoomTranslateX, -zoomTranslateY, 0);
glScaled(currentScale, currentScale, 1);
glTranslated(totalMovedX, totalMovedY, 0);
graph->draw();
glPopMatrix();
本质上,zoomTranslate 存储了在缩放时使屏幕向中间移动一点所需的调整。我没有做任何好事,比如移动到鼠标指向的地方,我只是移动到中间(即向右和向上/向下,具体取决于您的坐标系)。 TotalMovedX 和 Y 存储鼠标移动如下:
if (parent->rightButtonDown){
totalMovedX += (-(mousex-curx))/currentScale;
totalMovedY += (-(mousey-cury))/currentScale;
}
在不放大或缩小的情况下拖动效果很好。缩放效果很好。在放大/缩小时拖动效果不佳:) 本质上,当放大时,画布的移动速度比鼠标慢得多。缩小时则相反。
我已经尝试了我能想到的一切,并且阅读了很多关于有类似问题的人的网站。我还尝试使用 glOrtho 重新实现我的代码来处理缩放,但最终遇到了其他问题,所以回到了这种方式。有人可以建议我如何处理这些拖动事件吗?
【问题讨论】: