2013-05-16 34 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

太棒了!很高兴有帮助。如果你愿意,你可以将这个答案标记为已接受。 –