OSG for Android新手教程系列(二)——项目配置

2023-11-15

  在上一篇教程中,主要介绍了如何把OSG源代码编译成为能够在Android项目下使用的函数库。在这一篇教程中,我将针对如何在自己的Android项目中配置OSG函数库进行详细讲解。

  现阶段网上关于OSGfor Android的配置方式教程有很多,但是大部分在实际使用起来都会或多或少的出现一些问题,无法完全照搬,需要一定的修改。而且,对于配置中的那些变量的具体含义,也很少有人能够进行仔细的讲解。这非常不利于新手的学习和理解,往往会造成出现bug后面对满屏幕的错误log完全一脸茫然的情况。

  所以我将在这篇教程中详细介绍系统的介绍如何在Android项目中配置OSG函数库,并对各个配置变量的含义进行详细讲解。

-------------------------------------------------------------------------------------------------

  在一个项目中配置函数库,是我们在进行项目开发时几乎都要做的第一件事情。可以说,各种第三方函数库帮助我们完成了很多通用的常用的功能,使我们从繁杂的基本算法、基本功能中脱离出来,能够更专心的完成我们需要实现的业务功能。OSG就是一个非常好的开源三维引擎,提供了一套成熟的API用于实现三维场景功能的开发。


一、工具准备

  OSG是基于C++平台的API,在开发时使用的都是标准的C++。众所周知,开发Android项目,我们平常使用的都是Java,那么,如何才能在Java语言中调用OSG的这些C++函数呢?Java中提供了Java本地接口,即JNI(Java Native Interface)。JNI是一个协议,用于沟通Java代码和本地的C/C++代码。而Google公司为Android开发了一套用于快速创建native工程的工具集合,即NDK(Native Development Kit)。在本文中,将使用Eclipese+NDK的方式进行配置开发。网上有许多的经验教程用到了Cygwin。但是,从NDK的r7版本以上就包含了Cygwin,所以本文在配置项目时,并没有单独使用Cygwin。

  这里使用的NDK版本是r10d,可以在官方网站上下载,链接为:

  http://developer.android.com/tools/sdk/ndk/index.html

  当然,由于一些原因,现在很多情况下是连接不上这个网站的,比如我就是。不过现在很多网盘上有共享的可以下载,大家可以自行搜一下。OSG函数库可以根据我前一篇教程里讲的那样自己进行编译,不过时间花费比较大,当然也可以从网上下载别人已经编译好的OSG函数库,这样省时省力。这里我使用的是3.0.1版本的OSG。需要注意的是,上一篇教程讲过,在编译时根据参数不同,会有两个版本的OSG库,分别是GLES1和GLES2,这两个版本在使用时,配置的参数会有所不同,甚至会对新手来说产生一些莫名其妙的错误。具体的区别,我会详细的说明一下。


