通过循环访问向量的链接列表,使用 opengl1 绘制线条

Drawing a linestrip with opengl1 by looping through a linked list of vectors

我之前问过一个 about appending coordinates of clicks to a singly linked list, in order to loop through the linked list ,put vertices at the positions of the clicks and connect them

给出的答案解决了我的链表溢出问题,但后来我在显示功能方面遇到了问题,以至于当我循环遍历链表并将这些坐标添加到 glVertex2i(); 时,它没有'在图形 window.

上多次单击时未绘制线条

我试图看看当我删除 while 循环时会发生什么,但这会导致分段错误。

这些是结构。

typedef struct vector{int x;int y;}Vector;
typedef struct VectorList{Vector X; struct VectorList*next; }node_v;

我已经声明了这些

Vector P;
node_v * prev;

并借助 的答案,用点击的坐标初始化 Vector P 并附加到向量链表 node_v * prev;

static void _display_CB()
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glOrtho(0,window_width,window_height,0,-1,1);

    glClear(GL_COLOR_BUFFER_BIT);

    glColor3ub(0,0,0);
    glBegin(GL_LINE_STRIP);
    while(prev){
        glVertex2i( prev->X.x, prev->X.y);
        prev=prev->next;
    }

    glEnd();
    glFlush();
  glutSwapBuffers();
glutPostRedisplay();
}

_display_CB()需要做哪些改动才能让程序像图中那样画出线条?

prev 是列表的头部。当您执行 elem = elem->next; 时,您实际上将列表的头部更改为列表的尾部。保留列表的头部并使用局部变量 elem 遍历列表。
此外,正交投影矩阵 glOrtho 应设置为当前投影矩阵 (GL_PROJECTION):

void _display_CB() {

    node_v * elem = prev;

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, window_width, window_height, 0, -1, 1);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glClear(GL_COLOR_BUFFER_BIT);

    glColor3ub(0, 0, 0);
    glBegin(GL_LINE_STRIP);
    while(elem){
        glVertex2i(elem->X.x, elem->X.y);
        elem = elem->next;
    }
    glEnd();

    glutSwapBuffers();
    glutPostRedisplay();
}