osg for android学习之一:windows下编译(亲测通过)【转】
1. 首先需要一个OSG for android的环境
(1)NDK 现在Eclipse 对NDK已经相当友好了,已经不需要另外cygwin的参与,具体可以参考
Android NDK开发篇(一):新版NDK环境搭建(免Cygwin,超级快)
(2).OSG for android的编译,参考 osg for android学习之一:windows下编译(亲测通过) 建议编译OpenGL ES2版本.
2.然后加载OSG自带的Example:osgAndroidExampleGLES2
(1)点击菜单键加载文件路径,输入/sdcard/osg/cow.osg(必须先往sdcard创建文件夹osg并把cow.osg放到该文件夹里边)
(2)接着经典的牛出现了:)
3.自带的example太多的代码,这样的代码无论对于NDK的初学者或OSG很不直观,所以本人重写了一个HelloWolrd for
osg的例子。例子很简单,就是简单加载一个四边形并附上颜色。
(1)java代码
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package com.example.helloosg;
import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLSurfaceView.Renderer; public class NDKRenderer implements Renderer{ NDKRenderer(){ @Override @Override |
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package com.example.helloosg;
public class osgNativeLib { static { System.loadLibrary("osgNativeLib"); } /** |
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
package com.example.helloosg;
import android.app.Activity; public class MainActivity extends Activity { private GLSurfaceView mGLSurfaceView; @Override @Override @Override @Override |
(2)JNI代码
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
/ * Created on: 2014-10-19
* Author: VCC */ #include "OsgMainApp.h" OsgMainApp::OsgMainApp() { void OsgMainApp::initOsgWindow(int x, int y, int width, int height) { _viewer = new osgViewer::Viewer(); _root = new osg::Group(); _viewer->realize(); _manipulator = new osgGA::KeySwitchMatrixManipulator; _viewer->getViewerStats()->collectStats("scene", true); loadModels(); void OsgMainApp::draw() { void OsgMainApp::loadModels() { osg::Program * prog = new osg::Program; osg::ref_ptr<osg::Node> node = createNode(); _viewer->setSceneData(NULL); _viewer->getDatabasePager()->clear(); //创建一个四边形节点 //创建一个叶节点对象 //设置顶点数据 //创建纹理订点数据 //设置纹理坐标 //创建颜色数组 //设置颜色数组 //创建法线数组 //添加到叶子节点 return geode.get(); |
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
/*
* OsgMainApp.h * * Created on: 2014-10-19 * Author: VCC */ #ifndef OSGMAINAPP_H_ //android log #include <string> //osg #include <osgText/Text> //osgDB //osg_viewer #include <osgGA/GUIEventAdapter> //Static plugins Macro #define LOG_TAG "osgNativeLib" static const char gVertexShader[] = class OsgMainApp { }; #endif /* OSGMAINAPP_H_ */ |
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <jni.h>
#include <string.h> #include <osg/Node> #include <iostream> #include "OsgMainApp.h" OsgMainApp mainApp; extern "C"{ JNIEXPORT void JNICALL Java_com_example_helloosg_osgNativeLib_step(JNIEnv* env, jobject obj){ |
(3).mk文件
android.mk
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) LOCAL_MODULE := osgNativeLib ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) ### Add all source file names to be included in lib separated by a whitespace LOCAL_C_INCLUDES:= $(OSG_ANDROID_DIR)/include LOCAL_LDLIBS := -lGLESv2 -lz -llog LOCAL_SRC_FILES := osgNativeLib.cpp OsgMainApp.cpp LOCAL_LDFLAGS := -L $(LIBDIR) \ include $(BUILD_SHARED_LIBRARY) |
application.mk
|
1
2 3 4 5 6 7 8 9 10 11 |
#ANDROID APPLICATION MAKEFILE
APP_BUILD_SCRIPT := $(call my-dir)/Android.mk #APP_PROJECT_PATH := $(call my-dir) APP_OPTIM := release APP_PLATFORM := android-8 |
运行结果
注:由于代码是基于OpenGL ES2,简单加载了一个四边形,并在片元着色器将四边形的颜色赋为浅蓝色,其实也可以通过
OSG将四边形的颜色或者纹理赋到四边形上,具体下篇将说明
https://blog.csdn.net/hai7song/article/details/40515465
参考:
https://blog.csdn.net/edgarliaohs/article/details/37877287
http://www.openscenegraph.com/index.php/documentation/platform-specifics/android/43-building-openscenegraph-for-android-3-0-2
osg for android学习之一:windows下编译(亲测通过)【转】的更多相关文章
- Android ijkplayer在windows下编译并导入Android Studio
我是看着里面的步骤来做的,由于我自己对Linux环境和命令不熟悉,导致我对Cygwin的知识为零,在编译ijkplayer的时候走了一点弯路,需要的同学先去看一下上面的这篇文章,我这边是对上面文章做 ...
- Android学习笔记—Windows下NDK开发简单示例
该示例假设Android开发环境已经搭建完成,NDK也配置成功: 1.在Eclipse上新建Android工程,名称为ndkdemo.修改res\layout\activity_main.xml &l ...
- 【Android学习】Windows下Android环境搭建
一. JDK下载配置 直接百度,很简单. 二.android JDK下载配置 1.进入下载官网(需要FQ):https://developer.android.com/studio/index.ht ...
- Android学习笔记02-Mac下编译java代码
在Mac OS上配置JDK 1.7. 一 下载 Mac版本的JDK1.7 从以下下载地址,下载Mac版本的JDk1.7 安装文件 jdk-7u79-macosx-x64.dmg. http://www ...
- Windows下编译objective-C
Windows下编译objective-C 2011-08-31 14:32 630人阅读 评论(0) 收藏 举报 windowscocoa工具objective clibraryxcode 目录 ...
- 在Windows下编译FFmpeg详细说明
MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 MinGW,即 Minimalist GNU F ...
- OpenGL学习之windows下安装opengl的glut库
OpenGL学习之windows下安装opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows环境下的GLUT下载地址:(大小约为15 ...
- 在Windows下编译OpenSSL(VS2005和VC6)
需要说明的是请一定安装openssl-0.9.8a . openssl-1.0.0我没有编译成功. 如何在Windows下编译OpenSSL (Vs2005使用Vc8的cl编译器)1.安装Activ ...
- 一步步实现windows版ijkplayer系列文章之四——windows下编译ijkplyer版ffmpeg
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
随机推荐
- usb3.0 monitor is already started
用360 开机加速里找到这个程序,把它从开机启动中删除掉就好.
- P4812 D’s problem(d)
P4812 D’s problem(d)From: admin 时间: 1000ms / 空间: 65536KiB / Java类名: Main 背景 NOIP春季系列课程 描述 小D是一名魔法师,它 ...
- notepad++ 如何选择10000行-20000行之间的文本?
最近要上传导入一批数据,但是数据太多,一次上传不了,所以就要分批上传,而且数据全部在一个txt里面,这时就想一次复制一部分出来导入,直到导入完成,但是问题来了,数据太多,选择1到10000行,鼠标要拉 ...
- BZOJ4115 : [Wf2015]Tile Cutting
设一种方案里三角形上三个点的坐标分别为$(0,0),(-a,b),(c,d)$,则得到的平行四边形的面积为$ac+bd$. 设$d(n)$为$n$的约数个数,$D$为$d$的生成函数,则答案的生成函数 ...
- Springboot 线程池配置
最近的项目里要手动维护线程池,然后看到一起开发的小伙伴直接用Java了,我坚信Springboot不可能没这功能,于是查了些资料,果然有,这里给一下. 首先我们都知道@Async标签能让方法异步执行, ...
- 什么是NAS
个人理解: 1.NAS本身不是一种传输协议,只是一个名词而已,就是一个网络储存. 2.NAS系统本身就是一个Linux,也不是什么发行版,就是在Linux下实现了网络储存. 3.NAS系统里面实现了很 ...
- 从PHP客户端看MongoDB通信协议(转)
MongoDB 的 PHP 客户端有一个 MongoCursor 类,它是用于获取一次查询结果集的句柄(或者叫游标),这个简单的取数据操作,内部实现其实不是那么简单.本文就通过对 MongoCurso ...
- Fiddler可以支持Websocket抓包了
今天试了一下,Fiddler已经可以支持客户端Websocket抓包了,并且查看的方式也非常方便. websocket作为一个标准的应用层的协议,在CS端程序用起来也比传统的tcp协议方便了,比较常见 ...
- STM32F4 Timer External Clock TI2 Both Edges Demo
#define CLK_FREQ ( 10000 ) #define CORE_FREQ ( 168000000 ) static void TIM_GPIO_Config( void ) { GPI ...
- js文件改变之后浏览器缓存问题怎么解决?
升级了js文件,很多页面都引用了这个文件,需要主动清除浏览器缓存才会生效,有没有什么办法可以不主动清除就可以? 修改文件名,加上版本号,或 xxx.js?v=0.101