sxaudq0 2011-10-12
为了在QNX上完成3D绘图,分享一下“在BlackBerry上使用 OpenGL绘图”和大阅读家。
推荐阅读:
在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接口进行了很大程度上的简化,不过在简化过程中也兼顾了功能的完整性。