OpenGL绘制圆与鼠标移动

OpenGL draw circle with Mouse Move

本文关键字:鼠标 移动 绘制 OpenGL      更新时间:2023-10-16

我试图使用函数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中完成的图形的形状、颜色、大小和旋转。现在,大小是一个设置为32的整型。当用户使用键盘功能中的"b"键选择形状时,他/她可以在用户单击和拖动鼠标时切换在鼠标周围绘制的形状。就像喷漆一样。除了圆形喷雾外,所有其他形状都可以围绕鼠标工作。

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

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

正确的写法是

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

我还要补充一点,你似乎仍然在使用OpenGL的即时模式渲染,这是不赞成的,并且将为专业设置提供极差的培训。我强烈建议你学习Modern OpenGL (3.x+),并将这些概念重新应用到你已经在做的任何项目中。这是一个非常好的教程