b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

android opengl es 开发教程.pdf

电脑杂谈  发布时间:2019-07-17 19:13:00  来源:网络整理

android opengl 教程_android opengl es教程_android opengl 教程

考试内容中,数与运算、方程与代数、函数与分析、数据整理与概率统计等部分约占60%,图形与几何部分约占40%。第2章2.2第一课时2.2.1向量的加法运算及其几何意义课前准备温故知新:我们知道有理数可以进行和、差、积、商的运算,在物理上用到两力求和力的例子,那么两向量如何进行加法运算呢。八、向量(趋向向量的数形结合,注意几何意义、图形运算、投影概念。

此外Android SDK中有关OpenGL ES API 的开发文档 android.opengl javax.microedition.khronos.egl javax.microedition.khronos.ope ngles java.nio 注:上述Android文档基本为空,可以参见JSR239的文档,比较详细。 和 OpenGL ES Specification都是学习时常用到的参考资料。 Android OpenGL ES开发教程(2):关于OpenGL ES 什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System 的缩写)为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL的一个子集。 OpenGL ES 定义了一个在移动平台上能够支持OpenGL 最基本功能的精简标准,以适应如手机,PDA 或其它消费者移动终端的显示系统。 Khronos Group 定义和管理了OpenGL ES 标准。 OpenGL与 OpenGL ES 的关系 OpenGL ES 是基于桌面版本OpenGL的,下图显示了OpenGL和 OpenGL ES 之间的关系图 OpenGL ES 1.0 基于OpenGL 1.3, 在2003 年发布 OpenGL ES 1.1 基于OpenGL 1.5 ,在2004 年发布 OpenGL ES 2.0 基于OpenGL2.0,在2007 年发布 OpenGL 2.0 向下兼容OpenGL 1.5而 OpenGL ES 2.0和OpenGL ES1.x 不兼容,是两种完全不同的实现。

OpenGL ES Profiles OpenGL ES 1.x 支持两种Profile 以支持不同类型的嵌入设备。1. The Common Profile 针对支持硬件浮点运算的设备,API 支持定点和浮点运算。2. The Common Lite Profile 针对不支持硬件浮点运算的设备,API 只支持定点运算。 本教程主要针对 Common Profile设备支持浮点运算。Android OpenGL ES开发教程(3)OpenGL ES 管道(Pipeline) 大部分图形系统都可以比作工厂中的装配线(Assemble line)或者称为管道 (Pipeline) 。前一道的输出作为下道工序的输入。主CPU 发出一个绘图指令,然 后可能由硬件部件完成坐标变换,裁剪,添加颜色或是材质,最后在屏幕上显示 出来。 OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带 有很多控制开关的机器,尽管加工的工序是固定的,但是可以通过打开或关闭开 关来设置参数或者打开关闭某些功能。 OpenGL ES 2.0 允许提供编程来控制一些重要的工序,一些“繁琐” 的工序比如 栅格化等仍然是固定的。

下图显示了OpenGL ES 1.x固定管道的: 管道“工序”大致可以分为 Transformation Stage和 Rasterization Stage两大步。 OpenGL ES 支持的基本图形为 点Point,线Line, 和三角形Triangle,其它所有复制图形都是通过这几种基本几何图形组合而成。 在发出绘图指令后,会对顶点(Vertices)数组进行指定的坐标变换或光照处理。 顶点处理完成后,通过Rasterizer来生成像素信息,称为”Fragments“ 。 对于Fragment 在经过Texture Processing, Color Sum ,Fog等处理并将最终处理结果存放在内存中(称为FrameBuffer) 。 OpenGL 2.0 可以通过编程来修改蓝色的步骤,称为ProgrammableShader. 以上管道中工序可以通过设置来打开或关闭某些功能(比如无需雾化Fog 处理), 并可以为某个工序设置参数,比如设置Vertext Array 。 本教程主要介绍 OpenGL ES 1.1 编程,支持OpenGL ES 2.0的设备一般会同 时支持OpenGL ES 1.1 。

