版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、 bresenham算法画直线#include #include #include void draw_pixel(int ix,int iy)glBegin(GL_POINTS);glVertex2i(ix,iy);glEnd();void Bresenham(int x1,int y1,int xEnd,int yEnd)int dx=abs(xEnd-x1),dy=abs(yEnd-y1);int p=2*dy-dx;int twoDy=2*dy,twoDyMinusDx=2*dy-2*dx;int x,y;if (x1xEnd)x=xEnd;y=yEnd;xEnd=x1;elsex
2、=x1;y=y1;draw_pixel(x,y);while(xxEnd)x+;if(p0)p+=twoDy;elsey+;p+=twoDyMinusDx;draw_pixel(x,y);void display()glClear(GL_COLOR_BUFFER_BIT);Bresenham(0,0,400,400);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();gl
3、uOrtho2D(0.0,500.0,0.0,500.0);void main(int argc,char *argv )glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(500,500);glutInitWindowPosition(200.0,200.0);glutCreateWindow(CG_test_Bresenham_Line example);glutDisplayFunc(display);myinit();glutMainLoop();二、 中点法绘制椭圆#inc
4、lude #include #include inline int round(const float a)return int (a+0.5);void setPixel(GLint xCoord,GLint yCoord)glBegin(GL_POINTS);glVertex2i(xCoord,yCoord);glEnd();void ellipseMidpoint(int xCenter,int yCenter,int Rx,int Ry)int Rx2=Rx*Rx;int Ry2=Ry*Ry;int twoRx2=2*Rx2;int twoRy2=2*Ry2;int p;int x=0
5、;int y=Ry;int px=0;int py=twoRx2*y;void ellipsePlotPoints(int,int,int,int);ellipsePlotPoints(xCenter,yCenter,x,y);p=round(Ry2-(Rx2*Ry)+(0.25*Rx2);while(pxpy)x+;px+=twoRy2;if(p0)y-;py-=twoRx2;if(p0)p+=Rx2-py;elsex+;px+=twoRy2;p+=Rx2-py+px;ellipsePlotPoints(xCenter,yCenter,x,y);void ellipsePlotPoints(
6、int xCenter,int yCenter,int x,int y)setPixel(xCenter+x,yCenter+y);setPixel(xCenter-x,yCenter+y);setPixel(xCenter+x,yCenter-y);setPixel(xCenter-x,yCenter-y);void display()glClear(GL_COLOR_BUFFER_BIT);ellipseMidpoint(200,200,50,30);glFlush();void myinit()glClearColor(0.8,1.0,1.0,1.0);glColor3f(0.0,0.0
7、,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);glutInitWindowSize(300,300);glutInitWindowPosition(200.0,200.0);glutCreateWindow(circleMId example);glutDi
8、splayFunc(display);myinit();glutMainLoop();三、 抛物线#include #include #include inline int round(const float a)return int (a+0.5);void setPixel(GLint xCoord,GLint yCoord)glBegin(GL_POINTS);glVertex2i(xCoord,yCoord);glEnd();void ellipseMidpoint(int xCenter,int yCenter,int a,int b)int p;int x=xCenter;int
9、y=yCenter;int px=0,py=0;void ellipsePlotPoints(int,int,int,int);ellipsePlotPoints(xCenter,yCenter,px,py);p=yCenter+a*(x+1-xCenter)*(x+1-xCenter)+b*(x+1-xCenter)-y-0.5;doif(p0)x=x+1;y=y;p=yCenter+a*(x+1-xCenter)*(x+1-xCenter)+b*(x+1-xCenter)-y-0.5;elsex=x+1;y=y-1;p=yCenter+a*(x+1-xCenter)*(x+1-xCente
10、r)+b*(x+1-xCenter)-y-0.5;px=x-xCenter;py=y-yCenter;ellipsePlotPoints(xCenter,yCenter,px,py);while(pxpy);for(;)if(p0)x=x-1;y=y+1;p=yCenter+a*(x+0.5-xCenter)*(x+0.5-xCenter)+b*(x+0.5-xCenter)-y-1;elsex=x;y=y+1;p=yCenter+a*(x+0.5-xCenter)*(x+0.5-xCenter)+b*(x+0.5-xCenter)-y-1;px=x-xCenter;py=y-yCenter;
11、ellipsePlotPoints(xCenter,yCenter,px,py);void ellipsePlotPoints(int xCenter,int yCenter,int x,int y)setPixel(xCenter+x,yCenter+y);setPixel(xCenter-x,yCenter+y);void display()glClear(GL_COLOR_BUFFER_BIT);ellipseMidpoint(150,150,1,0);glFlush();void myinit()glClearColor(0.8,1.0,1.0,1.0);glColor3f(0.0,0
12、.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);glutInitWindowSize(500,500);glutInitWindowPosition(200.0,200.0);glutCreateWindow(circleMId example);glut
13、DisplayFunc(display);myinit();glutMainLoop();四、 基本图元输出#include #include #include void Polygon(int*p1,int*p2,int*p3,int*p4,int*p5,int*p6)glBegin(GL_POLYGON); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glVertex2iv(p4); glVertex2iv(p5); glVertex2iv(p6);glEnd();void Triangles(int*p1,int*p2,int*p
14、3,int*p4,int*p5,int*p6)glBegin(GL_TRIANGLES); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p6); glVertex2iv(p3); glVertex2iv(p4); glVertex2iv(p5);glEnd();void Trianglefan(int*p1,int*p2,int*p3,int*p4,int*p5,int*p6)glBegin(GL_TRIANGLE_FAN); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glVertex2
15、iv(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
16、(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,
17、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);glutInitWindowSize(500,500);glut
18、InitWindowPosition(300.0,300.0);glutCreateWindow(circleMId example);glutDisplayFunc(display);myinit();glutMainLoop();五、 区域填充#include glut.h#include windows.hconst int POINTNUM=7; /多边形点数./定义结构体用于活性边表AET和新边表NETtypedef struct XETfloat x;float dx,ymax;XET* next;AET,NET;/定义点结构体pointstruct pointfloat x;fl
19、oat y;polypointPOINTNUM=250,50,350,150,50,40,250,20,200,30,100,100,10,300;/多边形顶点void PolyScan()/计算最高点的y坐标(扫描到此结束)int MaxY=0;int i;for(i=0;iMaxY)MaxY=polypointi.y;/初始化AET表AET *pAET=new AET;pAET-next=NULL;/初始化NET表NET *pNET1024;for(i=0;inext=NULL;glClear(GL_COLOR_BUFFER_BIT); /赋值的窗口显示. glColor3f(0.9,1.
20、0,0.0); /设置直线的颜色红色glBegin(GL_POINTS);/扫描并建立NET表,注:构建一个图形for(i=0;i=MaxY;i+)for(int j=0;jpolypointj.y)NET *p=new NET;p-x=polypointj.x;p-ymax=polypoint(j-1+POINTNUM)%POINTNUM.y;p-dx=(polypoint(j-1+POINTNUM)%POINTNUM.x-polypointj.x)/(polypoint(j-1+POINTNUM)%POINTNUM.y-polypointj.y);p-next=pNETi-next;pNE
21、Ti-next=p;if(polypoint(j+1+POINTNUM)%POINTNUM.ypolypointj.y)NET *p=new NET; p-x=polypointj.x;p-ymax=polypoint(j+1+POINTNUM)%POINTNUM.y;p-dx=(polypoint(j+1+POINTNUM)%POINTNUM.x-polypointj.x)/(polypoint(j+1+POINTNUM)%POINTNUM.y-polypointj.y);p-next=pNETi-next;pNETi-next=p;for(i=0;inext;while(p)p-x=p-x
22、 + p-dx;p=p-next;AET *tq=pAET;p=pAET-next;tq-next=NULL;while(p)while(tq-next & p-x = tq-next-x)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)if(p-ymax=i)q-next=p-next;delete p;p=q-next;elseq=q-next;p=q-next;/将NET中的新点加入AET,并用插入法按X值递增排序p=pNETi-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;/配对填充颜色p=pAET-next;while(p & p-next)for(float j=p-x;jnext-x;j+)glVertex2i(s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- LY/T 3445-2025森林草原防火术语
- 护理实践中的安全问题
- 消化内镜护理中的职业防护
- 平台先行赔付协议书
- 中天钢铁师徒协议书
- 船用阀门研磨加工服务协议
- 威海卫健委考试题及答案
- 2023年浙江杭州中考数学真题卷及答案不含大智学校小班一对一辅导大智学校资料有济南临沂青岛分校
- 2026年运动相关性肾损伤诊疗试题及答案(肾内科版)
- 2026年小型企业财务外包合同协议
- 独舞大赛活动方案
- 电力拖动自动控制系统-运动控制系统(第5版)习题答案
- DBJ51T214-2022四川省蒸压加气混凝土隔墙板应用技术标准
- 第九讲:信息与大数据伦理问题-工程伦理
- 居间合同协议书范本下载
- 码头防汛培训
- 儿科无创呼吸机的护理
- 2025陕西交通职业技术学院辅导员考试题库
- 2025人教版(2024)小学美术一年级下册教学计划、教学设计及教学反思(附目录)
- 2025年10月自考自考14056培训与人力资源开发押题及答案
- 路基施工技术培训课件
评论
0/150
提交评论