基于Android opengles的魔方开发总结(一)
来源:互联网 发布:淘宝买家恶意大量退货 编辑:程序博客网 时间:2024/06/05 01:52
1. 前言
在看见apidemo中自带的魔方例子后就一直想做一个可以触摸旋转的魔方,没事可以玩玩,于是在网上查找了大量的资料,根据自己的理解把魔方例子进行了改良,增加了贴图、触摸扭转、每帧处理时间的显示。代码在开发总结(四)后附加,效果具体见下图:
2. 参考资料
魔方开发简明指导 http://www.apkbus.com/android-2756-1-1.html
魔方贴图http://www.asiteof.me/2011/01/android_opengl/
如何用触屏方式点击魔方(射线拾取原理)http://www.ophonesdn.com/article/show/164
Android OpenGL射线拾取&手势旋转 http://vaero.blog.51cto.com/4350852/790620
3. 实现原理分析
3.1. 画立方体
将魔方由9个小方块Cube组成,其中每个方块包含8个顶点(GLVertex)6个面(GLFace),将8个顶点放在Cube的mVertexList字段中,在每个GLFace中放置要绘制的顶点顺序和面的颜色、及贴图。
魔方按照以下流程绘制:
1.首先在onDrawFrame方法中执行(注意GLSurfaceView 的渲染模式有两种,一种是连续不断的更新屏幕,另一种为on-demand ,只有在调用requestRender() 在更新屏幕。 缺省为RENDERMODE_CONTINUOUSLY 持续刷新屏幕)。
mWorld.draw(gl);
2.在GLWorld类中的draw方法为:
//设置小方块的顶点数组
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
for(GLShape shape : mShapeList) {
shape.draw(gl);
}
3.在GLShape类中的draw方法为:
for (GLFace face : mFaceList) {
face.draw(gl);
}
在GLFace类中的draw方法为:
//启用顶点数组
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
//打开 忽略
“后面”设置gl.glEnable(GL10.GL_CULL_FACE);
//设置逆时针方法为面的
“前面” 如果画图索引顺序不是逆时针反向则无法看见gl.glFrontFace(GL10.GL_CCW);
//明确指明忽略背面
gl.glCullFace(GL10.GL_BACK);
//不画被
遮挡的图形部分gl.glEnable(GL10.GL_DEPTH_TEST);
//获取面的绘制顺序
ShortBuffer indicesBuffer = face.getIndicesBuffer();
indicesBuffer.position(0);
//每相邻三个顶点组成一个三角形
gl.glDrawElements(GL10.
GL_TRIANGLE_STRIP,4, GL10.GL_UNSIGNED_SHORT, indicesBuffer);在设置好每个方块的坐标和面的绘制顺序后(具体见代码
KubeActivity类中的makeGLWorld方法),魔方的雏形就出来了。
- 基于Android opengles的魔方开发总结(一)
- 基于Android opengles的魔方开发总结
- 基于Android opengles的魔方开发总结(二)
- 基于Android opengles的魔方开发总结(三)
- 基于Android opengles的魔方开发总结(四)
- Android Opengles 学习一
- android OpenGLES开发第一课 绘制简单的Polygon
- android利用OpenGLES开发动态壁纸用到的GLWallpaperService类
- Android上的OpenGLES程序--开发环境介绍
- 基于android系统的蓝牙开发总结
- 基于Redux的ReactNative项目开发总结(一)
- 基于Redux的ReactNative项目开发总结(一)
- 基于Opengles和android环境下的3D推箱子。
- android jni基于ffmpeg,opengles,egl的yuv视频播放功能
- android OpenGLES开发 第五课 纹理映射
- Android+NDK+OpenGLES开发环境配置
- android 开发总结一
- 基于stm32的解魔方机器人
- 离开机房后的深思
- 10个HTML5动画,让你忘掉Flash是啥
- 随机生成图形
- 使用User-Agent获取操作系统名称
- linux gdb命令
- 基于Android opengles的魔方开发总结(一)
- 我的职业规划
- android status bar 之 status bar notifications
- 最长非上升子序列
- 黑马程序员_java基础加强之(反射)
- 3种方法求解斐波那契数列
- 有了HTML5,Flash还能走多远?
- 加号要换成 %2B
- LPC1768 IAP(一)