图形学实验图形剪裁.doc_第1页
图形学实验图形剪裁.doc_第2页
图形学实验图形剪裁.doc_第3页
图形学实验图形剪裁.doc_第4页
图形学实验图形剪裁.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实 验 报 告课 程计算机图形学实验项目图形剪裁成 绩专业班级软件工程08级学 号0805020337批阅日期姓 名实验日期2011.12.29指导教师一【实验目的】1.编程实现用鼠标绘制线段和矩形,并实现剪裁的功能2.实现计算机系统的交互功能,掌握基本的图形剪裁的思路4.掌握开发环境,及相关类库和工具的使用二【实验内容】根据已提供的程序框架及思路,完成系统的开发,要求运用图形剪裁算法实现功能,系统健壮,实现人机交互。三【实验过程】本次实验我采用了glut的框架,源代码如下:#include #include #include class wcPt2D public: float x,y;int w=1024,h=768,flag=1;inthh=h;wcPt2D point1512;wcPt2D point2512;wcPt2D temporary;wcPt2D glRectf1;wcPt2D glRectf2;int i=0;bool first=true;bool second=true;void Reshape(int w, int h)glMatrixMode(GL_PROJECTION);glLoadIdentity(); glViewport(0, 0, w, h);gluOrtho2D(0, w, 0, h); void Display() glClearColor(1.0,1.0,1.0,1.0);glClear(GL_COLOR_BUFFER_BIT);glLineWidth(2.0);if(flag=1) if(first)Drawtemporaryline();elseDrawtrueline();first=!first;else if(flag=2)if(second)DrawtemporaryglRectf();elseDrawtrueglRectf();flag=1;first=true;second=true;for(int j=0;j=i;j+)point1j.x=point1j.y=0;point2j.x=point2j.y=0;i=0;glutSwapBuffers();void Keyboard(unsigned char key,int x, int y)switch(key)case 1:flag=1; break;case 2:flag=2;break;default:return;voidmymouse(intbutton,int state, int x, int y) if(button=GLUT_LEFT_BUTTON)if(state=GLUT_DOWN&flag=1)point1i.x=x;point1i.y=hh-y;else if(state=GLUT_UP&flag=1)point2i.x=x;point2i.y=hh-y;i+;first=!first;glutPostRedisplay();if(state=GLUT_DOWN&flag=2)glRectf1.x=x;glRectf1.y=hh-y;else if(state=GLUT_UP&flag=2)glRectf2.x=x;glRectf2.y=hh-y;second=!second;glutPostRedisplay();voidmymotion(intx,int y)temporary.x=x;temporary.y=hh-y;glutPostRedisplay();voidDrawtemporaryline()for(int j=0;ji;j+)glBegin(GL_LINES);glColor3f(0.0,0.0,0.0);glVertex3f(point1j.x,point1j.y,0.0);glVertex3f(point2j.x,point2j.y,0.0);glEnd();glBegin(GL_LINES);glColor3f(0.0,0.0,0.0);glVertex3f(point1i.x,point1i.y,0.0);glVertex3f(temporary.x,temporary.y,0.0);glEnd();voidDrawtrueline()for(int j=0;j=i;j+)glBegin(GL_LINES);glColor3f(0.0,0.0,0.0);glVertex3f(point1j.x,point1j.y,0.0);glVertex3f(point2j.x,point2j.y,0.0);glEnd();voidDrawtemporaryglRectf()for(int j=0;jglRectf2.x)a=glRectf1.x;glRectf1.x=glRectf2.x;glRectf2.x=a;if(glRectf1.yglRectf2.y)a=glRectf1.y;glRectf1.y=glRectf2.y;glRectf2.y=a;for(int j=0;j=i;j+)clipLine(glRectf1,glRectf2,point1j,point2j);glRectf(glRectf1.x,glRectf1.y,glRectf2.x,glRectf2.y);intclipTest(float p,floatq,float *u1,float *u2)float r; boolretVal=true;if(p*u2) retVal=false; elseif(r*u1)*u1 = r;else if(p 0.0) r=q/p;if(r*u1) retVal=false;else if(r*u2) *u2 = r;else if(q0.0) retVal=false;return (retVal) ;voidclipLine(wcPt2D winMin,wcPt2D winMax,wcPt2D p1,wcPt2D p2)float u1=0.0,u2=1.0,dx=p2.x-p1.x,dy;if(clipTest(-dx,p1.x-winMin.x,&u1,&u2)if(clipTest(dx,winMax.x-p1.x,&u1,&u2) dy=p2.y-p1.y;if(clipTest(-dy,p1.y-winMin.y,&u1,&u2)if(clipTest(dy,winMax.y-p1.y,&u1,&u2) if(u20.0) p1.x+=u1*dx;p1.y+=u1*dy;glBegin(GL_LINES);glColor3f(0.0,0.0,0.0);glVertex3f(p1.x,p1.y,0.0);glVertex3f(p2.x,p2.y,0.0);glEnd();int main(intargc, char* argv)glutInit(&argc, argv);glutInitWindowPosition(0, 0);glutInitWindowSize(w,h);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);glutCreateWindow(liangbarskey);glPolygonMode(GL_FRONT_AND_BACK,GL_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论