ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:25KB ,
资源ID:22849986      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22849986.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(CG实验4裁剪Word格式文档下载.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

CG实验4裁剪Word格式文档下载.docx

1、如果上述两种条件都不成立,则按第三种情况处理。求出线段与窗口某边的交点,在交点处把线段一分为二,其中必有一段完全在窗口外,可弃之,对另一段则重复上述处理。4实验代码:#include stdio.hstdlib.hvoid LineGL(int x0,int y0,int x1,int y1)glBegin (GL_LINES);glColor3f (1.0f, 0.0f, 0.0f); glVertex2f (x0,y0);glColor3f (0.0f, 1.0f, 0.0f); glVertex2f (x1,y1);glEnd ();struct outcodeunsigned all;

2、unsigned left,right,top,bottom;struct Rectanglefloat xmin,xmax,ymin,ymax;Rectangle rect;int x0,y0,x1,y1;GLboolean bClip = false;void compoutcode(float x,float y,Rectangle rect,outcode *outcode)outcode-all=0;top=outcode-bottom=0;if(y(float)rect.ymax)top=1; all+=1;else if(yleft=0;if(x(float)rect.xmax)

3、 right=1;else if(xleft)y=y0+(y1-y0)*(rect.xmin-x0)/(x1-x0);x=(float)rect.xmin;else if(outcodeout-top)x=x0+(x1-x0)*(rect.ymax-y0)/(y1-y0);y=(float)rect.ymax;right)y=y0+(y1-y0)*(rect.xmax-x0)/(x1-x0);x=(float)rect.xmax;bottom)x=x0+(x1-x0)*(rect.ymin-y0)/(y1-y0);y=(float)rect.ymin;all=outcode0.all)x0=x

4、;y0=y;x1=x;y1=y;while(!done);if(accept)LineGL(x0,y0,x1,y1);return accept;void myDisplay()glClear(GL_COLOR_BUFFER_BIT);glRectf(rect.xmin,rect.ymin,rect.xmax,rect.ymax);if (!bClip)cohensutherlandlineclip(rect, x0,y0,x1,y1);glFlush();void Init()glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_FLAT);rec

5、t.xmin=100; /窗口的大小rect.xmax=300;rect.ymin=100;rect.ymax=300;x0 = 450,y0 = 0, x1 = 0, y1 = 450;/裁剪前的直线端点printf(Press key c to Clip!nPress key r to Restore!n);void Reshape(int w, int h)glViewport(0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0, (GLdouble) w,

6、 0.0, (GLdouble) h);void keyboard(unsigned char key, int x, int y)switch (key)case :bClip = true;glutPostRedisplay();/重画break;bClip = false;Init();/xexit(0);default:int main(int argc, char *argv)glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100, 100);glutIn

7、itWindowSize(640, 480);glutCreateWindow(Hello World!glutDisplayFunc(myDisplay);glutReshapeFunc(Reshape);glutKeyboardFunc(keyboard);glutMainLoop();return 0;5实验思考题请分别给出直线的三种不同位置情况,测试实验代码是否存在问题,有的话请调试改正。可能的话,可以尝试实现梁友栋裁剪算法。glut.hvoid LineGL(int x0,int y0,int x1,int y1) glBegin (GL_LINES); glColor3f (1.0

8、f, 0.0f, 0.0f); glColor3f (0.0f, 1.0f, 0.0f); glEnd (); unsigned all; unsigned left,right,top,bottom; float xmin,xmax,ymin,ymax;struct Rectangle rect;int bClip = 0;void compoutcode(float x,float y,struct Rectangle rect,struct outcode *outcode) outcode- if(y else if(y else if(x y=y0+(y1-y0)*(rect.xmi

9、n-x0)/(x1-x0); x=(float)rect.xmin; else if(outcodeout- x=x0+(x1-x0)*(rect.ymax-y0)/(y1-y0); y=(float)rect.ymax; y=y0+(y1-y0)*(rect.xmax-x0)/(x1-x0); x=(float)rect.xmax; x=x0+(x1-x0)*(rect.ymin-y0)/(y1-y0); y=(float)rect.ymin; x0=x; x1=x; while(! if(accept) LineGL(x0,y0,x1,y1); return accept; glClear

10、(GL_COLOR_BUFFER_BIT); glRectf(rect.xmin,rect.ymin,rect.xmax,rect.ymax); if (! cohensutherlandlineclip(rect, x0,y0,x1,y1); glFlush(); glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); rect.xmin=100; rect.xmax=300; rect.ymin=100; rect.ymax=300; x0 = 450,y0 = 0, x1 = 0, y1 = 450; printf( glView

11、port(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h); switch (key) case bClip = 1; glutPostRedisplay(); break; bClip = 0; Init(); exit(0); default: glutInit(& glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); glutCreateWindow( glutDisplayFunc(myDisplay); glutReshapeFunc(Reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1