如何在c++ opengl中使用鼠标滚动对象

How to scroll an object with a mouse in c++ opengl:

本文关键字:鼠标 滚动 对象 c++ opengl      更新时间:2023-10-16

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

我用了这两行:

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

然后,在绘图函数中,我这样做:

glTranslatef(x,0.0f,0.0f);

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

无论我如何移动鼠标,三角形都向右移动,从不向左移动。即使我上下移动鼠标,它也会向右移动。

我该如何解决这个问题?

这与glTranslatef相对于当前矩阵进行翻译的事实有关:每次翻译时,它都被添加到(技术上说是与)当前状态相乘。

您可能想要使用=而不是+=,并在那里添加glloadiidentity。我通常在每一帧的开始调用glloadiidentity。它将矩阵重置为初始状态,这意味着平移会像你期望的那样工作。有关glloadiidentity的更好解释,以及它背后的数学原理,请参阅这个问题。