Android OpenGL ES 开发教程(6):GLSurfaceView
2012-06-07 14:17
706 查看
http://www.imobilebbs.com/wordpress/?p=1889
Android OpenGL ES 相关的包主要定义在:
javax.microedition.khronos.opengles GL 绘图指令
javax.microedition.khronos.egl EGL 管理Display, surface等
android.opengl Android GL辅助类,连接OpenGL 与Android View,Activity
javax.nio Buffer类
其中GLSurfaceView 为android.opengl 包中核心类:
起到连接OpenGL ES与Android 的View层次结构之间的桥梁作用。
使得Open GL ES库适应于Anndroid系统的Activity生命周期。
使得选择合适的Frame buffer像素格式变得容易。
创建和管理单独绘图线程以达到平滑动画效果。
提供了方便使用的调试工具来跟踪OpenGL ES函数调用以帮助检查错误。
使用过Java ME ,JSR 239 开发过OpenGL ES可以看到 Android 包javax.microedition.khronos.egl ,javax.microedition.khronos.opengles 和JSR239 基本一致,因此理论上不使用android.opengl 包中的类也可以开发Android上OpenGL ES应用,但此时就需要自己使用EGL来管理Display,Context, Surfaces 的创建,释放,捆绑,可以参见Android
OpenGL ES 开发教程(5):关于EGL 。
使用EGL 实现GLSurfaceView一个可能的实现如下:
帮助
可以看到需要派生SurfaceView ,并手工创建,销毁Display,Context ,工作繁琐。
使用GLSurfaceView 内部提供了上面类似的实现,对于大部分应用只需调用一个方法来设置OpenGLView用到的GLSurfaceView.Renderer.
帮助
GLSurfaceView.Renderer定义了一个统一图形绘制的接口,它定义了如下三个接口函数:
帮助
onSurfaceCreated : 在这个方法中主要用来设置一些绘制时不常变化的参数,比如:背景色,是否打开 z-buffer等。
onDrawFrame: 定义实际的绘图操作。
onSurfaceChanged: 如果设备支持屏幕横向和纵向切换,这个方法将发生在横向<->纵向互换时。此时可以重新设置绘制的纵横比率。
如果有需要,也可以通过函数来修改GLSurfaceView一些缺省设置:
setDebugFlags(int) 设置Debug标志。
setEGLConfigChooser (boolean) 选择一个Config接近16bitRGB颜色模式,可以打开或关闭深度(Depth)Buffer ,缺省为RGB_565 并打开至少有16bit 的 depth Buffer.
setEGLConfigChooser(EGLConfigChooser) 选择自定义EGLConfigChooser。
setEGLConfigChooser(int, int, int, int, int, int) 指定red ,green, blue, alpha, depth ,stencil 支持的位数,缺省为RGB_565 ,16 bit depth buffer.
GLSurfaceView 缺省创建为RGB_565 颜色格式的Surface ,如果需要支持透明度,可以调用getHolder().setFormat(PixelFormat.TRANSLUCENT).
GLSurfaceView 的渲染模式有两种,一种是连续不断的更新屏幕,另一种为on-demand ,只有在调用requestRender() 在更新屏幕。 缺省为RENDERMODE_CONTINUOUSLY 持续刷新屏幕。
Android OpenGL ES 相关的包主要定义在:
javax.microedition.khronos.opengles GL 绘图指令
javax.microedition.khronos.egl EGL 管理Display, surface等
android.opengl Android GL辅助类,连接OpenGL 与Android View,Activity
javax.nio Buffer类
其中GLSurfaceView 为android.opengl 包中核心类:
起到连接OpenGL ES与Android 的View层次结构之间的桥梁作用。
使得Open GL ES库适应于Anndroid系统的Activity生命周期。
使得选择合适的Frame buffer像素格式变得容易。
创建和管理单独绘图线程以达到平滑动画效果。
提供了方便使用的调试工具来跟踪OpenGL ES函数调用以帮助检查错误。
使用过Java ME ,JSR 239 开发过OpenGL ES可以看到 Android 包javax.microedition.khronos.egl ,javax.microedition.khronos.opengles 和JSR239 基本一致,因此理论上不使用android.opengl 包中的类也可以开发Android上OpenGL ES应用,但此时就需要自己使用EGL来管理Display,Context, Surfaces 的创建,释放,捆绑,可以参见Android
OpenGL ES 开发教程(5):关于EGL 。
使用EGL 实现GLSurfaceView一个可能的实现如下:
帮助
使用GLSurfaceView 内部提供了上面类似的实现,对于大部分应用只需调用一个方法来设置OpenGLView用到的GLSurfaceView.Renderer.
帮助
帮助
onDrawFrame: 定义实际的绘图操作。
onSurfaceChanged: 如果设备支持屏幕横向和纵向切换,这个方法将发生在横向<->纵向互换时。此时可以重新设置绘制的纵横比率。
如果有需要,也可以通过函数来修改GLSurfaceView一些缺省设置:
setDebugFlags(int) 设置Debug标志。
setEGLConfigChooser (boolean) 选择一个Config接近16bitRGB颜色模式,可以打开或关闭深度(Depth)Buffer ,缺省为RGB_565 并打开至少有16bit 的 depth Buffer.
setEGLConfigChooser(EGLConfigChooser) 选择自定义EGLConfigChooser。
setEGLConfigChooser(int, int, int, int, int, int) 指定red ,green, blue, alpha, depth ,stencil 支持的位数,缺省为RGB_565 ,16 bit depth buffer.
GLSurfaceView 缺省创建为RGB_565 颜色格式的Surface ,如果需要支持透明度,可以调用getHolder().setFormat(PixelFormat.TRANSLUCENT).
GLSurfaceView 的渲染模式有两种,一种是连续不断的更新屏幕,另一种为on-demand ,只有在调用requestRender() 在更新屏幕。 缺省为RENDERMODE_CONTINUOUSLY 持续刷新屏幕。
相关文章推荐
- Android OpenGL ES 开发教程(6):GLSurfaceView
- Android OpenGL ES 开发教程(6):GLSurfaceView
- Android OpenGL ES 开发教程(6):GLSurfaceView
- 【Android开发学习43】OpenGL ES教程VI之纹理贴图(原文对照)
- Android OpenGL ES 简明开发教程七:材质渲染
- Android OpenGL ES 开发教程小结
- Android OpenGL ES 开发教程(23):FrameBuffer
- Android OpenGL ES 简明开发教程七:材质渲染
- Android OpenGL ES 开发教程(21):定义3D模型的前面和后面
- Android OpenGL ES 开发教程(8):基本几何图形定义
- Android OpenGL ES 简明开发教程三:3D绘图基本概念
- Android OpenGL ES 简明开发教程二:构造OpenGL ES View
- Android OpenGL ES 开发教程(17):投影变换Projection
- Android OpenGL ES 开发教程 从入门到精通
- Android OpenGL ES 简明开发教程三:3D绘图基本概念
- Android OpenGL ES 开发教程(三)
- Android OpenGL ES 开发教程 从入门到精通
- Android OpenGL ES 开发教程(22):绘制一个球体
- Android OpenGL ES 开发教程 从入门到精通
- Android OpenGL ES 简明开发教程六: 真正的3D图形