我正在尝试使用函数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;键盘功能键,他/她可以切换用户点击鼠标周围绘制的形状并拖动鼠标。像喷漆一样。除了圆形喷雾外,所有其他形状都围绕鼠标成形。
答案 0 :(得分:1)
这个答案假设你的视口和投影矩阵之类的东西设置正确,并且这个函数的输入考虑到了“屏幕坐标”(鼠标使用的)与“不同”的事实。 OpenGL坐标空间“(这通常意味着反转y轴的方向为一个或另一个)。
您用于设置顶点坐标的数学运算是错误的。鼠标的x
和y
坐标不应乘以正弦/余弦函数。
正确的写作方式是
glVertex2f((size/2) * cos(theta) + x, (size/2) * sin(theta) + y);
我还想补充一点,你似乎仍在使用OpenGL的立即模式渲染,这是不推荐使用的,并且会为专业设置提供极差的培训。我强烈建议您学习Modern OpenGL(3.x +)并将这些概念重新应用到您正在处理的任何项目中。 This is a very good tutorial.