Я пытаюсь провести сегменты линии в openGL. В какой-то момент в моей программе я возвращаю стандартные пары, содержащие координаты X и Y. Я оставил код, где я нажимаю координаты X и Y в вектор из этого сообщения. Я поставил точку останова и подтвердил, что точки внутри вектора являются точками, которые я ожидаю находиться внутри вектора.Проблема с итерацией по вектору пар для рисования линий
Моя проблема заключается в том, что цикл for, где я перебираю вектор пар, ведет себя странно. Если я помещаю точку останова в цикл for, она только срабатывает, когда итератор указывает на последнюю вещь в векторе. Если я попытаюсь распечатать значения с помощью кода с комментариями в цикле for, будут распечатываться только данные последней пары в векторе.
Стоит отметить, что оси X и Y рисуют без проблем. И если я загляну внутрь вектора, посмотрите значения, которые я хочу, а затем жестко задайте эти значения в glVertex2f, они рисуют правильно. Поэтому основная проблема заключается в том, что я не могу заставить код внутри цикла for работать. Я предполагаю, что по какой-то причине цикл for происходит только один раз, поэтому только одна вершина отправляется в openGL, и поэтому в результате этого цикла нет линий.
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;
}
это = vertices.end() - 1 ... что -1 здесь требуется ?? – basav
для (std :: vector :: iterator it = v.begin(); it! = V.end(); ++ it) {} .. это не работает? –
basav
@basav, если у меня нет -1, я получаю сообщение об ошибке Debug Assertion, Expression: векторный итератор не может быть разыменован. –