OpenGL的简单动画与交互 联系客服

发布时间 : 星期日 文章OpenGL的简单动画与交互更新完毕开始阅读9039b1453b3567ec102d8a89

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(\); // 创建显示窗口 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

glVertex2f( R*cos(theta+i*2*PI/n), R*sin(theta+i*2*PI/n)); glEnd(); glutSwapBuffers(); //双缓冲的刷新模式; }

void myidle() { theta+=1.0; if (theta>=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所示。