函数[调用类型]函数名(整数32参数1,整数32参数2)=>(整数32,整数32)。从这里可以看出,定义的枚举类型名称应以 2~3 个大写字母开头,而这通常与项目设置的类文件前缀相同,跟随其后的命名应采用驼峰命名法则,命名应准确表述枚举表示的意义,枚举中各个值都应以定义的枚举类型开头,其后跟随各个枚举值对应的状态、选项或者状态码。函数类型类型名(整数32参数1,整数32参数2)=>整数32。

android opengl es教程_android opengl 教程_android opengl 教程

 GL_TRUE,GL_FALSE 对应到boolean 类型 C 字符串((char*))对应到Java的 UTF-8 字符串。 在前面Android OpenGL ES开发中的Buffer 使用 说过OpenGL ES说过为了 提高性能,通常将顶点android opengl 教程,颜色等值存放在java.nio包中定义的Buffer 类中。下 表列出了OpenGL ES 指令后缀, Java 类型,Java Buffer(java.nio)类型的对照 表 如下面代码 将为顶点指定color值,使用FloatBuffer来存放顶点的Color 数组 1// The colors mapped to the vertices. 2float[] colors = { 31f, 0f, 0f, 1f, // vertex 0 red 40f, 1f, 0f, 1f, // vertex 1 green 50f, 0f, 1f, 1f, // vertex 2 blue 61f, 0f, 1f, 1f, // vertex 3 magenta 7}; 8... 9// float has 4 bytes, colors (RGBA) * 4 bytes 10ByteBuffer cbb 11= ByteBuffer.allocateDirect(colors.length * 4); 12cbb.order(ByteOrder.nativeOrder()); 13colorBuffer = cbb.asFloatBuffer(); 14colorBuffer.put(colors); 15colorBuffer.position(0); 16Android OpenGL ES开发教程(5)关于EGL OpenGL ES 的javax.microedition.khronos.opengles包定义了平台无关的GL 绘图指令,EGL(javax.microedition.khronos.egl ) 则定义了控制displays ,contexts以及surfaces 的统一的平台接口。

 Display(EGLDisplay) 是对实际显示设备的抽象。 Surface (EGLSurface )是对用来存储图像的内存区域FrameBuffer 的抽象,包括Color Buffer, Stencil Buffer ,Depth Buffer. Context (EGLContext) 存储OpenGL ES 绘图的一些状态信息。 使用EGL 的绘图的一般步骤:1. 获取EGLDisplay 对象2. 初始化与EGLDisplay之间的连接。3. 获取EGLConfig 对象4. 创建EGLContext实例5. 创建EGLSurface 实例6. 连接EGLContext 和EGLSurface.7. 使用GL 指令绘制图形8. 断开并释放与EGLSurface 关联的EGLContext 对象9. 删除EGLSurface 对象10. 删除EGLContext 对象11. 终止与EGLDisplay 之间的连接。 一般来说在Android 平台上开发OpenGL ES 应用,无需直接使用 javax.microedition.khronos.egl 包中的类按照上述步骤来使用OpenGL ES 绘 制图形,在Android 平台中提供了一个android.opengl 包,类GLSurfaceView 提供了对Display,Surface,Context的管理,大大简化了OpenGL ES 的程序框架, 对应大部分OpenGL ES 开发,只需调用一个方法来设置OpenGLView 用到的 GLSurfaceView.Renderer 。

这种方法要求对被调试线程的context结构进行操作,意味着要编写特定cpu的代码,因此需要修改源代码,使之能够在不同的cpu平台上正确地运行,且对被调试进程执行的机器语言指令进行硬编码。选中需要添加阴影的图形,单击【绘图】工具栏中的【阴影样式】按钮,在打开的菜单中选择一种阴影,单击【绘图】工具栏中的【三维效果样式】按钮,在打开的菜单中选择一种三维效果样式,可以利用【绘图】工具栏中的【阴影样式】按钮和【三维效果样式】按钮为图形添加阴影和三维效果。控制这个mpm的最重要的指令是,控制每个子进程允许建立的线程数的threadsperchild指令,和控制允许建立的总线程数的maxclients指令。

