日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
AndroidOpenGLES2.0繪圖:搭建OpenGLES環(huán)境

為了能夠在Android應(yīng)用程序中使用OpenGL ES繪制圖形,你必須創(chuàng)建一個視圖作為容器。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),鐘山企業(yè)網(wǎng)站建設(shè),鐘山品牌網(wǎng)站建設(shè),網(wǎng)站定制,鐘山網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,鐘山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

而更直接的做法是從GLSurfaceView和 GLSurfaceView.Renderer各派生一個實(shí)現(xiàn)類。GLSurfaceView作為使用OpenGL繪制的容器,GLSurfaceView.Renderer將用于控制繪圖的動作。

對這些類的更多信息,請參閱OpenGL ES開發(fā)人員指南。

使用GLSurfaceView幾乎是整合OpenGL ES到你的應(yīng)用中的唯一方式。對于一個需要全屏或近乎屏幕圖形視圖,它是一個合理的選擇。如果開發(fā)人員只是期望借助OpenGL ES在某個布局中一小部分繪圖,則應(yīng)該考慮使用TextureView。如果覺得自己是“大?!?完全可以使用SurfaceView建立一個 OpenGL ES視圖,但這樣做需要編寫相當(dāng)多的額外的代碼。

這一節(jié)將介紹如何在一個簡單應(yīng)用的activity中完成一個最小的GLSurfaceView和GLSurfaceView.Renderer的實(shí)現(xiàn)。

一、在Manifest文件中聲明使用OpenGL ES

為了能夠使用OpenGL ES 2.0 API,你必須在manifest文件中添加以下聲明:

 
 
 
  1. [html] view plaincopyprint?

如果你的應(yīng)用需要使用紋理壓縮功能,還要聲明設(shè)備需要支持什么樣的壓縮格式:

 
 
 
  1. [html] view plaincopyprint?

更多關(guān)于紋理壓縮格式的信息,請參閱OpenGL開發(fā)人員指南。

二、為OpenGL ES圖形創(chuàng)建一個Activity

這個Activity跟任何其他的應(yīng)用程序中的Activity一樣,也有一個用戶界面。唯一的區(qū)別是在它的布局文件中存放的視圖不是TextView、Button和ListView,而是一個GLSurfaceView。

下面的代碼演示了使用GLSurfaceView作為主視圖的Acitivity的核心代碼:

 
 
 
  1. [java] view plaincopyprint?
  2. public class OpenGLES20 extends Activity {
  3. private GLSurfaceView mGLView;
  4. @Override
  5. public void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. // 創(chuàng)建一個GLSurfaceView對象,并將其設(shè)置為當(dāng)前Activity的ContentView
  8. mGLView = new MyGLSurfaceView(this);
  9. setContentView(mGLView);
  10. }
  11. }
  12. public class OpenGLES20 extends Activity {
  13. private GLSurfaceView mGLView;
  14. @Override
  15. public void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. // 創(chuàng)建一個GLSurfaceView對象,并將其設(shè)置為當(dāng)前Activity的ContentView
  18. mGLView = new MyGLSurfaceView(this);
  19. setContentView(mGLView);
  20. }
  21. }

注:OpenGL ES 2.0需要Android2.2 (API Level 8) 及以上版本,所以請確保你的Android項目的運(yùn)行目標(biāo)的API等級不低于8或更高。

三、構(gòu)造一個GLSurfaceView對象

事實(shí)上GLSurfaceView并沒有提供很多功能,實(shí)際上繪制對象的任務(wù)都在GLSurfaceView.Renderer中進(jìn)行。所以 GLSurfaceView中代碼也非常少,甚至可以直接使用GLSurfaceView。但***別這樣做,因為你需要擴(kuò)展這個類來響應(yīng)觸摸事件。

