计算机图形学实验C++代码

发布时间 : 星期一 文章计算机图形学实验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(j),i);

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

联系合同范文客服:xxxxx#qq.com(#替换为@)