使用鼠标移动

时间:2016-09-07 15:53:22

标签: c++ opengl geometry glut

我正在尝试使用函数mouseMove(int x,int y)绘制以鼠标为中心的圆圈,然后单击并将其拖动到屏幕上。将像移动的喷漆一样在移动的鼠标上绘制圆圈。到目前为止,这就是我所拥有的

void mouseMove(int x, int y) {
    glBegin(GL_POLYGON);
        for (int i = 0; i <= 360; i++)
        {
            float theta = (2 * 3.14 * i) / 360;
            glVertex2f((size/2 + x) * cos(theta), (size/2 + y) * sin(theta));
        }
    glEnd();
    glutPostRedisplay();
}

但是当使用它时,它会绘制非常大的圆圈,并不围绕我的鼠标。如何更改此项以使程序以鼠标为中心绘制圆圈?

为了描述这个项目,我正在创建一个绘图程序,它可以改变在mouseMove中完成的绘图的形状,颜色,大小和旋转。目前,size是一个int设置为32.当用户使用&#39; b&#39;键盘功能键,他/她可以切换用户点击鼠标周围绘制的形状并拖动鼠标。像喷漆一样。除了圆形喷雾外,所有其他形状都围绕鼠标成形。

1 个答案:

答案 0 :(得分:1)

这个答案假设你的视口和投影矩阵之类的东西设置正确,并且这个函数的输入考虑到了“屏幕坐标”(鼠标使用的)与“不同”的事实。 OpenGL坐标空间“(这通常意味着反转y轴的方向为一个或另一个)。

您用于设置顶点坐标的数学运算是错误的。鼠标的xy坐标不应乘以正弦/余弦函数。

正确的写作方式是

glVertex2f((size/2) * cos(theta) + x, (size/2) * sin(theta) + y);

我还想补充一点,你似乎仍在使用OpenGL的立即模式渲染,这是不推荐使用的,并且会为专业设置提供极差的培训。我强烈建议您学习Modern OpenGL(3.x +)并将这些概念重新应用到您正在处理的任何项目中。 This is a very good tutorial.