二、具体配置

  首先,为了在项目中使用C/C++,在项目结构上会有一点不同,需要增加一个jni文件夹,其位置在项目的根目录下,与src等文件夹在同一层。这个文件夹用于存放所有的C/C++文件,以及项目配置文件(.mk后缀)。下面进行详细讲解。


  1. 配置文件

  在OSG for Android项目中,配置文件有两个,一个是Android.mk,另一个是Application.mk。这两个文件都是存放在jni文件夹内的,用于在编译项目时提供配置信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OSG for Android新手教程系列(二)——项目配置 的相关文章

  • Android EditText 和 addTextChangedListener

    我目前正在将数据库管理器移植到 Android 由于性能原因 我喜欢 仅更新已修改的属性 我尝试使用 addTextChangedListener 执行此操作 以便将修改后的条目添加到列表中 但我的程序从未输入其任何方法 EditText
  • Android ToggleButton 始终检查

    如果切换按钮处于选中或取消选中状态 我想存储在 SharedPreferences 中 toggle setOnCheckedChangeListener new OnCheckedChangeListener public void on
  • 为什么不能在 Fragment 中使用 ViewPager?它实际上是

    有信息无法使用ViewPager在一个Fragment在许多来源中 例如 Android 开发者繁忙编码指南 http commonsware com 作者 Mark Murphy 或者类似的帖子this https stackoverfl
  • Android Camera.takePicture() 有时不返回?

    我正在编写一个Android 拍照应用程序 该代码在 onPreviewFrame byte data Cameracamera 中从预览中获取帧后进行一些处理 问题在于 android hardware Camera 的函数 takePi
  • Cordova - 启动后出现白屏,控制台中没有例外

    我已经离开我的 Cordova 应用程序一段时间了 但昨天刚刚进行了一次新的克隆 发现它出现了 死机白屏 症状 启动画面显示 程序加载 然后我就得到一个空白屏幕 更多细节 CLI 科尔多瓦 6 1 1 安卓 5 1 1 ios 4 1 1
  • 如何在 Android 应用程序中隐藏 Flutterwave API 密钥

    我正在构建一个 Android 应用程序 目前正在将 Flutterwave 集成到我的应用程序中以进行支付 建议我永远不要将 Flutterwave API 密钥放在我的应用程序上 那么我该如何隐藏这些键呢 我正在使用 Retrofit
  • 如何在不使用 Firebase 控制台的情况下发送 Firebase 云消息通知?

    我从新的 Google 通知服务开始 Firebase Cloud Messaging 感谢这段代码https github com firebase quickstart android tree master messaging htt
  • 4 天后,应用仍未在 Google Play 搜索中编入索引

    我已经在 4 天前在 google play 上发布了我的第一个应用程序 语音到短信 但我仍然无法通过其名称或开发人员名称在搜索中找到我的应用程序 我只能通过包名称或真实应用程序名称 但不带空格 找到我的应用程序 VoiceToSMS 链接
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • 如何在android中的谷歌地图上聚焦标记

    我只是想知道我们是否可以关注 Android 应用程序中添加的标记 如果是 怎么办 或者有没有其他方法可以完成这项任务 可以说我使用下面的代码添加了一个标记 map addMarker new MarkerOptions title tit
  • Jetpack Compose:制作全屏(绝对定位)组件

    我怎样才能在全屏渲染树的深处制作一个可组合的 类似于Dialog可组合作品 例如 当用户单击图像时 它会显示该图像的全屏预览 而无需更改当前路线 我可以用 CSS 来做到这一点position absolute or position fi
  • 如何在同一设备上运行的 Android 应用程序之间传输文件?

    我正在编写一个与 RESTful 服务交互的 Android 应用程序 该 Web 服务本质上是一个文件系统 并提供元数据以及对文件的 CRUD 访问 我的应用程序检索元数据 并通过ContentProvider 我需要添加与我的应用程序在
  • 使用 Proguard 通过 Dropbox.com 库混淆 Android 应用程序

    我刚刚创建了一个需要 Dropbox com API 库的 Android 应用程序 我现在尝试在 发布 模式下构建应用程序 并希望在代码上运行混淆器以对其进行混淆 但是 每当我尝试运行 Proguard 时 都会收到以下错误 Progua
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • Android 的 Intent 和 Parcelable 对象

    为什么我需要打包我的对象 即使我只需将其发送到同一任务的另一个线程 实际上 我需要打开一个甚至可以在同一线程 主线程 上运行的活动 换句话说 为什么 Google 不提供一个 startActivity 版本 它采用通用对象广告参数而不是捆
  • Android 中 Activity 之间的 3D 动画

    How to create animation between two Activity look like As Screen shot in android 搜索jazzyviewpager 这是link https github co
  • 了解应用程序在后台时何时收到 Firebase 消息

    我知道这个标题有同样的问题 但不幸的是它没有得到正确的回答 它被接受了 here https stackoverflow com questions 37711082 how to handle notification when app
  • 动态更改按钮上的图像视图

    在我的应用程序中 我有按钮和ImageView 当我按下按钮时我想改变ImageView 我的可绘制文件夹中有 5 张图像 按下按钮时 ImageView 根据按钮单击一张一张地更改图像 我想要它的解决方案 感谢任何可以提供帮助的人 维护一
  • 如何从DataSource.Factory获取数据

    我必须调用此方法才能获取所有人员 我根本无法修改这个方法 Query SELECT FROM PERSON TABLE ORDER BY NAME DESC abstract fun getElements DataSource Facto
  • 如何用LoaderManager自动重新查询

    我有一个应用程序显示来自 SQLite DB 的数据 并且数据不断变化 所以显然 我认为我应该使用 LoaderManager 来显示数据 我读过一些关于将 LoaderManager 与 SQLite 结合使用的内容 然后看到了亚历克斯

