当前位置:首页 > 计算机图形学实验C++代码
glColor3f(0.9,1.0,0.0); //设置直线的颜色红色 glBegin(GL_POINTS);
//扫描并建立NET表,注:构建一个图形 for(i=0;i<=MaxY;i++) {
for(int j=0;j if(polypoint[j].y==i) { //一个点跟前面的一个点形成一条线段,跟后面的点也形成线段 if(polypoint[(j-1+POINTNUM)%POINTNUM].y>polypoint[j].y) { } if(polypoint[(j+1+POINTNUM)%POINTNUM].y>polypoint[j].y) { NET *p=new NET; p->x=polypoint[j].x; p->ymax=polypoint[(j+1+POINTNUM)%POINTNUM].y; p->dx=(polypoint[(j+1+POINTNUM)%POINTNUM].x-polypoint[j].x)/(polypoint NET *p=new NET; p->x=polypoint[j].x; p->ymax=polypoint[(j-1+POINTNUM)%POINTNUM].y; p->dx=(polypoint[(j-1+POINTNUM)%POINTNUM].x-polypoint[j].x)/(polypoint[(j- 1+POINTNUM)%POINTNUM].y-polypoint[j].y); p->next=pNET[i]->next; pNET[i]->next=p; } } } [(j+1+POINTNUM)%POINTNUM].y-polypoint[j].y); p->next=pNET[i]->next; pNET[i]->next=p; for(i=0;i<=MaxY;i++) { //计算新的交点x,更新AET NET *p=pAET->next; while(p) { } AET *tq=pAET; p=pAET->next; tq->next=NULL; while(p) { while(tq->next && p->x >= tq->next->x) 9 p->x=p->x + p->dx; p=p->next; } tq=tq->next; NET *s=p->next; p->next=tq->next; tq->next=p; p=s; tq=pAET; //(改进算法)先从AET表中删除ymax==i的结点* AET *q=pAET; p=q->next; while(p) { } //将NET中的新点加入AET,并用插入法按X值递增排序 p=pNET[i]->next; q=pAET; while(p) { } //配对填充颜色 while(q->next && p->x >= q->next->x) q=q->next; NET *s=p->next; p->next=q->next; q->next=p; p=s; q=pAET; if(p->ymax==i) { } else { } q=q->next; p=q->next; q->next=p->next; delete p; p=q->next; p=pAET->next; while(p && p->next) { } 10 for(float j=p->x;j<=p->next->x;j++) glVertex2i(static_cast p=p->next->next;//考虑端点情况 } void init(void) {glClearColor(1.0,1.0,1.0,0.0); //窗口的背景颜色设置为白色 glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,600.0,0.0,450.0); } void lineSegment(void) { } void main(int argc,char* argv) { } glutInit(&argc,&argv); //I初始化GLUT. glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //设置显示模式:单个缓存和使用RGB模型 glutInitWindowPosition(50,100); //设置窗口的顶部和左边位置 glutInitWindowSize(400,300); //设置窗口的高度和宽度 glutCreateWindow(\扫描线填充算法\); //创建显示窗口 init(); //调用初始化过程 glutDisplayFunc(PolyScan); //图形的定义传递 glutMainLoop(); //显示所有的图形并等待 glClear(GL_COLOR_BUFFER_BIT); //赋值的窗口显示. glColor3f(0.0,1.0,0.0); //设置直线的颜色红色 glBegin(GL_LINES); glVertex2i(180,15); //Specify line-segment geometry. glVertex2i(10,145); glEnd(); glFlush(); //Process all OpenGL routines as quickly as possible. } glEnd(); glFlush(); 11
共分享92篇相关文档