RSS
 
以后地位 : 主页 > 刷机教程 >

Android OpenGL分享心得

工夫:2015-08-25 09:28 阅读:

  这是网友初学Android OpenGL的一些心得,在这里和各人一同分享,盼望对初学OpenGL的开辟者有所协助。这篇教程次要是一些实际的解说,可以让你开端理解Android OpenGL的开辟。

  起首是先把Dev Guide翻译了一下:
  1.summary:
  经过OpenGL API,Android包括对高功能3D图形的支持 — 详细而言,是指OpenGL ES API 。OpenGL ES 是依据OpenGL标准停止裁剪后定制而构成的一套规范,针对嵌入式设置装备摆设而设计。各版本的OpenGL ES都普遍地向次要的OpenGL规范看齐。现在,Android支持OpenGL ES1.0,即相称于OpenGL 1.3。换言之,假定你的使用顺序可以在桌面零碎上联合OpenGL 1.3运转,那么它亦将可以运转在Android上。Android提供的这一API相似于J2ME中的OpenGL ES API(JSR 239)。但是,有能够并非完全分歧;因而,对一些偏向要多加注意。

  2.Using the API
  这里给出一个比拟笼统的运用API的步调:
  1.编写一个自界说的 View 子类。
  2.获得一个OpenGLContext句柄,以便运用 OpenGL 提供的那些功用。
  3.在View 类的 onDraw() 办法里,获得一个指向GL工具的句柄,并挪用它所提供的一些办法来执 行GL操纵。

  3.参考
  ApiDemo中的com.android.samples.graphics.GLSurfaceViewActivity.java可以做很好的参考。固然也不克不及遗忘看文档哦。

  接上去便是例子了,实在,我便是把apidemo中的GLSurfaceViewActivity别离了出来。

  留意一下几点:
  1.OpenGL有本人的Surface --> GLSurfaceView
  2.GLSurfaceView需求你注册一个Renderder,它是GLSurfaceView.Renderer接口,普通来说多是本人完成的,比方里中的SimpleRenderer。
  3.留意例子中的Activity的setContentView(mGLSurfaceView);是GLSurfaceView范例。

  summary:
  一个SurfaceView的完成,用专门surface供表现OpenGL的描画,它提供比方上面一个特性:
  1.办理一个surface,它是一个特别的内存能被混淆到Android的view System。
  2.办理EGL表现,能让OpenGL描画到一个surface中。
  3.接纳用户提供的描画器工具,来做实践的描画。
  4.在一个专门的线程上停止描画任务,从UI线程上增加翻译的体现。
  5.支持讯问式和延续的描画。
  6.任选,wraps,trace或许error-check 描画器的的OpenGL挪用。

  Using GLSurfaceView
  通常经过承继运用GLSurfaceView,偏重载一个或多个View System input event办法。假如你的使用不需求重载事情办法,那么GLSurfaceView能被用作as-is干系。关于大局部的GLSurfaceView的举动是经过set办法停止客制化的,而不是经过承继。比方:不像一个正常的View,drawing被拜托给一个别离的绘画器工具,这个工具是经过挪用setRenderer办法注册的。

  Initializing GLSurfaceView
  Summary
  GLSurfaceView的初始化便是setRenderer。然后,假如你需求,你可以在挪用setRenderer之前,经过上面中的一个或许多个办法修正GLSurfaceView的默许举动:    
  * setDebugFlags(int)     
  * setEGLConfigChooser(boolean)
  * setEGLConfigChooser(EGLConfigChooser)     
  * setEGLConfigChooser(int, int, int, int, int, int)     
  * setGLWrapper(GLWrapper)   

  Choosing an EGL Configuration
  一个Anroid设置装备摆设能够支持多品种型的Surface。这些可用的Surface的区别能够是数据表现了几多个channel,每一个channel分派了几多个bit。因而,在开端绘画前,GLSurfaceView的第一件不得不做的事是运用那种Surface。    

  默许GLSurfaceView选择一个最靠近16-bit R5G6B5的Surface,拥有一个16-bit depth的buffer,没有模板(no stencil)。假如你更喜好一个差别的Surface(比方,你不需求depth buffer)你能经过setEGLConfigChooser办法掩盖默许的举动。

  Debug Behavior
  你能经过一个或多个调试办法改动GLSurfaceView的举动。这些办法在setRenderer办法前后都可以,普通在挪用setRenderer之前,如许能立刻失效。那几个办法就本人去看Reference了。

  Setting a Renderer
  最初你必需挪用setRenderer办法注册一个GLSurfaceView.Renderer。这个绘画器担任OpenGL实践的绘画。

  Rendering Mode    
  一旦绘画器设置了,你能控制这个绘画器延续的画或许讯问式的画。默许是延续的画。

  Activity Life-cycle    
  一个GLSurfaceView必需在Activity中止和规复时被告诉。在Activity中止和规复时,GLSurfaceView客户端需求挪用onPause()和onResume()办法。这些办法容许GLSurfaceView中止和规复绘画线程,并也GLSurfaceView开释和重修OpenGL表现。

  Handling events
  为了处置事情,你通常需求承继GLSurfaceView并掩盖得当的办法,就像你对其他view的一样。但是,当处置事情时,你能够需求与绘画线程中的绘画器通讯。你能用任何Java规范的跨线程机制。别的,一个复杂的方法是经过queueEvent(Runnable办法。例子将Reference了 。