随机推荐

  • 离散数学主析取范式及主合取范式

    今天总结了一下关于离散数学化简主析取范式以及主合取范式的一些方法 首先一般可能会用到 分配律 A B C lt gt A B A C A B C lt gt A B A C 其次若化简式里有蕴涵符号 则可以用 蕴涵等值式 A B lt gt
  • 数据清洗、数据挖掘常见十大问题

    数据清洗 数据挖掘常见十大问题 一 数据预处理 数据清洗和特征工程 二 数据预处理和特征工程阶段 最常见的10个问题 1 什么是数据 EDA 2 缺失值的处理方式有哪些 3 如何检测异常数据 如何处理 4 什么是特征工程 有什么作用 5 特
  • 【Spring】数据导出为Excel的接口报java.io.IOException: UT010029: Stream is closed错误

    数据导出为Excel的接口报java io IOException UT010029 Stream is closed错误 实习时导师让写一个平台信息导出为Excel的功能 写完之后发现文件正常导出 但控制台一直报Stream is clo
  • react中使用less和全局样式

    前言 使用create react app脚手架搭建的react项目 会自带css和sass 但是没有less 如果在项目中需要使用less 需要进行下载并进行一些配置 1 配置 1 暴露webpack配置文件 create react a
  • 解决 in ./node_modules/cesium/Source/ThirdParty/zip.js报错

    由于在 node modules cesium Source ThirdParty zip js 文件中使用了 import meta 语法 webpack 默认不支持 在进行项目构建时 会报如下错误 提示信息需要添加 loader 接下来
  • 谷歌浏览器配置微信浏览器_使用Chrome修改user agent模拟微信内置浏览器

    很多时候 我们需要模拟微信内置浏览器 今天教大家用chrome简单模拟 如图设置 F12或者右键审查元素进入开发者模式 点击Emulation 然后点击Network 把Spoof user agent改成Other 并把下面的带复制进去
  • PaddleSpeech调研、安装、使用

    PaddleSpeech概述 PaddleSpeech asr 模块目前只支持中英文的语音自动识别 建议在Linux环境下安装和使用 配置环境要求 gcc gt 4 8 5 paddlepaddle gt 2 4 1 python gt 3
  • 概率论与数理统计

    目录 一 概率论的基本概念 1 1 概率论的直观解释和数学定义 1 2 条件概率与乘法公式 1 3 全概率公式与贝叶斯公式 1 4 事件的独立性 二 随机变量与分布函数 2 1 随机变量与分布函数 2 2 离散型随机变量和常用分布 2 3
  • 定时任务——Cron表达式详解

    Cron表达式是一个字符串 字符串以5或6个空格隔开 分为6或7个域 每一个域代表一个含义 Cron有如下两种语法格式 Seconds Minutes Hours DayofMonth Month DayofWeek Year或 Secon
  • C++ : 在一个string字符串中查找给定的字符串并提取

    C 在一个string字符串中查找给定的字符串并提取 1 string find last of 返回类型 size t 2 string find first of 返回类型 size t 3 string substr size t a
  • 力扣刷题-面试题 17.13. 恢复空格、字典树、前缀树的应用

    基本概念 Trie 树 又称单词查找树 前缀树 是一种树形结构 典型应用是用于统计 排序和保存大量的字符串 但不仅限于字符串 它的优点是 利用字符串的公共前缀来减少查询时间 最大限度地减少无谓的字符串比较 比哈希表更快 基本性质 根节点不包
  • 正负样本分配策略(OTA, SimOTA,TAS)

    文章目录 OTA SimOTA TAL ATSS OTA 论文 OTA Optimal Transport Assignment for Object Detection 代码 Megvii BaseDetection OTA 标签分配算法
  • c++静态代码扫描工具clang-tidy详细介绍

    clang tidy 文章目录 clang tidy 1 什么是clang tidy 2 clang tidy可以解决什么问题 3 工作原理 4 如何使用clang tidy 4 总结 5 举例说明 1 什么是clang tidy Clan
  • 十五年学不会英语的原因

    学习前预热 轻松学英语第一步 建立英语思维 为什么大家学英语学得这么累 最后依然对英语糊糊涂涂 原因只有一个 就是我们的学习能力太差了 我们的老师太笨了 这篇文章主要是给大家讲英语的基本结构 看了这篇文章 你们会突然就明白 英语怎么会如此简
  • 第19章:python自动化——ChromeOptions与WebUI实操

    目录 一 ChromeOptions设置项 二 WebUI实操 一 ChromeOptions设置项 浏览器在启动之初 如果需要对浏览器进行一些特定内容的定义 可以直接通过浏览器的options类来实现相对应的配置内容 不同的浏览器有不同的
  • Vue中如何配置自定义路径别名

    Vue中如何配置自定义路径别名 在我们日常开发中 常常会导入一些模块或者组件 如果采用相对路径的方式 import uEditor from components tools 会显得臃肿 多余 如果引用稍有差错就会出现 404的报错 不优雅
  • A Survey on Large Language Model based Autonomous Agents

    本文是LLM系列的文章 针对 A Survey on Large Language Model based Autonomous Agents 的翻译 基于大模型的自动agents综述 摘要 1 引言 2 基于LLM的自动代理构建 3 基于
  • 学网络安全都是一群什么人?

    大家好呀 我是知了姐 又是一期学员故事栏目 3月下旬知了堂信安方向开新班 知了姐跟着去采访 了解到新学员们的求学故事 嘿你别说 虽然大家出身专业不同 经历背景不同 如今却在同一个地点相遇 加入到知了堂这个大家庭 不同专业 年龄的他们 为什么
  • 格式工厂5.10.0版本安装

    目前格式工厂有很多 大多都可以进行视频转换 之前遇到一个用ffmpeg拉流保存的MP4在vlc和迅雷都无法正常播放的问题 发现视频长度不对 声音也不对 最后换到了格式工厂的格式播放器是可以正常播放的 格式工厂下载之家的地址 https ww
  • OSG for Android新手教程系列(二)——项目配置

    在上一篇教程中 主要介绍了如何把OSG源代码编译成为能够在Android项目下使用的函数库 在这一篇教程中 我将针对如何在自己的Android项目中配置OSG函数库进行详细讲解 现阶段网上关于OSGfor Android的配置方式教程有很多