当前位置:首页 > 计算机图形学实验C++代码
}
}
p=yCenter+a*(x+1-xCenter)*(x+1-xCenter)+b*(x+1-xCenter)-y-0.5;
px=x-xCenter; py=y-yCenter;
ellipsePlotPoints(xCenter,yCenter,px,py);
}while(px if(p<0) { } else{ } px=x-xCenter; py=y-yCenter; ellipsePlotPoints(xCenter,yCenter,px,py); x=x; y=y+1; p=yCenter+a*(x+0.5-xCenter)*(x+0.5-xCenter)+b*(x+0.5-xCenter)-y-1; x=x-1; y=y+1; p=yCenter+a*(x+0.5-xCenter)*(x+0.5-xCenter)+b*(x+0.5-xCenter)-y-1; void ellipsePlotPoints(int xCenter,int yCenter,int x,int y) { } void display() { } void myinit() { } void main(int argc,char **argv ) { 5 glClearColor(0.8,1.0,1.0,1.0); glColor3f(0.0,0.0,1.0); glPointSize(1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,300.0,0.0,300.0); glClear(GL_COLOR_BUFFER_BIT); ellipseMidpoint(150,150,1,0); glFlush(); setPixel(xCenter+x,yCenter+y); setPixel(xCenter-x,yCenter+y); } glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(200.0,200.0); glutCreateWindow(\); glutDisplayFunc(display); myinit(); glutMainLoop(); 四、 基本图元输出 #include void Polygon(int*p1,int*p2,int*p3,int*p4,int*p5,int*p6) { } void Triangles(int*p1,int*p2,int*p3,int*p4,int*p5,int*p6) { } void Trianglefan(int*p1,int*p2,int*p3,int*p4,int*p5,int*p6) { glBegin(GL_TRIANGLE_FAN); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glVertex2iv(p4); glVertex2iv(p5); glVertex2iv(p6); glEnd(); 6 glBegin(GL_TRIANGLES); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p6); glVertex2iv(p3); glVertex2iv(p4); glVertex2iv(p5); glEnd(); glBegin(GL_POLYGON); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glVertex2iv(p4); glVertex2iv(p5); glVertex2iv(p6); glEnd(); } void Trianglestrip(int*p1,int*p2,int*p3,int*p4,int*p5,int*p6) { glBegin(GL_TRIANGLE_STRIP); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p6); glVertex2iv(p3); glVertex2iv(p5); glVertex2iv(p4); glEnd(); } void glRect_s(GLint a,GLint b,GLint c,GLint d) { glRecti(a,b,c,d); } void display() { int p1[]={60,170}; int p2[]={100,100}; int p3[]={180,100}; int p4[]={220,170}; int p5[]={180,240}; int p6[]={100,240}; int p7[]={60,100}; glClear(GL_COLOR_BUFFER_BIT); //Triangles(p1,p2,p3,p4,p5,p6); //Polygon(p1,p2,p3,p4,p5,p6); //glRect_s(160,30,10,100); Trianglestrip(p1,p2,p3,p4,p5,p6); //Trianglefan(p1,p2,p3,p4,p5,p6); glFlush(); } void myinit() { glClearColor(0.8,1.0,1.0,1.0); glColor3f(0.0,0.0,1.0); glPointSize(1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,300.0,0.0,300.0); } void main(int argc,char **argv ) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); 7 } glutInitWindowSize(500,500); glutInitWindowPosition(300.0,300.0); glutCreateWindow(\); glutDisplayFunc(display); myinit(); glutMainLoop(); 五、 区域填充 #include \#include \ const int POINTNUM=7; //多边形点数. //定义结构体用于活性边表AET和新边表NET typedef struct XET { float x; float dx,ymax; XET* next; }AET,NET; //定义点结构体point struct point { float x; float y; }polypoint[POINTNUM]={250,50,350,150,50,40,250,20,200,30,100,100,10,300};//多边形顶点 void PolyScan() { //初始化NET表 NET *pNET[1024]; for(i=0;i<=MaxY;i++) { } glClear(GL_COLOR_BUFFER_BIT); //赋值的窗口显示. 8 pNET[i]=new NET; pNET[i]->next=NULL; //初始化AET表 AET *pAET=new AET; pAET->next=NULL; //计算最高点的y坐标(扫描到此结束) int MaxY=0; int i; for(i=0;i if(polypoint[i].y>MaxY) MaxY=polypoint[i].y;
共分享92篇相关文档