在Opengl应用框架下实现C-S裁剪算法
计算机图形学上机试验报告 姓名 学号 20147770228 试验 题目 Cohen-Sutherland裁剪算法 实 验 设 计 (必做)在Opengl应用框架下实现C-S裁剪算法。 完成一个四边形对两条线段的裁剪 四边形的左上角和右下角顶点分别为(100,100),(300,200), 线段1的两个端点为(150,50),250,150; 线段2的两个端点为(180,50),(180,380)。 关 键 代 码 include GL/glut.h // OPenGL好用工具库 const int XL100; const int XR300; const int YB100; const int YT200; int x1150,y150,x2250,y2150; define LIFT 1 define RIGHT 2 define BOTTOM 4 define TOP 8 char encodefloat x,float y { char c0; ifxXL c|LIFT; ifxXR c|RIGHT; ifyYB c|BOTTOM; ifyYT c|TOP; return c; } void CSLineClipint x1,int y1,int x2,int y2,int XL,int XR,int YB,int YT { char code1encodex1,y1; char code2encodex2,y2; int x,y; char code 3; while code1||code2 { ifcode1 0 { codecode1; }else { codecode2; } ifcode LIFT 0 { xXL; float kfloaty2-y1/x2-x1; yintk*XL-x1y10.5; } else ifcode RIGHT 0 { xXR; float kfloaty2-y1/x2-x1; yintk*XR-x1y10.5; } else ifcode BOTTOM 0 { yYB; float kfloatx2-x1/y2-y1; xintk*y-y1x10.5; } else ifcode TOP 0 { yYT; float kfloatx2-x1/y2-y1; xintk*y-y1x10.5; } ifcodecode1 { x1x; y1y; code1encodex,y; } else ifcodecode2 { x2x; y2y; code2encodex,y; } } } void initvoid { glClearColor1.0, 1.0, 1.0, 0.0; // 设置背景颜色 glMatrixModeGL_PROJECTION; // 设置投影参数 gluOrtho2D0.0, 600.0, 0.0, 400.0; // 设置场景的大小 } void drawvoid { glClearGL_COLOR_BUFFER_BIT; glColor3f1.0, 0.0, 0.0; // 设置画图颜色 glBeginGL_LINE_LOOP; glVertex2iXL, YB; // 绘制几何图形 glVertex2iXR, YB; glVertex2iXR, YT; glVertex2iXL, YT; glEnd ; glBeginGL_LINES; glVertex2ix1, y1; // 绘制几何图形 glVertex2ix2, y2; glEnd ; CSLineClipx1,y1,x2,y2,XL,XR,YB,YT; glColor3f1.0, 0.0, 0.0; glLineWidth3.0; glBeginGL_LINES; glVertex2ix1, y1; // 绘制几何图形 glVertex2ix2, y2; glEnd ; gl ; // 处理绘图pipeLine } void mainint argc, char** argv { glutInitargc, argv; // 初始化GLUT环境 glutInitDisplayModeGLUT_SINGLE | GLUT_RGB; // GLUT显示模式单缓冲区、RGB颜色模型 glutInitWindowPosition50, 100; // 窗口左上角的位置 glutInitWindowSize600, 450; // 显示窗口的大小 glutCreateWindowAn Example of OpenGL; // 创建显示窗口,加上标题 init ; glutDisplayFuncdraw; // 调用绘图函数 glutMainLoop ; // 进入事务处理循环 } 运 行 截 图 注表格高度可依据内容自己调整。