zoukankan      html  css  js  c++  java
  • Androidndk编译osgdb_3ds静态库

     

    Android版本的OSG不支持3ds插件(可以查看osg\src\osgPlugins\CmakeLists.txt文件,搜素’android’关键词,可以搜索到’IF(NOT ANDROID)  ADD_SUBDIRECTORY(3ds) ENDIF(),可见,android下3ds被屏蔽了),也就是使用Android-ndk编译OSG的时候,不能编译osgdb_3ds.a插件,那么接下来展示一下手动编译osgdb_3ds.a的过程,假设OSG其他库已经编译完成,库文件位于c:/cygwin/usr/local/include,头文件位于c:/cygwin/usr/local/obj/local

    1、去android官网下载一个ADT Bundle版本的Eclipse,解压之后,有eclipsesdk两个文件夹和一个SDK Manager.exe,运行它,省去了插件(CDTAndroidSDK等)配置过程,再下载一个android-NDK,打开eclipseWindow-Preferences,配置一下NDK路径,如下图,这样环境就搭建好了。

     

    2、新建一个android工程,以ndk自带的例子HelloJni为模板(或者你新建一个空工程,自己添加相关文件)

     

     

    3、去OSG源代码那里将src\osgPlugins里面的3ds文件夹拷贝到workspace\HelloJni\jni文件夹下,在jni文件夹下新建一个Application.mk文件,文件列表如下(可以删除hello-jni.c):

     

    4、修改jni/Android.mk,修改后内容如下:

    Android.mk开始:

    LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_LDLIBS :=      -lGLESv1_CM -ldl

    LOCAL_MODULE :=     osgdb_3ds

    LOCAL_SRC_FILES :=   3ds/ReaderWriter3DS.cpp 3ds/WriterNodeVisitor.cpp 3ds/WriterCompareTriangle.cpp\

    3ds/lib3ds/lib3ds_io.c\

    3ds/lib3ds/lib3ds_atmosphere.c\

        3ds/lib3ds/lib3ds_background.c\

        3ds/lib3ds/lib3ds_camera.c\

        3ds/lib3ds/lib3ds_chunk.c\

        3ds/lib3ds/lib3ds_chunktable.c\

        3ds/lib3ds/lib3ds_file.c\

        3ds/lib3ds/lib3ds_light.c\

        3ds/lib3ds/lib3ds_material.c\

        3ds/lib3ds/lib3ds_math.c\

        3ds/lib3ds/lib3ds_matrix.c\

        3ds/lib3ds/lib3ds_mesh.c\

        3ds/lib3ds/lib3ds_node.c\

        3ds/lib3ds/lib3ds_quat.c\

        3ds/lib3ds/lib3ds_shadow.c\

        3ds/lib3ds/lib3ds_track.c\

        3ds/lib3ds/lib3ds_util.c\

        3ds/lib3ds/lib3ds_vector.c\

        3ds/lib3ds/lib3ds_viewport.c

    LOCAL_C_INCLUDES :=  c:/cygwin/usr/local/include /3ds/lib3ds

    include $(BUILD_STATIC_LIBRARY)#静态库

    Android.mk结束。

     

    编译过程中,lib3ds_io.c文件中会报错误,uint_8之类的,添加几个括号就行了。

     

    说明一下LOCAL_C_INCLUDES,c:/cygwin/usr/local/include是make install命令将OSG源代码中的头文件和cmake生成的osg/ConfigOpenThreads/Config两个文件(OSG源代码经过Cmake之后产生的,查看一下就知道,只有OpenThreadsosg两个文件夹,每个文件夹下只有一个叫Config的文件,这两个文件必不可少,因为好多OSG源码中需要包含它们,例如osg/Export头文件)安装到c:/cygwin/usr/的。至于如何Cmake,去网上搜索下如何编译Android版本的OSGOSG官网就有。

    5、修改Application.mk文件内容如下:

    #ANDROID APPLICATION MAKEFILE

    APP_BUILD_SCRIPT := $(call my-dir)/Android.mk

    #APP_PROJECT_PATH := $(call my-dir)

    APP_OPTIM := release#发布版

    #APP_OPTIM := debug#调试版

    APP_PLATFORM  := android-7#这个版本号应该可以改

    APP_STL  := gnustl_static#使用静态库

    APP_CPPFLAGS  := -fexceptions -frtti

    APP_ABI  := armeabi #armeabi-v7a

    APP_MODULES     := osgdb_3ds

    6、使用$ANDROID_NDK/ndk-build命令编译,ANDROID_NDK 环境变量指示ndk的路径,用记事本打开C:\cygwin\home\yourname\.bash_profile文件,yourname是你的电脑名,在末尾加上ANDROID_NDK=/cygdrive/E/Android/android-ndk-r8 export ANDROID_NDK,如图

     

    先进入hellojni工程目录,然后运行$ANDROID_NDK/ndk-build

     

     

     

    可以到hellojni/obj/local/armeabi下找到libosgdb_3ds.a文件。如果libosgdb_3ds.a已经存在,可能ndk不会进行再编译,删除obj文件夹再执行$ANDROID_NDK/ndk-build即可。

    至此,android下的3ds插件就编译好了,下面看看怎么使用它。

    7、使用libosgdb_3ds.a

    libosgdb_3ds.a放到C:\cygwin\usr\local\obj\local\armeabi路径下。

    使用OSG例子osgAndroidExampleGLES1模板,用Eclipse加载它。

    A、编辑Android.mk文件

    LOCAL_LDFLAGS中添加-losgdb_3ds

     

    B、修改OsgMainApp.hpp

    添加USE_OSGPLUGIN(3ds)//3ds,osg使用静态库需要宏定义USE_OSGPLUGIN

    C、修改OsgMainApp.cpp

    在void OsgMainApp::initOsgWindow(int x,int y,int width,int height)函数中

    _root = new osg::Group();

    语句之后添加

        osg::Node* mdl3ds=osgDB::readNodeFile("sdcard/teapot.3DS");

    _root->addChild(mdl3ds);

    编译运行即可。

     

  • 相关阅读:
    redis/memcached可视化客户端工具TreeNMS
    Navicat Mysql快捷键
    mysql全文索引之模糊查询
    Discuz网警过滤关键词库
    php中的implements 使用详解
    PHP 依赖注入和控制反转再谈(二)
    php 中的closure用法
    C# 反射(Reflection)技术
    Oracle pl/sql编程值控制结构
    Oracle PL/SQL编程之变量
  • 原文地址:https://www.cnblogs.com/coolbear/p/3094349.html
Copyright © 2011-2022 走看看