[android] OpenGL與OpenGL ES簡介

來源:互聯網
上載者:User

標籤:

簡介OpenGL

OpenGL的全稱是Open Graphics Library,即開放的圖形庫介面,它定義了一個跨程式設計語言,跨平台的編程介面的規範,它主要用於3D圖形(2D也可以)編程。OpenGL的前身是SGI公司為其圖形工作站開發的IRIS GL。IRIS RL是一個工業標準的3D圖形軟體介面,功能雖然強大,但是移植性不好,於是SGI公司在IRIS GL的基礎上開發了OpenGL。

OpenGL體系簡單,而且具有跨平台特性,它不像Direct3D,是Microsoft開發的windows平台下的圖形介面,只能在windows系統上運行。因此OpenGL具有很廣泛的適應性,不僅用於大型工作站,也用於個人PC。

OpenGL ES

在圖形工作站,個人PC上,OpenGL都可以很好的工作。但三維圖形計算需要處理大量資料,因此在一些手機之類小型裝置上,如果繼續用OpenGL,就顯得比較困難。為瞭解決這個問題,Khronos集團問OpenGL提供了一個子集:OpenGL ES(OpenGL for Embedded System,即為嵌入式系統最佳化的OpenGL)。

Khronos是一個圖形軟硬體行業協會,該協會主要關注圖形和多媒體方面的開放標準,Khronos協會針對手機,PDA(個人資料助手)和遊戲主機等嵌入式裝置設定了OpenGL ES。

OpenGL ES是免費的、跨平台的、功能完備的2D/3D圖形庫介面API,它針對多種嵌入式系統(包括控制台,手機,手持功能,家電,汽車)專門設計,他是一個精心提取的OpenGL子集。

OpenGL ES剔除了OpenGL中的glBegin/glEnd,四邊形(GL_QUADS)、多邊形(GL_POLYGONS)等許多非絕對必要的特性。經過多年發展,目前OpenGL ES主要有兩個版本,OpenGL ES 1.x針對固定管線硬體;OpenGL ES 2.x針對可程式化管線硬體。

OpenGL ES 1.0是以OpenGL 1.3規範為基礎的,OpenGL ES 1.1是以OpenGL ES 1.5規範為基礎的,分別支援common和common lite兩種profile。lite profile只支援定點實數,而common profile及支援定點數又支援浮點數。

目前Android SDK已經支援OpenGL ES 2.0絕大多數功能,封裝在android.opengl包裡。


繪製2D圖形

android中OpenGL ES提供了GLSurfaceView組件,用於顯示3D圖形。GLSurfaceView本身布提供3D繪圖功能,而是由GLSurfaceView.Renderer來進行SurfaceView中的3D圖形繪製。

OpenGL ES使用步驟:

1、建立GLSurfaceView組件,使用Activity來顯示GLSurfaceView組件。

2、為GLSurfaceView組件建立GLSurfaceView.Renderer執行個體,實現它時,需要重寫該介面的三個方法:

  • abstract void onDrawFrame(GL10 gl):Renderer對象調用該方法繪製GLSurfaceView的當前幀。
  • abstract void onSurfaceChanged(GL10 gl,int width,int height):當前GLSurfaceView的大小改變時,回調該方法。
  • abstract void onSurfaceCreated(GL10 gl,EGLConfig config):當GLSurfaceView被建立時回調該方法

3、調用GLSurfaceView組件的setRenderer()方法,指定Renderer對象,該Renderer對象將會完成GLSurfaceView裡的3D圖形繪製。

所以,繪製3D圖形的痛點,不是如何使用GLSurface組件,而是實現Renderer類。實現Renderer類時的三個方法(如上)中的GL10形參,為GLOpen ES的“畫筆”,類似重寫View時,onDraw()方法裡的Canvas組件。

當SurfaceView被建立時,回調Renderer對象的onSurfaceCreated()方法,該方法裡執行一些無需任何改變的初始化。如下:

@Overridepublic void onSurfaceCreated(GL10 gl,EGLConfig config){//關閉抗抖動gl.dlDisable(GL10.GL_DITHER);//設定系統對透視進行修正gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,GL10.GL_FASTEST);gl.glClearColor(0,0,0,0);//設定陰影平滑模式gl.glShadeModel(GL10.GL_SMOOTH);//啟用深度測試gl.glEnable(GL10.GL_DEPTH_TEXT);//設定深度測試類型gl.glDepthFunc(GL10.GL_LEQUAL);}


[android] OpenGL與OpenGL ES簡介

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.