成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android OpenGL ES 2.0繪圖:搭建OpenGL ES環(huán)境

移動開發(fā) Android
這一節(jié)將介紹如何在一個簡單應用的activity中完成一個最小的GLSurfaceView和GLSurfaceView.Renderer的實現。使用GLSurfaceView幾乎是整合OpenGL ES到你的應用中的唯一方式。對于一個需要全屏或近乎屏幕圖形視圖,它是一個合理的選擇。

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

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

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

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

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

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

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

  1. [html] view plaincopyprint? 

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

  1. [html] view plaincopyprint? 

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

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

這個Activity跟任何其他的應用程序中的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對象,并將其設置為當前Activity的ContentView 
  8. mGLView = new MyGLSurfaceView(this); 
  9. setContentView(mGLView); 
  10. public class OpenGLES20 extends Activity { 
  11. private GLSurfaceView mGLView; 
  12. @Override 
  13. public void onCreate(Bundle savedInstanceState) { 
  14. super.onCreate(savedInstanceState); 
  15. // 創(chuàng)建一個GLSurfaceView對象,并將其設置為當前Activity的ContentView 
  16. mGLView = new MyGLSurfaceView(this); 
  17. setContentView(mGLView); 

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

三、構造一個GLSurfaceView對象

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

通常在當前Activity中以內部類的方式創(chuàng)建GLSurfaceView,這樣實現起來非常快,核心代碼如下

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

當使用OpenGL ES 2.0時,你必須在GLSurfaceView構造器中調用另外一個方法,它指定了你將要使用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文件中作出相關API版本聲明。有關更多信息,請參見在Manifest文件中聲明使用OpenGL ES。 
  7. 另一個可以添加到你的GLSurfaceView中可選操作是設置渲染模式為僅當繪制數據發(fā)生改變時才繪制view。該渲染模式常量是GLSurfaceView.RENDERMODE_WHEN_DIRTY。 
  8. [java] view plaincopyprint? 
  9. // 只有在繪制數據改變時才繪制view 
  10. setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 
  11. // 只有在繪制數據改變時才繪制view 
  12. setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 

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

四、構造一個Renderer類

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

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

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

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

下面是一個OpenGL ES renderer的最基本的實現,僅在GLSurfaceView上畫了一個灰色的背景:

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

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

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

原文鏈接

責任編輯:閆佳明 來源: bbs.9ria
相關推薦

2014-04-29 14:27:59

OpenGL ES 2Android繪制紋理

2014-04-29 14:49:37

OpenGL ES 2Android應用投影

2014-04-24 11:16:00

OpenGL ES 2入門

2014-04-24 13:26:24

OpenGL ES2.iOSiPhone

2014-04-24 14:00:35

OpenGL ES 2編程

2014-04-24 13:35:11

OpenGL ES2.iOSAndroid

2013-04-26 10:26:08

2014-04-29 14:05:02

OpenGL ESAndroid添加動作

2013-07-05 14:45:05

AndroidOpenGL ES開發(fā)

2013-09-02 15:46:06

OpenGLWindows

2014-04-29 13:58:11

OpenGL ESAndroid響應觸屏事件

2010-02-14 15:27:25

2017-07-19 15:25:16

iOS開發(fā)ARKitOpen GL

2017-07-04 12:26:14

ARARKit

2013-09-26 13:43:13

iOS開發(fā)OpenGL ES教程圖元

2013-09-26 14:09:31

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

2017-07-06 15:02:53

OpenGL ES架構GPU

2014-04-29 14:08:40

OpenGL ESAndroid應用投影

2014-06-18 10:34:41

Android字體渲染器OpenGL ES

2014-07-16 15:49:13

AndroidOpenGL 4.4
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色在线播放视频 | 一区二区不卡 | 日本精品视频在线观看 | h片在线观看网站 | 亚洲a视频| 99爱在线视频| 美女精品一区 | 天天射中文| 色综合一区二区 | 国产色 | 羞羞网站免费观看 | 欧美精品v国产精品v日韩精品 | 精品91| 在线视频 亚洲 | 欧美日韩国产不卡 | 日韩精品a在线观看图片 | 欧美九九 | 免费午夜视频 | 天天操天天射天天 | 国产a视频| 老头搡老女人毛片视频在线看 | 黄色在线观看 | 国产一级毛片精品完整视频版 | 久久九九99 | 国产精品久久久久久久久久免费看 | 91麻豆产精品久久久久久夏晴子 | 国产精品免费大片 | 成人国产精品免费观看视频 | 亚洲经典一区 | 欧美全黄 | 亚洲成人av在线 | 亚洲欧洲成人在线 | 亚洲乱码国产乱码精品精98午夜 | 日本三级视频 | 欧美精品久久久久 | 欧美精品一区二区免费 | 欧美一级片久久 | 日韩精品在线网站 | 亚洲一区中文字幕在线观看 | 欧美激情精品久久久久久 | 午夜av免费|