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的话,会出现意料之外的结果。因为坐标轴已经旋转了,很可能没有朝着我们所希望的方向。重置模型观察矩阵之后,X,Y,Z轴都以复位,我们调用glTranslate。您会注意到这次我们只向右一了1.5单位,而不是上节课的3.0单位。因为我们重置场景的时候,焦点又回到了场景的中心(0.0处)。这样就只需向右移1.5单位就够了。当我们移到新位置后,绕X轴旋转四边形。正方形将上下转动。
最后两行代码控制旋转,可以尝试改变,来体会对象旋转的方向是如何改变的。
最终的运行结果如下图所示:
源代码下载地址:http://download.csdn.net/detail/seniorwizard/4460814
- Andriod OpenGL 教程 04 - 旋转
- 【Qt OpenGL教程】04:旋转
- Andriod OpenGL 教程 08 - 混合
- OpenGL教程之旋转
- OpenGL教程之旋转
- Andriod OpenGL 教程 02 - 第一个多边形
- Andriod OpenGL 教程 03 - 添加颜色
- Andriod OpenGL 教程 05 - 3D空间
- Andriod OpenGL 教程 06 - 纹理映射
- Andriod OpenGL 教程 09 - 移动图像
- Andriod OpenGL 教程 10 - 3D世界
- opengl 教程(7) 旋转变化
- Andriod OpenGL 教程 01 - 创建一个OpenGL 窗口
- NeHe OpenGL教程 第四课 旋转
- opengl 教程(11) 平移/旋转/缩放
- iOS OpenGL ES2.0教程 Lesson03 旋转
- OpenGL教程翻译 第七课 旋转变换
- Andriod OpenGL 教程 07 - 光照和输入控制
- Oracle 11g系列—2—用户管理
- 将C++文件间的编译依赖性降至最低【ZZ】
- Kruskal次小生成树 :The Unique MST
- poj 1743 Musical Theme
- [java]关键字this和super
- Andriod OpenGL 教程 04 - 旋转
- LVM逻辑卷管理:增加LV容量
- vs2008在win8下无法连接sql2000的问题的解决
- 游戏引擎发展漫谈(1-10) 好长啊。。。。
- poj 3261 Milk Patterns
- Oracle 11g系列—3—SQL*Plus运用与OEM简介
- 【Android】Uri、UriMatcher、ContentUris详解
- 如何远程复制另一台Linux服务器及相关问题
- Oracle 11g系列—4—Oracle的体系结构