自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android中建立一個(gè)OpenGL ES的開發(fā)環(huán)境

移動(dòng)開發(fā) Android
在使用OpengGL ES 2.0的API時(shí),也許你會(huì)很奇怪這些方法中為什么會(huì)包含有GL10參數(shù),這是因?yàn)檫@些方法的簽名是重用了2.0的API,以保證Android框架的代碼更加簡(jiǎn)單。

要用OpenGl ES在應(yīng)用程序中繪制圖像,首先你要?jiǎng)?chuàng)建與之對(duì)應(yīng)的視圖容器。

當(dāng)中最直接的方法就是使用GLSurfaceView和GLSurfaceView.Renderer接口。

GLSurfaceView是OpenGL所繪制的圖形的視圖容器,而GLSurfaceView.Renderer控制在視圖上所繪制的圖像。想獲取更多關(guān)于這兩個(gè)類的信息,請(qǐng)參考OpenGl ES開發(fā)指南。

GLSurfaceView只是把OpenGL ES圖像組合到應(yīng)用程序的其中一種方法,但對(duì)于繪制全屏或接近全屏的圖形來說,它是一個(gè)很好的選擇。開發(fā)者如果想把OpenGL ES圖像組合成布局中的一小部分,可以查看TextureView。事實(shí)上,獨(dú)立開發(fā)者也可以在SurfaceView上創(chuàng)建OpenGL ES視圖,但這需要寫更多額外的代碼。

這節(jié)課將介紹如何在應(yīng)用程序中***限度地實(shí)現(xiàn)GLSurfaceView和GLSurfaceView.Renderer。

在Manifest聲明OpenGL ES的使用 Declare OpenGL ES Use in the Manifest

要在應(yīng)用程序中使用 OpenGL ES 2.0 API,你必須在Manifest添加以下的聲明:

  1. <uses-feature android:glEsVersion="0x00020000" android:required="true" /> 

如果你的應(yīng)用程序中使用到了紋理壓縮,你必須聲明應(yīng)用程序所支持的壓縮格式,以便提醒不支持這些格式的設(shè)備不會(huì)嘗試運(yùn)行你的應(yīng)用程序:

  1. <supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" /> 
  2. <supports-gl-texture android:name="GL_OES_compressed_paletted_texture" /> 

想獲取更多關(guān)于紋理壓縮格式的信息,請(qǐng)參考OpenGl ES開發(fā)指南。

創(chuàng)建OpenGL ES的Activity Create an Activity for OpenGL ES Graphics

Android使用到OpenGL ES的應(yīng)用程序和其他的應(yīng)用程序的activities一樣,都有一個(gè)用戶界面。當(dāng)中***的不同就是,在activity的布局中你使用了什么控件,在很多應(yīng)用中,你可能會(huì)使用TextView,Button和ListView,在使用了OpenGL ES的應(yīng)用程序,你還可以添加GLSurfaceView。

下面的示例代碼中,呈現(xiàn)了一個(gè)Activity使用GLSurfaceView作為主視圖的***實(shí)現(xiàn):

  1. public class OpenGLES20 extends Activity { 
  2. private GLSurfaceView mGLView; 
  3. @Override 
  4. public void onCreate(Bundle savedInstanceState) { 
  5.     super.onCreate(savedInstanceState); 
  6.     // Create a GLSurfaceView instance and set it 
  7.     // as the ContentView for this Activity. 
  8.     mGLView = new MyGLSurfaceView(this); 
  9.     setContentView(mGLView); 

備注:OpenGL ES 2.0需要Android2.2(API 8)以上使用,請(qǐng)確定你的Android工程的API設(shè)置正確。

創(chuàng)建GLSurfaceView對(duì)象 Build a GLSurfaceView Object

GLSurfaceView是一個(gè)可以繪制OpenGL ES圖像的專門視圖,它本身沒有處理功能,所繪制的圖像都是由你所設(shè)置的GLSurfaceView.Renderer來控制的。事實(shí)上,該對(duì)象的代碼很簡(jiǎn)單,你可能寧愿自己創(chuàng)建一個(gè)沒有定義好的GLSurfaceView實(shí)例,而不去繼承它,但是千萬不要這樣做。你需要繼承這個(gè)類,才能捕獲觸摸事件,這些將會(huì)在Responding_to_Touch_Events |觸摸響應(yīng)這節(jié)課中有介紹到。

GLSurfaceView的必要代碼是很少的,為了一個(gè)快速的實(shí)現(xiàn),最常見的做法是在activity中創(chuàng)建一個(gè)內(nèi)部類:

  1. class MyGLSurfaceView extends GLSurfaceView { 
  2. public MyGLSurfaceView(Context context){ 
  3.     super(context); 
  4.     // Set the Renderer for drawing on the GLSurfaceView 
  5.     setRenderer(new MyRenderer()); 

在使用OpenGL ES 2.0時(shí),你必須在你的GLSurfaceView構(gòu)造器中添加多一句代碼,以聲明你是使用OpenGL ES 2.0的API:

  1. // Create an OpenGL ES 2.0 context 
  2.  setEGLContextClientVersion(2); 

備注:如果你使用的是OpenGL ES 2.0的API,請(qǐng)確認(rèn)你已經(jīng)在應(yīng)用程序的manifest進(jìn)行了聲明。更多的信息,請(qǐng)參考在Manifest聲明OpenGL ES的使用 Declare OpenGL ES Use in the Manifest

使用GLSurfaceView.RENDERMODE_WHEN_DIRTY可以設(shè)定GLSurfaceView實(shí)現(xiàn)的渲染模式:當(dāng)應(yīng)用程序的圖數(shù)據(jù)發(fā)生變化時(shí),才繪制試圖。該設(shè)置是可選的,設(shè)置如下:

  1. // Render the view only when there is a change in the drawing data 
  2. setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 

該設(shè)置可以防止GLSurfaceView圖像被重新繪制,直到你調(diào)用了equestRender())方法,這在樣例應(yīng)用程序中更體現(xiàn)了其的價(jià)值。

創(chuàng)建渲染器類 Build a Renderer Class

GLSurfaceView.Renderer類或渲染器的實(shí)現(xiàn),使得使用了OpenGL的應(yīng)用程序開始變成一個(gè)有趣的事情。這個(gè)類控制與之關(guān)聯(lián)的東西可以被繪制在GLSurfaceView。渲染器中提供了三種方法給Android系統(tǒng)調(diào)用,以控制什么可以,以及怎樣繪制在GLSurfaceView上。

* onSurfaceCreated()) - 設(shè)置視圖的OpenGL ES環(huán)境,只需調(diào)用一次

* onDrawFrame()) - 重新繪制每個(gè)視圖時(shí)調(diào)用

* onSurfaceChanged()) - 視圖的幾何發(fā)現(xiàn)變化時(shí)調(diào)用,例如,設(shè)備的屏幕的方向發(fā)生變化

