迭代向量对以绘制线条的问题
Issue with iterating over vector of pairs to draw lines
我正在尝试在 openGL 中绘制线段。在我的程序中的某个时刻,我推回包含 X 和 Y 坐标的标准对。我留下了将 X 和 Y 坐标推入矢量的代码 post。我已经放置了一个断点并确认向量内的点是我期望在向量内的点。
我的问题是 for 循环(我在其中迭代向量对)表现异常。如果我在 for 循环中放置一个断点,它只会在迭代器指向向量中的最后一个东西时触发。如果我尝试在 for 循环中使用注释掉的代码打印出值,则只会打印向量中最后一对的数据。
值得注意的是,它们的 X 轴和 Y 轴绘制没有问题。如果我查看矢量内部,看到我想要的值,然后将这些值硬编码到 glVertex2f 中,它们就会正确绘制。所以核心问题是我无法让 for 循环中的代码工作。我的猜测是,出于某种原因,for 循环只发生一次,因此只有一个顶点被发送到 openGL,因此没有绘制任何线条作为 for 循环的结果。
void Draw(void)
{
// clear the screen
glClearColor(1, 1, 1, 0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0, 0, 0);
glBegin(GL_LINES);
//Draws the Y Axis
glVertex2f(0, 1);
glVertex2f(0, -1);
//Draws the X axis
glVertex2f(1, 0);
glVertex2f(-1, 0);
std::vector<std::pair<float, float>>::iterator it;
for (it = vertices.begin(); it != vertices.end() - 1; ++it);
{
glVertex2f(it->first, it->second);
//std::cout << "vertices.size.." << vertices.size() << std::endl;
//std::cout << vertices.at(i).first << " " << vertices.at(i).second << "i: " << i << std::endl;
}
glEnd();
glutSwapBuffers();
}
void Loop(void)
{
glutPostRedisplay();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(0, 0);
glutInitWindowSize(width, height);
glutCreateWindow(name);
glutDisplayFunc(Draw);
glutIdleFunc(Loop);
Init();
glutMainLoop();
return 0;
}
我试过你的 code.It 很奇怪,大小打印正确,但循环内没有打印任何元素。
无论如何,另一种方法(不是最好的)但是可行的是:
for(int i = 0;i<vertices.size();++i)
{
glVertex2f(vertices[i].first, vertices[i].second);
}
我正在尝试在 openGL 中绘制线段。在我的程序中的某个时刻,我推回包含 X 和 Y 坐标的标准对。我留下了将 X 和 Y 坐标推入矢量的代码 post。我已经放置了一个断点并确认向量内的点是我期望在向量内的点。
我的问题是 for 循环(我在其中迭代向量对)表现异常。如果我在 for 循环中放置一个断点,它只会在迭代器指向向量中的最后一个东西时触发。如果我尝试在 for 循环中使用注释掉的代码打印出值,则只会打印向量中最后一对的数据。
值得注意的是,它们的 X 轴和 Y 轴绘制没有问题。如果我查看矢量内部,看到我想要的值,然后将这些值硬编码到 glVertex2f 中,它们就会正确绘制。所以核心问题是我无法让 for 循环中的代码工作。我的猜测是,出于某种原因,for 循环只发生一次,因此只有一个顶点被发送到 openGL,因此没有绘制任何线条作为 for 循环的结果。
void Draw(void)
{
// clear the screen
glClearColor(1, 1, 1, 0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0, 0, 0);
glBegin(GL_LINES);
//Draws the Y Axis
glVertex2f(0, 1);
glVertex2f(0, -1);
//Draws the X axis
glVertex2f(1, 0);
glVertex2f(-1, 0);
std::vector<std::pair<float, float>>::iterator it;
for (it = vertices.begin(); it != vertices.end() - 1; ++it);
{
glVertex2f(it->first, it->second);
//std::cout << "vertices.size.." << vertices.size() << std::endl;
//std::cout << vertices.at(i).first << " " << vertices.at(i).second << "i: " << i << std::endl;
}
glEnd();
glutSwapBuffers();
}
void Loop(void)
{
glutPostRedisplay();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(0, 0);
glutInitWindowSize(width, height);
glutCreateWindow(name);
glutDisplayFunc(Draw);
glutIdleFunc(Loop);
Init();
glutMainLoop();
return 0;
}
我试过你的 code.It 很奇怪,大小打印正确,但循环内没有打印任何元素。
无论如何,另一种方法(不是最好的)但是可行的是:
for(int i = 0;i<vertices.size();++i)
{
glVertex2f(vertices[i].first, vertices[i].second);
}