看起來這是一個相當普遍的問題,但我無法找到一個具有相同環境的人。最接近的似乎是:OpenGL: scale then translate? and how?。OpenGl 2d縮放(使用縮放和平移代替glOrtho)
我真的想要一些幫助的問題是,如何在使用OpenGl放大(並退出)二維場景時進行移動。爲縮小的代碼非常簡單:
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來重新實現我的代碼來處理縮放,但最終面臨着其他問題,所以回到了這種方式。任何人都可以建議我如何處理這些拖延事件?
後,我居然發現這個問題,你的代碼和我的工作都很好。我只是將totalMovedX和totalMovedY作爲int保存,這意味着小數被截斷。真正的基本錯誤。謝謝你的回答。 – Simon 2011-05-02 07:26:24