在Android上编译OSG[3.0.2 ]

分类:Android
 

This file contents can be applied for version OpenSceneGraph(OSG) 3.0.2 or newer.

Prerequisites for build process

To compile OSG as a standalone library you'll only need the Android NDK. To develop applications with the library you'll also need the Android SDK

The required version to compile OSG is NDK r5 or newer. We don't recommend using previous versions or modified versions although it's possible to use the Crystax NDK versions.

Device minimun requirements

OSG for Android need to use a Level 8 or newer Native ABI and a 2.2 or newer Android version. It's possible to use Android 2.1 devices succesfully but it's not recommended. Older Android versions are not supported. There are specific device models with a bug that need the application locked in landscape mode to run.

OpenSceneGraph Android known issues

  • OSG for Android is a STATIC build library
    • To add a plugin or module you have to use the macros: USE_OSGPLUGIN(),USE_DOTOSGWRAPPER_LIBRARY(),USE_SERIALIZER_WRAPPER_LIBRARY().
  • OSG for Android uses OpenGL ES 1.X/2.0.
    • There are features present in OpenGL that doesn't exist in OpenGL ES: http://www.khronos.org/opengles/
    • ENVIRONMENTAL MAPPING DOESN'T WORK but  you can use a E.M. Shader in GLES 2.0.
    • OSG Pregenerated Shaders DON'T compile with GLES, you need to add your shaders.
  • Multithreaded Viewer CRASHES the application.
  • osgSim and osgShadow will crash the application if you don't link freetype.

Build Config

For the Android building in OSG, we use the CMake command line to generate the Android Makefiles. These are the variables that have to be set.

ANDROID BUILD

The first CMake variable to be set is the Android build Variable

-DOSG_BUILD_PLATFORM_ANDROID=ON

Now, CMake needs to know where you have the NDK. That's done by setting the next variable

-DANDROID_NDK={Path to your NDK root directory}

Right now, Android version has to be compiled in static. To do so you have to set the next variables.

-DDYNAMIC_OPENTHREADS=OFF
-DDYNAMIC_OPENSCENEGRAPH=OFF

OPENGL ES CONFIG

When working in Android, you have to set OSG in GLES1 OR GLES2 configuration. It's not advisable to compile with support for both at the same time. Runtime linking error may happen. To set GLES1/2 functionality you have to set the options in CMake:

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

COMPILATION OPTIONS

You can select the Android ABI hardwares to be compiled (x86,armeabi,armeabi-v7a,mips) This option is set by default to armeabi armeabi-v7a and the ABI platform version. This option is set by default to 5.

-DANDROID_ABI "armeabi armeabi-v7a"
-DANDROID_PLATFORM=8

OSG requires the C++ STL library in Android there are several different STL versions static and shared. Which versión is used can be setted with the next variable. By default this variable is set to gnustl_static.

-DANDROID_STL="gnustl_static"

To generate the binary libraries with debug symbols you have to use the next variable.

-DANDROID_DEBUG

OPTIMIZATIONS

The next variables can be set to true to enable some optimizations. Beware that not all devices are compatible with them and not on all ABI platforms.

-DANDROID_OPTIM_NEON
-DANDROID_OPTIM_ARM32

OTHERS

To enable the -j command  you have to set it in the Cmake line.

-DJ=4

To define a install path you have to use the nex variable

-DCMAKE_INSTALL_PREFIX={install path}

Building your application

Building an application in Android withouth any prior knowledge is hard. If you don't have experience developing simple test Android NDK applications don't try to cope with OSG in Android. First learn some basics of Android/Dalvik and about Android/NDK. It's not recommendable to go to our mailing lists or google's withouth some knowledge first. For some good readins I can recommend the next books:

OPENSCENEGRAPH

ANDROID

  • Reto Meier Professional Android 4 Application Development
  • Sylvain Ratabouil Android NDK

Building an application with a native part in Android is a two step job. First you have to compile the native part with the ndk-build and second you need to compile the java part. There are some plugins in eclipse that ease this part like  Sequoyah. If you want to check how to do a OsgAndroid Application then there are two examples in the OSG distribution. They are for GLES1 and GLES2. This are the characteristics implemented in the application.

  • Resolution locked to landscape.
  • Menu button shows a Android menu with options to load or delete models, also you can use the virtual keyboard.
  • Basic state and manipulator changes by keyboard entry.
  • Android UI with buttons to center view and change mode of navigation.
  • Multitouch example.
Keep in mind that the examples are not fully native. They don't use the NativeActivity and so they rely on a JNI code to call the OSG functions from the Java side.

3rd Party Dependencies

To ease the development of applications, there is a 3rd party dependency pack with libjpeg, libpng, libtiff, libcurl and freetype to use with OpenSceneGraph in Android. This pack only works with armeabi v5 and v7.  The package can be found at the next address: http://www2.ai2.upv.es/difusion/osgAndroid/3rdpartyAndroid.zip

To use the package,  put the 3rdparty directory inside the OSG root directory and run Cmake. It will be detected and configured appropiatedly.

点击数:1098