通常在當(dāng)前Activity中以內(nèi)部類的方式創(chuàng)建GLSurfaceView,這樣實(shí)現(xiàn)起來非???,核心代碼如下

 
 
 
  1. [java] view plaincopyprint?
  2.   class MyGLSurfaceView extends GLSurfaceView {
  3.   public MyGLSurfaceView(Context context){
  4.   super(context);
  5.   // 設(shè)置渲染對象,用于控制在GLSurfaceView中的繪制工作
  6.   setRenderer(new MyRenderer());
  7.   }
  8.   }
  9.   class MyGLSurfaceView extends GLSurfaceView {
  10.   public MyGLSurfaceView(Context context){
  11.   super(context);
  12.   // 設(shè)置渲染對象,用于控制在GLSurfaceView中的繪制工作
  13.   setRenderer(new MyRenderer());
  14.   }
  15.   }

當(dāng)使用OpenGL ES 2.0時,你必須在GLSurfaceView構(gòu)造器中調(diào)用另外一個方法,它指定了你將要使用2.0版的API:

 
 
 
  1. [java] view plaincopyprint?
  2. // 創(chuàng)建一個OpenGL ES 2.0 context
  3. setEGLContextClientVersion(2);
  4. // 創(chuàng)建一個OpenGL ES 2.0 context
  5. setEGLContextClientVersion(2);
  6. 注:如果你使用的是OpenGL ES 2.0的API,那么請確保在Manifest文件中作出相關(guān)API版本聲明。有關(guān)更多信息,請參見在Manifest文件中聲明使用OpenGL ES。
  7. 另一個可以添加到你的GLSurfaceView中可選操作是設(shè)置渲染模式為僅當(dāng)繪制數(shù)據(jù)發(fā)生改變時才繪制view。該渲染模式常量是GLSurfaceView.RENDERMODE_WHEN_DIRTY。
  8. [java] view plaincopyprint?
  9. // 只有在繪制數(shù)據(jù)改變時才繪制view
  10. setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
  11. // 只有在繪制數(shù)據(jù)改變時才繪制view
  12. setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

該設(shè)置可以防止GLSurfaceView幀重繪,直到調(diào)用requestRender()方法。這樣的繪制機(jī)制更高效。

四、構(gòu)造一個Renderer類

Renderer類負(fù)責(zé)控制在GLSurfaceView中繪制任務(wù),并提供三個回調(diào)方法供Android系統(tǒng)調(diào)用,用來計算在GLSurfaceView中繪制什么以及如何繪制。

1.onSurfaceCreated():僅調(diào)用一次,用于設(shè)置view的OpenGL ES環(huán)境。

2.onDrawFrame():每次重繪view時調(diào)用。

3.onSurfaceChanged():當(dāng)view的幾何形狀發(fā)生變化時調(diào)用,比如設(shè)備從豎屏變?yōu)闄M屏。

下面是一個OpenGL ES renderer的最基本的實(shí)現(xiàn),僅在GLSurfaceView上畫了一個灰色的背景:

 以上就是所有要做的東西!上面的代碼示例創(chuàng)建了一個簡單的Android應(yīng)用,它使用OpenGL顯示了一個灰色的屏幕。雖然這段代碼并沒有做什么有趣的事情,但是通過創(chuàng)建這些類,已經(jīng)為你使用OpenGL繪制圖形奠定了基礎(chǔ)。

注:當(dāng)你使用OpengGLES 2.0 API時,可以不用去明白這些方法們?yōu)槭裁炊加幸粋€GL10參數(shù)。其實(shí)這樣做的目的是讓Android框架能夠簡單的兼容OpenGL ES的各版本。

如果你對OpenGL ES API很熟悉,你現(xiàn)在應(yīng)該能夠在應(yīng)用程序中建立一個OpenGL ES環(huán)境并開始繪制圖形了。然而,如果你想要學(xué)習(xí)更多的相關(guān)知識,那么就請繼續(xù)關(guān)注下一節(jié)吧。


網(wǎng)頁標(biāo)題:AndroidOpenGLES2.0繪圖:搭建OpenGLES環(huán)境
轉(zhuǎn)載源于:http://m.5511xx.com/article/ccdscjc.html