OpenGLut开发入门系列教程5:图像旋转

系列教程索引:OpenGLut开发入门系列教程索引

上一篇:OpenGLut开发入门系列教程5:彩色多边形

3维开发要看到图像的每个角落,本篇来将二维图像旋转起来。

首先函数基本的架构是:

flow

在main函数中glut*Func()的参数为回调函数,需要在main函数外独立实现。

重要的是四个回调函数:

  • initGL,初始化函数
  • reshapeGL,尺寸调整函数,当窗口的尺寸发生变化时调用此函数重新绘图
  • keyboard,捕获键盘输入并处理
  • displayGL,将想要显示的图像绘制出来的函数

其他函数说明见OpenGL函数功能说明系列

直接在绘制三角形的代码上添加。

1
glRotatef(angle,x,y,z);

angle表示旋转角度,[x,y,z]表示旋转操作矩阵。

[1,0,0]表示绕x轴旋转,yz同理。

1
glutIdleFunc(func);

如果不加这个函数,正常情况下画面不会动,如果调整窗口大小,图像就会旋转。那也就是说OpenGL,至少是glut是事件操作的。此函数可以在无事件操作的情况下调用func函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

glTranslatef(0.0f,0.0f,-6.0f);//平移

glRotatef(rtri,0.0f,1.0f,0.0f);//旋转函数

glBegin(GL_POLYGON);//图像绘制部分
glColor3f(1.0f,0.0f,0.0f); // Set The Color To Red
glVertex3f(0.0f,1.0f,0.0f);//点A(x,y,z)
glColor3f(0.0f,1.0f,0.0f); // Set The Color To Green
glVertex3f(-1.0f,-1.0f,0.0f);//点B
glColor3f(0.0f,0.0f,1.0f); // Set The Color To Blue
glVertex3f(1.0f,-1.0f,0.0f);//点C
glEnd();

rtri += 1.0f;

绕y轴旋转测试效果:

rotate

在加上四边形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
glLoadIdentity();
glTranslatef(-1.5f,0.0f,-6.0f);//平移

glRotatef(rtri,0.0f,1.0f,0.0f);//绕Y轴旋转
glBegin(GL_TRIANGLES);//图像绘制部分
glColor3f(1.0f,0.0f,0.0f); // 红色
glVertex3f(0.0f,1.0f,0.0f);//点A(x,y,z)
glColor3f(0.0f,1.0f,0.0f); // 绿色
glVertex3f(-1.0f,-1.0f,0.0f);//点B
glColor3f(0.0f,0.0f,1.0f); // 蓝色
glVertex3f(1.0f,-1.0f,0.0f);//点C
glEnd();
glLoadIdentity();
glTranslatef(1.5f,0.0f,-6.0f); // 右移

// 绘制正方形
glRotatef(rquad,1.0f,0.0f,0.0f);//绕X轴旋转
glColor3f(0.5f,0.5f,1.0f); // 蓝色
glBegin(GL_QUADS); // 开始绘图
glVertex3f(-1.0f, 1.0f, 0.0f); // 左上
glVertex3f( 1.0f, 1.0f, 0.0f); // 右上
glVertex3f( 1.0f,-1.0f, 0.0f); // 右下
glVertex3f(-1.0f,-1.0f, 0.0f); // 左下
glEnd(); // 结束

rtri+=1.0f;
rquad-=1.0f;

效果:

rotate

完整源码在OpenGL_Freshman下的OpenGLut的5中。

下一篇:OpenGLut开发入门系列教程6:3D化图像