gpt4 book ai didi

c - 通过循环遍历 vector 链表,使用 opengl1 绘制线条

转载 作者:行者123 更新时间:2023-12-04 10:06:53 25 4
gpt4 key购买 nike

我以前问过 question关于将点击坐标附加到单链表中,为了遍历链表,在点击位置放置顶点并连接它们a linestrip with 6 vertices

给出的答案解决了我的链表溢出问题,但后来我遇到了显示功能的问题,因此当我遍历链表并将这些坐标添加到 glVertex2i(); 时,当我在图形窗口上多次单击时,它不会绘制线条。

我试着看看当我移除 while 会发生什么循环,但这会导致段错误。

这些是结构。

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

我已经宣布这些
Vector P;
node_v * prev;

并在对 my previous question 的回答的帮助下, 初始化 Vector P带有点击的坐标并附加到 vector 链表 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();
}

关于c - 通过循环遍历 vector 链表,使用 opengl1 绘制线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61540879/

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