gpt4 book ai didi

c++ - OpenGL 用鼠标移动画圆

转载 作者:行者123 更新时间:2023-11-28 05:31:42 27 4
gpt4 key购买 nike

我正在尝试使用函数 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”键选择形状时,他/她可以在用户单击并拖动鼠标时切换鼠标周围绘制的形状大约。就像喷漆一样。除圆形喷雾外,所有其他形状都围绕着鼠标工作。

最佳答案

这个答案假设你的视口(viewport)和投影矩阵之类的东西设置正确,并且这个函数的输入考虑到“屏幕坐标”(鼠标使用的)与“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.

关于c++ - OpenGL 用鼠标移动画圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39374433/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com