使用过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 一个可能的实现如下:1class GLSurfaceView extends SurfaceView2implements SurfaceHolder.Callback, Runnable {3public GLSurfaceView(Context context) {4super(context);5mHolder = getHolder();6mHolder.addCallback(this); 7mHolder.setType(SurfaceHolder.SURFACE_TYPE_GPU); 8} 9public void setRenderer(Renderer renderer) { 10mRenderer = renderer; 11} 12public void surfaceCreated(SurfaceHolder holder) { 13} 14public void surfaceDestroyed(SurfaceHolder holder) { 15running = false; 16try { 17thread.join(); 18} catch (InterruptedException e) { 19} 20thread = null; 21} 22public void surfaceChanged(SurfaceHolder holder, 23int format, int w, int h) { 24synchronized(this){ 25mWidth = w; 26mHeight = h; 27thread = new Thread(this); 28thread.start(); 29} 30} 31public interface Renderer { 32void EGLCreate(SurfaceHolder holder); 33void EGLDestroy(); 34int Initialize(int width, int height); 35void DrawScene(int width, int height); 36} 37public void run() { 38synchronized(this) { 39mRenderer.EGLCreate(mHolder); 40mRenderer.Initialize(mWidth, mHeight); 41running=true; 42while (running) { 43mRenderer.DrawScene(mWidth, mHeight); 44} 45mRenderer.EGLDestroy(); 46} 47} 48private SurfaceHolder mHolder; 49private Thread thread; 50private boolean running; 51private Renderer mRenderer; 52private int mWidth; 53private int mHeight; 54} 55class GLRenderer implements GLSurfaceView.Renderer { 56public GLRenderer() { 57} 58public int Initialize(int width, int height){ 59gl.glClearColor(1.0f, 0.0f, 0.0f, 0.0f); 60return 1; 61} 62public void DrawScene(int width, int height){ 63gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 64egl.eglSwapBuffers(eglDisplay, eglSurface); 65} 66public void EGLCreate(SurfaceHolder holder){ 67int[] num_config = new int[1]; 68EGLConfig[] configs = new EGLConfig[1]; 69int[] configSpec = { 70EGL10.EGL_RED_SIZE, 8, 71EGL10.EGL_GREEN_SIZE, 8, 72EGL10.EGL_BLUE_SIZE, 8, 73EGL10.EGL_SURFACE_TYPE,EGL10.EGL_WINDOW_BIT, 74EGL10.EGL_NONE 75}; 76this.egl = (EGL10) EGLContext.getEGL(); 77eglDisplay = 78this.egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); 79this.egl.eglInitialize(eglDisplay, null); 80this.egl.eglChooseConfig(eglDisplay, configSpec, 81configs, 1, num_config); 82eglConfig = configs[0]; 83eglContext = this.egl.eglCreateContext(eglDisplay, eglConfig, 84EGL10.EGL_NO_CONTEXT, null); 85eglSurface = this.egl.eglCreateWindowSurface(eglDisplay, 86eglConfig, holder, null); 87this.egl.eglMakeCurrent(eglDisplay, eglSurface, 88eglSurface, eglContext); 89gl = (GL10)eglContext.getGL(); 90} 91public void EGLDestroy(){ 92if (eglSurface != null) { 93egl.eglMakeCurrent(eglDisplay, EGL10.EGL_NO_SURFACE, 94EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT); 95egl.eglDestroySurface(eglDisplay, eglSurface); 96eglSurface = null; 97} 98if (eglContext != null) { 99egl.eglDestroyContext(eglDisplay, eglContext); 100eglContext = null; 101} 102if (eglDisplay != null) { 103egl.eglTerminate(eglDisplay); 104eglDisplay = null; 105} 106} 107private EGL10 egl; 108private GL10 gl; 109private EGLDisplay eglDisplay; 110private EGLConfig eglConfig; 111private EGLContext eglContext;112private EGLSurface eglSurface;113} 可以看到需要派生SurfaceView ,并手工创建,销毁Display,Context,工作繁琐。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-113773-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 丁沙沙
      丁沙沙

      打到东京娶日本妞

    • 沈祖仙
      沈祖仙

      污陷别人是要追究责任的

    热点图片
    拼命载入中...