OpenGL计算机图形学梁友栋裁剪算法实验代码及运行结果

上传人:桔**** 文档编号:464251323 上传时间:2023-10-17 格式:DOC 页数:9 大小:302.50KB
返回 下载 相关 举报
OpenGL计算机图形学梁友栋裁剪算法实验代码及运行结果_第1页
第1页 / 共9页
OpenGL计算机图形学梁友栋裁剪算法实验代码及运行结果_第2页
第2页 / 共9页
OpenGL计算机图形学梁友栋裁剪算法实验代码及运行结果_第3页
第3页 / 共9页
OpenGL计算机图形学梁友栋裁剪算法实验代码及运行结果_第4页
第4页 / 共9页
OpenGL计算机图形学梁友栋裁剪算法实验代码及运行结果_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《OpenGL计算机图形学梁友栋裁剪算法实验代码及运行结果》由会员分享,可在线阅读,更多相关《OpenGL计算机图形学梁友栋裁剪算法实验代码及运行结果(9页珍藏版)》请在金锄头文库上搜索。

1、计算机图形学试验汇报任课教师:钱文华春季学期试验:梁友栋裁剪试验时间:11月17日试验地点:信息学院2204试验目旳:掌握梁友栋裁剪程序代码:#include #include #include #include class wcPt2Dpublic:GLfloat x,y;void setCoords(GLfloat xCoord,GLfloat yCoord)x=xCoord;y=yCoord;GLfloat getx() constreturn x;GLfloat gety() constreturn y;inline GLint round(const GLfloat a)return

2、 GLint(a+0.5);void setPixel(int x,int y)glBegin(GL_POINTS);glVertex2i(x,y);glEnd();void init()glClearColor(1.0,1.0,1.0,0.0);glMatrixMode (GL_PROJECTION);gluOrtho2D(-200.0,200.0,-200.0,200.0);void lineBres(GLfloat x0,GLfloat y0,GLfloat xEnd,GLfloat yEnd)int dx = fabs(xEnd - x0),dy = fabs(yEnd - y0);i

3、nt p = 2*dy - dx;int twoDy = 2*dy,twoDyMinusDx = 2*(dy - dx);int x,y;if(x0xEnd)x = xEnd;y = yEnd;xEnd = x0;elsex = x0;y = y0;setPixel(x,y);while(xxEnd)x+;if(p0)p+=twoDy;elsey+;p+=twoDyMinusDx;setPixel(x,y);GLint clipTest(GLfloat p,GLfloat q,GLfloat *u1,GLfloat *u2)GLfloat r;GLint returnValue = true;

4、if(p*u2)returnValue = false;elseif(r*u1)*u1 = r;elseif(p0.0)r = q/p;if(r*u1)returnValue = false;else if(r*u2)*u2 = r;elseif(q0.0)returnValue = false;return(returnValue);void lineClipLiangBarsk(wcPt2D winMin,wcPt2D winMax,wcPt2D p1,wcPt2D p2)GLfloat u1 = 0.0,u2 = 1.0,dx = p2.getx()-p1.getx(),dy;GLflo

5、at x1 = p1.getx(),y1 = p1.gety();GLfloat x2 = p2.getx(),y2 = p2.gety();if(clipTest(-dx,p1.getx()-winMin.getx(),&u1,&u2)if(clipTest(dx,winMax.getx()-p1.getx(),&u1,&u2)dy = p2.gety()-p1.gety();if(clipTest(-dy,p1.gety()-winMin.gety(),&u1,&u2)if(clipTest(dy,winMax.gety()-p1.gety(),&u1,&u2)if(u20.0)p1.se

6、tCoords(p1.getx()+u1*dx,p1.gety()+u1*dy);glColor3f(0.0,0.0,0.0);lineBres(x1,y1,p1.getx(),p1.gety();lineBres(p2.getx(),p2.gety(),x2,y2);glColor3f(1.0,0.0,0.0);lineBres(p1.getx(),p1.gety(),p2.getx(),p2.gety();elseglColor3f(0.0,0.0,0.0);lineBres(x1,y1,x2,y2);void displayliangyoudongcaijian()glClear(GL_

7、COLOR_BUFFER_BIT);glLineWidth(5.0);glColor3f(0.0,0.0,0.0);glBegin(GL_LINE_LOOP);glVertex2i(100,100);glVertex2i(100,-100);glVertex2i(-100,-100);glVertex2i(-100,100);glEnd();glPointSize(4);wcPt2D test14 = -100.0,-100.0,100.0,100.0,-150.0,-200.0,200.0,120.0;wcPt2D test24 = -100.0,-100.0,100.0,100.0,-15

8、0.0,-120.0,0.0,0.0;wcPt2D test34 = -100.0,-100.0,100.0,100.0,-50.0,50.0,150.0,150.0;wcPt2D test44 = -100.0,-100.0,100.0,100.0,-50.0,0.0,60.0,50.0;wcPt2D test54 = -100.0,-100.0,100.0,100.0,-170.0,-200.0,200.0,-120.0;lineClipLiangBarsk(test10,test11,test12,test13);lineClipLiangBarsk(test20,test21,test

9、22,test23);lineClipLiangBarsk(test30,test31,test32,test33);lineClipLiangBarsk(test40,test41,test42,test43);lineClipLiangBarsk(test50,test51,test52,test53);glFlush();void main(int argc, char* argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowPosition(50,100);glutInitWindowSize(400,300);glutCreateWindow(梁友栋裁剪算法);init();glutDisplayFunc(displayliangyoudongcaijian);glutMainLoop();试验成果:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号