下面是對(duì)于OpenGL ES渲染器一個(gè)很基本的實(shí)現(xiàn),只在GLSurfaceView上繪制了一個(gè)灰色的背景:

  1. public class MyGL20Renderer implements GLSurfaceView.Renderer { 
  2. public void onSurfaceCreated(GL10 unused, EGLConfig config) { 
  3.         // Set the background frame color 
  4.         GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); 
  5.     } 
  6.     public void onDrawFrame(GL10 unused) { 
  7.         // Redraw background color 
  8.         GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); 
  9.     } 
  10.     public void onSurfaceChanged(GL10 unused, int width, int height) { 
  11.         GLES20.glViewport(00, width, height); 
  12.     } 
  13.     } 

這就是這節(jié)課所介紹的所有東西。上面的示例代碼創(chuàng)建了一個(gè)簡(jiǎn)單的應(yīng)用程序:使用OpenGL繪制灰色的背景。雖然代碼沒有做什么有趣的事情,但是通過建立這些類,你奠定了使用OpenGL繪制圖像的基礎(chǔ)。

在使用OpengGL ES 2.0的API時(shí),也許你會(huì)很奇怪這些方法中為什么會(huì)包含有GL10參數(shù),這是因?yàn)檫@些方法的簽名是重用了2.0的API,以保證Android框架的代碼更加簡(jiǎn)單。

如果你對(duì)OpenGL ES的API已經(jīng)熟悉,你已經(jīng)可以在你的應(yīng)用程序中建立OpenGL ES環(huán)境并且繪制圖形了。但是,如果你還需要更多的幫助來開始OpenGL,你可以繼續(xù)下節(jié)課的學(xué)習(xí),以獲取更多的提示。

責(zé)任編輯:閆佳明 來源: wiki.eoe.cn
相關(guān)推薦

2014-04-29 14:16:54

2019-09-03 11:32:36

PythonLinux操作系統(tǒng)

2014-08-13 19:14:26

2015-03-27 18:05:00

2010-08-19 10:02:25

AndroidEclipseUbuntu

2016-08-04 14:08:57

前端javascripthtml

2023-05-09 07:10:53

2014-04-29 14:27:59

OpenGL ES 2Android繪制紋理

2014-04-29 14:05:02

OpenGL ESAndroid添加動(dòng)作

2020-09-17 10:58:58

IT文化首席信息官領(lǐng)導(dǎo)者

2017-06-22 10:44:55

Linux調(diào)試器準(zhǔn)備環(huán)境

2009-12-09 09:47:05

ibmdwRational

2014-04-24 13:26:24

OpenGL ES2.iOSiPhone

2016-08-11 17:09:14

Javascripthtml前端

2016-11-07 21:24:08

HtmlNode.jsJavascript

2016-11-07 21:15:12

前后端分離expressJavascript

2013-09-26 14:09:31

iOS開發(fā)OpenGL ES教程繪制矩形

2023-02-01 16:36:31

GNOMEChatGPTLinux

2021-06-24 06:00:51

EleventyJavaScript靜態(tài)網(wǎng)站

2013-08-26 13:58:20

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)