在Android上编译OSG[3.0-3.0.1]

作者: osgChina 发布于2018-10-19 16:15:47 分类 : Android

注意本文仅适用于OSG 3.0 和3.0.1,其它版本未测试。

准备工作

编译OSG做为独立使用的库需要 Android NDK。进行开发需要Android SDK。

编译需要的NDK 是r5及其以后版本,不建议使用之前的版本或其它野版本。

最小配置

Native ABI需要 Level 8 或更新版本,需要Android 2.2及更新版本。

已知关键点

OSG在Android上只能编译静态库。

  • 添加插件需要右侧的宏 macros: USE_OSGPLUGIN(),USE_DOTOSGWRAPPER_LIBRARY(),USE_SERIALIZER_WRAPPER_LIBRARY().使用OpenGL ES 1.X/2.0.

  • OpenGL中的特性与OpenGL ES中的差异: http://www.khronos.org/opengles/

  • ENVIRONMENTAL MAPPING 无法使用,但是可以使用 E.M. Shader。

  • OSG Pregenerated Shaders 在 GLES中无法工作需要添加自己的Shader。

  • 多线程模式的Viewer无法使用。

  • 如果第三方库中缺少FreeType,则osgSim 和osgShadow 无法使用,使用会崩。

  • The armeabi-v7a has Neon optimizations activated by default, this causes some troubles with devices compatible with armeabi-v7a without Neon optimizations

构建配置

使用CMake命令行来产生 Android Makefiles,下面介绍一些变量的设置。

设置Android build Variable为ON

-DOSG_BUILD_PLATFORM_ANDROID=ON

 NDK路径

-DANDROID_NDK={Path to your NDK root directory}

设置静态编译,Android当前对OSG仅支持静态编译。

-DDYNAMIC_OPENTHREADS=OFF
-DDYNAMIC_OPENSCENEGRAPH=OFF

OpenGL ES 配置

需要设置当前使用GLES1还是GLES2,两者不能同时使用,推荐使用GLES2:

GLES1

-DOSG_GL1_AVAILABLE = OFF
-DOSG_GL2_AVAILABLE = OFF
-DOSG_GL3_AVAILABLE = OFF
-DOSG_GLES1_AVAILABLE = ON
-DOSG_GLES2_AVAILABLE = OFF
-DOSG_GL_LIBRARY_STATIC = OFF
-DOSG_GL_DISPLAYLISTS_AVAILABLE = OFF
-DOSG_GL_MATRICES_AVAILABLE = ON
-DOSG_GL_VERTEX_FUNCS_AVAILABLE = ON
-DOSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE = ON
-DOSG_GL_FIXED_FUNCTION_AVAILABLE = ON

GLES2 

-DOSG_GL1_AVAILABLE = OFF
-DOSG_GL2_AVAILABLE = OFF
-DOSG_GL3_AVAILABLE = OFF
-DOSG_GLES1_AVAILABLE = OFF
-DOSG_GLES2_AVAILABLE = ON
-DOSG_GL_LIBRARY_STATIC = OFF
-DOSG_GL_DISPLAYLISTS_AVAILABLE = OFF
-DOSG_GL_MATRICES_AVAILABLE = OFF
-DOSG_GL_VERTEX_FUNCS_AVAILABLE = OFF
-DOSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE = OFF
-DOSG_GL_FIXED_FUNCTION_AVAILABLE = OFF

其它

打开 -j 命令

-DJ=4

定义一个安装路径

-DCMAK