在OpenGL中实现橡皮筋技术画一个矩形,并学会简单的鼠标键盘交互式设备的使用以及交互式绘图技术的实现.doc_第1页
在OpenGL中实现橡皮筋技术画一个矩形,并学会简单的鼠标键盘交互式设备的使用以及交互式绘图技术的实现.doc_第2页
在OpenGL中实现橡皮筋技术画一个矩形,并学会简单的鼠标键盘交互式设备的使用以及交互式绘图技术的实现.doc_第3页
在OpenGL中实现橡皮筋技术画一个矩形,并学会简单的鼠标键盘交互式设备的使用以及交互式绘图技术的实现.doc_第4页
在OpenGL中实现橡皮筋技术画一个矩形,并学会简单的鼠标键盘交互式设备的使用以及交互式绘图技术的实现.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

计算机图形学实验报告1、 实验目的和要求在OpenGL中实现橡皮筋技术画一个矩形,并学会简单的鼠标键盘交互式设备的使用以及交互式绘图技术的实现。2、 实验内容橡皮筋技术的关键在于控制图形随着用户的操作而不断发生变化,此时要擦除原有的图形而形成新的图形。因此在本实验中要学习这种方法,并且画一个矩形。3、 实验步骤1) 相关算法及原理描述鼠标响应函数: void MousePlot在OpenGL程序中,使用鼠标的方法是注册一个鼠标响应函数,对鼠标在窗口范围内的按键按下或松开事件进行处理,其中MousePlot函数是鼠标响应函数,它包含四个参数:void MousePlot (Glint Button,Glint xMouse,GLint action ,Glint yMouse)此外GLUT还提供了两用于处理鼠标移动的注册函数GluMotionfunc(MouseMove)GluPassiveMotionFunc(PassiveMouseMove)2) 程序调试、测试与运行结果分析运行结果如下图,程序调试成功,并且能正常显示,不足之处:调试了半天,右键显示及调节属性的功能仍旧没法实现,最后不得不把那个函数删掉,感觉很是遗憾。4、 实验总结通过本次试验,进一步认识和理解了橡皮筋算法的基本算法思想,同时也对双缓存技术有了一些了解,由于自己不太擅长编程,所以有些功能还不能完全实现,但我会尽自己最大努力来克服自己的编程不足之处,多加练习。 5、附录带注释的源程序#include#include#includeint x0,y0;int x1,y1;int x2,y2;int x3,y3;int width;int height=500;int first=500;int iPointNum = 0; /已确定点的数目int winWidth = 400, winHeight = 300; /窗口的宽度和高度bool have_square=false;int draw=0;bool drawable=true;void Key(unsigned char key, int x, int y) switch(key) case p: if(iPointNum = 0 | iPointNum = 2) iPointNum = 1; x1 = x; y1 = winHeight - y; else iPointNum = 2; x2 = x; y2 = winHeight - y; glutPostRedisplay(); break; default: break; void display(void);void mouse(int button,int state, int x,int y) glEnable(GL_LOGIC_OP); if(have_square = false) if(button = GLUT_LEFT_BUTTON & state = GLUT_DOWN&draw=0) x1=x2=x3=x0 = x; y1=y2=y3=y0 = height-y; glColor3f(0.0,1.0,0.0); glLogicOp(GL_XOR); first = 0; if(button = GLUT_LEFT_BUTTON & state = GLUT_UP&draw=0) glBegin(GL_LINE_LOOP); glVertex2f(x0,y0); glVertex2f(x1,y1); glVertex2f(x2,y2); glVertex2f(x3,y3); glEnd(); glFlush(); x2 = x; y2 = height-y; x1 = x0; y1 = y2; x3 = x; y3 = y0; glFlush(); glColor3f(0.0,0.0,1.0); glLogicOp(GL_COPY); glBegin(GL_LINE_LOOP); glVertex2f(x0,y0); glVertex2f(x1,y1); glVertex2f(x2,y2); glVertex2f(x3,y3); glEnd(); glFlush(); have_square=true; else if(button = GLUT_RIGHT_BUTTON & state = GLUT_UP) have_square=false; glutPostRedisplay(); first = 0; void move(int x,int y) if(have_square=true)return; if(first = 1) glBegin(GL_LINE_LOOP); glVertex2f(x0,y0); glVertex2f(x1,y1); glVertex2f(x2,y2); glVertex2f(x3,y3); glEnd(); glFlush(); x2 = x; y2 = height-y; x1 = x0; y1 = y2; x3 = x; y3 = y0; glBegin(GL_LINE_LOOP); glVertex2f(x0,y0); glVertex2f(x1,y1); glVertex2f(x2,y2); glVertex2f(x3,y3); glEnd(); glFlush(); first = 1;void display(void) glEnable(GL_COLOR_LOGIC_OP); glClear(GL_COLOR_BUFFER_BIT); glClearColor(1.0,1.0,1.0,1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glFlush(); void myReshape(int w,int h) glClearColor(1.0,1.0,1.0,1.0); glViewport(0,0,w,h); width=w; height=h; glMatrixMode(GL_PROJECTION); glLoadIdentity();/ if(wh) gluOrtho2D(0.0,500.0,0.0,(GLfloat)h/(GLfloat)w*500.0);/ else gluOrtho2D(0.0,(GLfloat)w/(GLfloat)h*500.0,0.0,500.0); gluOrtho2D(0.0,(GLfloat)w,0.0,(GLfloat)h); glMatrixMode(GL_MODELVIEW);void main(int argc,char *argv)void Key(unsigned char key, int x, int y); glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosit

温馨提示

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

评论

0/150

提交评论