-1

我正在尝试用 opengl c++ 制作 2d 游戏。我想使用鼠标移动来滚动三角形。所以我先画三角形。到目前为止,当我移动鼠标时,我成功地使三角形滚动。

我用了这两行:

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

然后,在我的绘图功能中,我这样做:

glTranslatef(x,0.0f,0.0f);

所以到目前为止,三角形随着鼠标的移动而移动。但问题是,当我向左移动鼠标时,我希望它向左移动,当我向右移动鼠标时它向右移动。

无论我如何移动鼠标,三角形都会向右移动并且永远不会离开。即使我向上或向下移动鼠标,它也会向右移动。

我该如何解决这个问题?

4

1 回答 1

0

这与 glTranslatef 相对于当前矩阵转换的事实有关:每次转换时,它都会添加到(技术上,乘以)当前状态。

您可能想要使用=而不是在+=其中添加 glLoadIdentity 。我通常在每一帧的开头调用 glLoadIdentity。它将矩阵重置为其初始状态,这意味着翻译将像您期望的那样工作。请参阅问题以更好地解释 glLoadIdentity 及其背后的数学。

于 2013-05-16T11:06:29.583 回答