為了在QNX上完成3D繪圖,分享一下“在BlackBerry上使用 OpenGL繪圖”和大閱讀家。
推薦閱讀:
第一個BeagleBoard上的QNX程序 http://www.linuxidc.com/Linux/2011-09/43471.htm
將QNX應用上傳到QNX虛擬機上 http://www.linuxidc.com/Linux/2011-09/43466.htm
在BlackBerry上使用 OpenGL繪圖
在BlackBerry上進行圖像相關的編程有很多方式,開發人員可以通過Graphics編程接口在屏幕上完成復雜的圖像展現。但是,如果開發人員希望實現3D圖像編程的話,直接使用Graphics接口則顯得有些力不從心,開發人員需要通過代碼實現3D圖像相關的工作,包括坐標軸定義、平移計算、旋轉計算、投影計算等。這種方式工作量很大,對系統要求很高,無法和硬件直接配合,很難用於開發復雜的3D應用。
為了提供更為強大,更為方便的3D開發接口,新的BlackBerry平台上引入了OpenGL,通過它開發人員可以快速實現復雜的3D應用。因為OpenGL與平台結合比較緊密,它的編程方式與一般的BlackBerry應用不同,所以在BlackBerry開發環境中專門有一個OpenGL的樣例。本章通過BlackBerry開發環境自帶的OpenGL樣例的介紹為讀者講解BlackBerry上使用OpenGL的方法。
OpenGL本身是一個復雜的課題,它涉及到圖形處理很多具體方面,而其中任何一個具體方面,比如光照、紋理、視圖等等,都需要花費大量時間和精力去學習。這裡不希望,也不可能以短短的一章內容介紹OpenGL的全部內容,只希望通過簡單的說明讓BlackBerry開發人員可以快速地進入OpenGL的世界。如果讀者需要詳細學習OpenGL的相關知識,請參考OpenGL的相關文章。當然,為了結合代碼的講解,在本章中會對一些基本的OpenGL概念或者是3D圖形的概念進行簡要講解。
簡單來講,OpenGL是一種針對3D圖形的軟件接口。
從中我們可以理解的第一點是OpenGL是一種軟件接口,也就是說它和實現語言無關,它只定義了接口,具體實現語言可以是c\c++,也可以是java,當然也可以是任何其它語言。舉個具體的例子,在OpenGL中定義了glClearColor接口,用於指定清除屏幕的顏色,它在c\c++上的具體實現體現為頭文件gl.h中定義的glClearColor()方法,開發人員在引入該頭文件後可以直接調用方法glClearColor(),而它在java上的具體實現體現為GL10中的glClearColor()方法,開發人員通過GL10實例的glClearColor()的方法調用它。
另一點我們可以理解的是OpenGL是針對3D圖形的,一般而言OpenGL需要硬件的支持,並不是隨便拿一台機器都可以使用的。開發人員在選擇開發測試環境的時候需要確認用於運行OpenGL程序的設備是支持OpenGL的。有趣的是,OpenGL既然是一種軟件接口,理論上平台提供商可以完全依賴軟件實現它,只需要按照OpenGL的接口定義實現所有方法就可以了。不過,OpenGL定義的接口往往都需要復雜的計算,單純使用軟件實現的話可能導致嚴重的性能問題。所以,事實上大部分OpenGL的實現都需要依賴於硬件。
結合以上兩點,我們知道開發人員在開發OpenGL應用的時候只需要操作OpenGL接口,不需要了解低層硬件的工作方式。OpenGL接口和低層硬件之間的聯系是由平台提供商建立的,體現這種聯系的一般是平台提供商提供的應用程序庫。開發人員需要完成的是在程序中導入對應的應用程序庫,然後調用特定的接口。
具體到BlackBerry平台上使用OpenGL,同樣需要確認目標設備在硬件層面上支持OpenGL,然後引入相關的應用程序庫,並調用對應的接口。在硬件層面,特定的較新型號的BlackBerry手持設備支持OpenGL,如9520,9550等。在軟件接口方面,因為BlackBerry平台的提供的開發語言是java,OpenGL在BlackBerry上體現為java接口。開發人員在BlackBerry上開發OpenGL應用的時候需要導入OpenGL相關的包,然後調用其中定義的OpenGL方法。
另外需要注意的是,因為BlackBerry是手持設備,所以它所支持的OpenGL並不是完整的OpenGL,而是OpenGL的一個子集,叫OpenGL ES,即OpenGL for Embedded Systems。OpenGL ES目前由Khronos組織管理,主要是針對嵌入式設備而設計的,在設計過程中考慮到嵌入式設備的資源有限性對OpenGL接口進行了很大程度上的簡化,不過在簡化過程中也兼顧了功能的完整性。