2013-05-16 84 views
-1

我想在opengl C++中製作2D遊戲。 我想用鼠標移動來打一個三角形。因此我首先繪製三角形。到目前爲止,當我移動鼠標時,我成功地製作了三角形滾動條。如何使用鼠標在C++ opengl中滾動對象:

我用這兩條線:

case WM_MOUSEMOVE: 
    X += (GLfloat)LOWORD(lParam); 

,然後在我的繪圖功能,我這樣做:

glTranslatef(x,0.0f,0.0f); 

所以三角形用鼠標移動來移動爲止。但問題是,當我向左移動鼠標時,我希望它向左移動,向右移動鼠標時向右移動。

無論我如何移動鼠標,三角形都向右移動,從不離開。 即使我向上或向下移動鼠標,它也會向右移動。

我該如何解決這個問題?

+0

我猜測你正在使用的座標系意味着+ =總是會加上一些正值,因爲屏幕的左手邊將從0開始。試試這個。 保存它的最後一個位置(比如xPrev)。移動鼠標,獲得新的x值(比如xCurrent)。 xCurrent - xPrev應該告訴你哪個方向移動三角形,以及多少。 –

回答

0

這與glTranslatef相對於當前矩陣轉換的事實有關:每次翻譯時,都會將其添加到(在技術上與當前狀態相乘)當前狀態。

您可能想要使用=而不是+=並在其中添加glLoadIdentity。我通常在每幀的開頭調用glLoadIdentity。它將矩陣重置爲初始狀態,這意味着翻譯將像您期望的那樣工作。請參閱this問題以更好地解釋glLoadIdentity及其背後的數學問題。

+0

我用=而不是+ =,我用glLoadIdentity。我的問題已解決,謝謝! –

+0

太棒了!很高興有幫助。如果你願意,你可以將這個答案標記爲已接受。 –