实验四OpenGL的简单动画与交互.doc_第1页
实验四OpenGL的简单动画与交互.doc_第2页
实验四OpenGL的简单动画与交互.doc_第3页
实验四OpenGL的简单动画与交互.doc_第4页
实验四OpenGL的简单动画与交互.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

实验四 OpenGL的简单动画与交互一、实验目的1、 学会OpenGL的简单键盘交互操作。2、 掌握OpenGL鼠标交互功能及其简单应用。3、掌握OpenGL的闲置函数与简单动画。4、掌握反走样思想和算法。二、实验内容与要求1、在实验一(画矩形)的基础上添加键盘交互,按W键绘制的矩形上移,按S键矩形下移,按A键矩形左移,按D键矩形右移,如图3-1。参考步骤如下:(1)在主函数里添加键盘注册回调函数 glutKeyboardFunc(mykeyboard);此函数可放在 glutDisplayFunc(display);后面。(2)在display()绘制函数中修改绘制矩形代码,用变量代替数值参数。 例如: glRectf(-0.5,-0.5,0.5,0.5)改为glRectf(x1,y1,x2,y2); (3)在程序中增加mykeyboard键盘子函数,并在如下代码中进行修改,实现键盘控制矩形移动 void mykeyboard(unsigned char key, int x, int y) switch(key) case W: case w:/ 矩形对角坐标变量修改使得矩形上移 break;case S: case s:/矩形对角坐标变量修改使得矩形下移 break;case A: case a:/矩形对角坐标变量修改使得矩形左移 break;case D: case d:/矩形对角坐标变量修改使得矩形右移 break; /参数修改后调用重画函数,屏幕图形将发生改变 glutPostRedisplay(); 2、闲置函数的使用与简单动画。 旋转的六边形,如图3-3所示 阅读OpenGL旋转的六边形样本框架程序rotate-polygon.cpp,分析程序的实现步骤: /样本程序: 旋转的六边形#include #include #define PI 3.14159 /设置圆周率int n=6, R=10; /多边形变数,外接圆半径float theta=0.0; /旋转初始角度值void Keyboard(unsigned char key, int x, int y);void Display(void);void Reshape(int w, int h);void myidle();void main(int argc, char* argv) glutInit(&argc, argv); /初始化GLUT库; glutInitWindowSize(700,700); /设置显示窗口大小 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); /设置显示模式;(注意双缓冲) glutCreateWindow(A Rotating Square); / 创建显示窗口 glutDisplayFunc(Display); /注册显示回调函数 glutReshapeFunc(Reshape); /注册窗口改变回调函数 glutIdleFunc(myidle); /注册闲置回调函数 glutMainLoop(); /进入事件处理循环void Display(void)glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,0,0); /设置红色绘图颜色 glBegin(GL_POLYGON); /开始绘制六边形 for (int i=0;i=2*PI) theta-=2*PI;glutPostRedisplay(); /重画,相当于重新调用Display(),改编后的变量得以传给绘制函数void Reshape(GLsizei w,GLsizei h)glMatrixMode(GL_PROJECTION); /投影矩阵模式glLoadIdentity(); /矩阵堆栈清空gluOrtho2D(-1.5*R*w/h,1.5*R*w/h,-1.5*R,1.5*R); /设置裁剪窗口大小glViewport(0,0,w,h); /设置视区大小glMatrixMode(GL_MODELVIEW); /模型矩阵模式 运行该程序,观察旋转动画效果。思考: 如果要调整旋转速度,旋转更快或更慢,应该如何修改程序? 图3-3 3、鼠标交互。 (1) 鼠标画线 阅读OpenGL鼠标画线程序draw-lines.cpp,能够实现在绘制窗口用鼠标交互绘制若干条直线,鼠标左键首先按下,确定直线的起始点,鼠标左键按下同时移动,看到画线过程,鼠标左键松开时,确定直线的终点,可重复画多条直线。如图3-4所示。 图3-4 实现主要思路: 1) 写出画静止若干条直线程序框架,坐标用变量替代;2) 在主函数里注册鼠标按钮响应函数和鼠标移动响应函数;3) 在鼠标按钮响应子函数里,给出鼠标按钮响应事件;4) 在鼠标移动响应子函数里,给出鼠标移动响应事件;5) 读懂程序并分析程序,保留程序。 选做:(2) 鼠标绘制矩形 修改鼠标画线程序draw-lines.cpp,要求:能够实现在绘制窗口用鼠标交互绘制若干矩形,鼠标左键首先按下,确定矩形对角线的起始点,鼠标左键按下同时移动时,看到画矩形过程,鼠标左键松开,确定矩形对角线的另一点,可重复画多个矩形。如图3-5所示。 参考函数:1、 注册鼠标按钮响应函数 glutMouseFunc(void(*f)(int button,int state,int x,int y) 该函数在主程序中调用。 参数button: GLUT_LEFT_BUTTON,GLUT_MIDDLE_BUTTON,GLUT_RIGHT_BUTTON 参数state: GLUT_UP,GLUT_DOWN x,y:返回鼠标在窗口的位置(原点在左上角)。2、鼠标按钮响应回调函数 mymousebutton(int button, int state, int x, int y) 3、注册鼠标移动响应函数void glutMotionFunc(void (*f) (int x,int y)该函数在主程序中调用。(x,y)鼠标的位置,原点在左上角 4、鼠标移动响应回调函数mymousemotion(int x,int y) 图3-54、已知画线程序,在主程序中增加初始化子函数init(); 添加反走样代码和取消抗锯齿代码,使得斜线变光滑。可对比一下反走样效果:按1键斜线锯齿(如图3-6),按2键斜线光滑(如图3-7)。 图3-6 图3-7 参考函数: 反走样代码,点、直线、多边形的抗锯齿:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_POINT_SMOOTH); glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); glEnable(GL_LINE_SMOOTH); glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glEnable(GL_POLYGON_SMOOTH);glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST); 取消抗锯齿: glDisable(GL_BLEND); glDisable(GL_LINE_SMOOTH); glDisable(GL_POINT_SMOOTH); glDisable(GL_POLYGON_SMOOTH);选做:5、 程序合成。

温馨提示

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

评论

0/150

提交评论