Andriod OpenGL 教程 04 - 旋转

来源:互联网 发布:基因表达数据 编辑:程序博客网 时间:2024/03/29 13:21

关键字: android OpenGL 移动开发 教程

在这一课,我们将演示如何旋转三角形和四边形。左图中的三角形沿Y轴旋转,四边形沿着X轴旋转。

为了实现上述目的,我们需要在MyGLRenderer.java中添加一些代码,是三角形和四边形按我们的要求动态地旋转起来。

添加四个控制变量:

privatefloatangleTriangle = 0.0f;

    privatefloatangleQuad = 0.0f;

    privatefloatspeedTriangle = 0.5f;

privatefloatspeedQuad = -0.4f;

它们分别用来保存当前三角形和四边形的旋转角度以及旋转速度。然后在onDrawFrame方法中加入控制旋转的代码,并在最后更新旋转角度,让我们的图形按我们的预定要求选装起来。最终在onDrawFrame的代码为:

public void onDrawFrame(GL10 gl){// 清除屏幕和深度缓存gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);// 重置当前的模型观察矩阵gl.glLoadIdentity();// 左移 1.5 单位,纵深向里移动 6.0gl.glTranslatef(-1.5f,0.0f,-6.0f);// 绕Y轴旋转三角形gl.glRotatef(angleTriangle, 0.0f, 1.0f, 0.0f);// 画三角形triangle.draw(gl);// 重置当前的模型观察矩阵gl.glLoadIdentity();// 右移 1.5 单位,纵深向里移动 6.0gl.glTranslatef(1.5f, 0.0f, -6.0f);// 绕X轴旋转正方形 gl.glRotatef(angleQuad, 1.0f, 0.0f, 0.0f);// 画正方形quad.draw(gl);// 每次刷新之后更新旋转角度angleTriangle += speedTriangle;angleQuad += speedQuad;}

注意上述代码,我们在绘制四边形之前,增加了另一个glLoadIdentity()调用,目的是为了重置模型观察矩阵。如果我们没有重置,直接调用glTranslate的话,会出现意料之外的结果。因为坐标轴已经旋转了,很可能没有朝着我们所希望的方向。重置模型观察矩阵之后,XYZ轴都以复位,我们调用glTranslate。您会注意到这次我们只向右一了1.5单位,而不是上节课的3.0单位。因为我们重置场景的时候,焦点又回到了场景的中心(0.0)。这样就只需向右移1.5单位就够了。当我们移到新位置后,绕X轴旋转四边形。正方形将上下转动。

最后两行代码控制旋转,可以尝试改变,来体会对象旋转的方向是如何改变的。

最终的运行结果如下图所示:

 

源代码下载地址:http://download.csdn.net/detail/seniorwizard/4460814

原创粉丝点击