OpenGL绘制圆与鼠标移动
OpenGL draw circle with Mouse Move
我试图使用函数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轴方向)。
你用来设置顶点坐标的数学是错误的。鼠标的x
和y
坐标不应乘以正弦/余弦函数。
正确的写法是
glVertex2f((size/2) * cos(theta) + x, (size/2) * sin(theta) + y);
我还要补充一点,你似乎仍然在使用OpenGL的即时模式渲染,这是不赞成的,并且将为专业设置提供极差的培训。我强烈建议你学习Modern OpenGL (3.x+),并将这些概念重新应用到你已经在做的任何项目中。这是一个非常好的教程
相关文章:
- SendInput()鼠标移动计算
- Win32 发送输入鼠标移动滞后并冻结
- 如何通过拖动鼠标QT检查按钮?鼠标移动事件
- 使用具有设置延迟C++的mouse_event平滑鼠标移动
- Qt将鼠标移动事件转移到新窗口
- Qt 如何使用鼠标移动事件移动视图
- 触发鼠标按下事件,但不触发鼠标移动事件
- 发送到另一个窗口的鼠标移动消息不执行任何操作
- 如何将双精度类型的鼠标移动 x 和 y 从主机传递到 Qemu 中的虚拟机
- GLFW 不会检测到 GLFW 窗口外的鼠标移动
- QT QTest::键单击或鼠标移动似乎不适用于 QMenu 在我的情况下
- MFC GUI 自定义控件:如何绘制光标更新以响应鼠标移动?
- 在Qt5的OpenGL绘图中通过鼠标移动计算对象旋转角度
- SDL2 中的 GLFW 风格的无限鼠标移动
- 如何使用SFML鼠标移动分别移动多个图像
- 当光标锁定在屏幕中时,如何获得鼠标移动
- 当鼠标移动时,如何从wm_mousemove中获得每个像素坐标
- 如何在使用鼠标移动时捕捉QWidget几何图形
- 在Qt中获取原始鼠标移动
- 在eventFilter()中未捕获Qt鼠标移动事件