gpt4 book ai didi

c++ - OpenGL-如何移动打印线?

转载 作者:行者123 更新时间:2023-12-03 07:26:10 25 4
gpt4 key购买 nike

我已经设置了一个在main()中调用的鼠标函数,如下所示:

struct point
{
int x;
int y;
};

std::vector <point> points;
point OnePoint;

void processMouse(int button, int state, int x, int y)
{

if ((button == GLUT_LEFT_BUTTON) && (state == GLUT_DOWN))
{
int yy;
yy = glutGet(GLUT_WINDOW_HEIGHT);
y = yy - y; /* In Glut, Y coordinate increases from top to bottom */
OnePoint.x = x;
OnePoint.y = y;
points.push_back(OnePoint);
}
glutPostRedisplay();
}

并在顶点上打印一条线,我在显示函数中编写了一些代码,使我能够做到这一点:
glBegin(GL_LINES);
glColor3f(1.0, 0.0, 0.0);

for (int i = 0; i < points.size();i++)
{
glVertex2i(points[i].x, points[i].y);
}

glEnd();

但是,现在我想做的是,当我单击正确的箭头键时,将所有行向左或向右移动,但我不知道如何操作。

我知道它可能类似于:
glVertex2i(points[i].x + 10, points[i].y); //沿x轴移动点10

但是,由于 i超出了 for loop,我收到了错误消息

最佳答案

您应该引入一个新变量:

std::vector <point> points;
point offset; // <- how much to offset points

确保在初始化期间将其设置为零。

然后在绘图代码中将偏移量添加到每个点:
glBegin(GL_LINES);
glColor3f(1.0, 0.0, 0.0);
for (int i = 0; i < points.size();i++)
glVertex2i(points[i].x + offset.x, points[i].y + offset.y);
glEnd();

或使用翻译矩阵自动执行此操作:
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glTranslatef(offset.x, offset.y, 0);
glBegin(GL_LINES);
glColor3f(1.0, 0.0, 0.0);
for (int i = 0; i < points.size();i++)
glVertex2i(points[i].x, points[i].y);
glEnd();
glPopMatrix();

在按键处理程序上,您只需更改 offset:
// left-arrow:
offset.x -= 1;

// right-arrow:
offset.x += 1;

...

关于c++ - OpenGL-如何移动打印线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40292974/

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