上一篇教程中,我针对一个最简单的HelloWorld示例进行了详细讲解,从宏观上讲明了OSG for Android项目的开发方法。这里给出链接:http://blog.csdn.net/dongzhong1990/article/details/51736868
如果阅读过上一篇教程,也许会对一些细节上的问题还不是很清楚。例如,示例中osgNativeLib.cpp中那些奇怪命名方法的函数是怎样产生的,为什么要这样写。本篇教程将对该问题进行详细解答。
--------------------------------------------------
众所周知,在开发Android项目时,我们通常使用的是Java语言。然而OSG却是一个基于C++平台的三维渲染引擎。于是,在这里就有了一个小小的冲突。那么,为了能够在Android平台上使用基于C++的OSG,我们应该怎么做呢?通常情况下,我们也许会产生以下两种想法:第一,将OSG重新用Java编写一遍;第二,通过某些方法,使Java可以调用C++;第三,算了,不用Java了。
我们分别看看这三种方法。第一种方法,如果是对于一些小型的框架引擎,这也不失为一种办法。但是很多情况下,框架引擎代码量都是比较庞大的,如果对每个框架引擎都重新更换语言编写,那么工作量会十分巨大,而且很容易出现错误。第二种方法,简单可行高效,通过这种方法可以快速地将不同语言编写的框架引擎融合到同一个项目中,同时这种方法也是现阶段对不同平台融合的首选方法。第三种方法,算了,不考虑。
那么,现在我们所要考虑的就是如何使Java与C++之间进行沟通。正如前几篇教程所提到的那样,在Java程序中使用C/C++需要使用JNI,即Java Native Interface。而Google公司又为Android开发提供了NDK,即Native Development Kit,作为Android项目中使用C/C++的工具集。本篇教程将对JNI和NDK的使用方式进行详细讲解,使学习者能够更加深入的理解Android调用OSG函数的内部机制。
本文所用的NDK为r10d版本,下载链接:http://developer.android.com/tools/sdk/ndk/index.html。如果链接不上,可以百度一下,会有不少网盘中分享安装包。
与上篇教程一样,本文默认项目已经配置完毕。具体配置方式,参考本系列教程(二),链接:http://blog.cs