在Android上编译OSG[3.0.2 ] (转)的更多相关文章

  1. 在Linux上编译Hadoop-2.4.0

    目录 目录 1 1. 前言 1 2. 安装依赖 1 2.1. 安装ProtocolBuffer 2 2.2. 安装CMake 2 2.3. 安装JDK 2 2.4. 安装Maven 3 3. 编译Ha ...

  2. CentOS 64位上编译 Hadoop2.6.0

    由于hadoop-2.6.0.tar.gz安装包是在32位机器上编译的,64位的机器加载本地库.so文件时会出错,比如: java.lang.UnsatisfiedLinkError: org.apa ...

  3. 在Linux上编译Hadoop-2.4.0实践与总结

    问题导读: 1.编译源码前需要安装哪些软件? 2.安装之后该如何设置环境变量? 3.为什么不要使用JDK1.8? 4.mvn package -Pdist -DskipTests -Dtar的作用是什 ...

  4. 在干净的ubuntu 14.10上编译Qemu2.2.0的过程

    下载Qemu的源代码 从官网http://wiki.qemu.org/Main_Page 中下载最新的源代码,目前是2.2.0. 安装依赖库和编译 编译过程分两步1. ./configure 2. m ...

  5. FFmpeg在Android上的移植优化步骤

    http://blog.csdn.net/feixiang_john/article/details/7894188 从事多媒体软件开发的人几乎没有不知道FFmpeg的,很多视频播放器都是基于FFmp ...

  6. FFmpeg在Android上的移植之第一步

    http://blog.sina.com.cn/s/blog_69a04cf40100x1fr.html 从事多媒体软件开发的人几乎没有不知道FFmpeg的,很多视频播放器都是基于FFmpeg开发的. ...

  7. Yarn上运行spark-1.6.0

    目录 目录 1 1. 约定 1 2. 安装Scala 1 2.1. 下载 2 2.2. 安装 2 2.3. 设置环境变量 2 3. 安装Spark 2 3.1. 下载 2 3.2. 安装 2 3.3. ...

  8. 编译osg for android

    做osg数数已经快两年了,之前将一些opengl的代码搬到了osg上,现在将一些osg的代码搬到了android上,尝试看看效果. 首先是编译的事情,android for android在http: ...

  9. 编译可在Nexus5上运行的CyanogenMod13.0 ROM(基于Android6.0)

    编译可在Nexus5上运行的CyanogenMod13.0 ROM (基于Android6.0) 作者:寻禹@阿里聚安全 前言 下文中无特殊说明时CM代表CyanogenMod的缩写. 下文中说的“设 ...

随机推荐

  1. Python-S9—Day86-ORM项目实战之会议室预定相关

    01 会议室预定1 02 会议室预定2 03 会议室预定3 04 会议室预定4 05 会议室预定5 06 会议室预定6 01 会议室预定1 1.1 项目的架构目录: 1.2 使用Pycharm创建Dj ...

  2. Python-S9——Day100-Web前端框架之Vue

    01 课程简介: 02 let和const: 03 箭头函数: 04 对象的单体模式: 05 nodejs介绍和npm操作: 06 webpack.babel介绍和vue的第一个案例: 07 昨日内容 ...

  3. python-day4-内置函数2

    摘要:python中有好多可用性特别强的内置函数,熟练掌握对于以后的编程过程中有很大的帮助~~~~ callable函数.chr函数与ord函数.random函数.compile函数.evec与eva ...

  4. Mac 如何删除应用、软件

    首先需要跟刚接触Mac的小白分享一下卸载软件常用的两种方法: 1.点击Finder(访达)—应用程序—选择所要删除的软件—拖拽到右下方的废纸篓或者单击右键选择“移除到废纸篓”. 2.打开Launchp ...

  5. PostgreSQL 配置内存参数

    对于任何数据库软件,内存配置项都是很重要的配置项.在 PostgreSQL 主要有以下几个内存配置参数. shared_buffers: integer 类型,设置数据库服务器将使用的共享内存缓冲区数 ...

  6. caffe工程配置问题

    一开始是碰到没有caffe/caffe.hpp文件的问题,不知道怎么弄.通过百度,知道了在makefile文件里加入头文件路径和库文件路径就行. 首先是caffe.pb.h丢失问题,解决方法:http ...

  7. HDU5857 Median 模拟

    Median HDU - 5857 There is a sorted sequence A of length n. Give you m queries, each one contains fo ...

  8. Spring框架配置beans.xml扩展

    Spring学习笔记(二) 续Spring 学习笔记(一)之后,对Spring框架XML的操作进行整理 1 什么是IOC(DI) IOC = inversion of control   控制反转 D ...

  9. nyoj 1282 部分和问题

    部分和问题(入门题) 时间限制:1000 ms  |  内存限制:65535 KB 难度:0   描述 给你n个数(a1,a2,a3.......an) ,是否存在某一些数字加起来等于k,有就输出 & ...

  10. bzoj 1367 - sequence

    Description 给定一个序列\(t_1,t_2,\cdots,t_n\),求一个递增序列\(z_1<z_2<...<z_n\), 使得 \(R=|t_1−z_1|+|t_2− ...