PTAM移植到IOS(附工程和库文件)

移植结果

可用SpaceBar和Reset,没有ARDriver和MapViewer等功能。

完整xcode工程和用到的库文件(包含include、lib,以及gvars3、libcvd的源代码和工程)下载地址:http://download.csdn.net/detail/iceteaset/9639210

运行结果如下图所示:

1进入后的界面

这里写图片描述

2点击SpaceBar后平移

这里写图片描述

3再次点击SpaceBar

这里写图片描述

4移动手机

这里写图片描述


移植概述

PTAM官方支持Linux、Windows、OSX平台,并不包括移动平台,所以移植到IOS需要手动建立工程。好在有Objective-C++混合编译的存在,使得C++源码不需要改写成OC,只需要衔接一下即可。但是OpenGL在IOS下并不适用,需要改写成OpenGL ES。除此之外,官方提供的VideoSource文件不能用,需要自己处理,与窗体相关的代码也不能适用,需要自己建立GUI。


移植过程

PTAM主要用到的库有TooN,Gvars3,CVD。这三个库都是同一个机构编写的。首先要先下载并编译这三个库:
TooN:2.2
Libcvd:20150407
Gvars:3


TOON

这个只有一些头文件,不需要编译,下载后直接放在include目录下即可。


CVD

这个库自带了IOS平台的XCode工程,直接用XCode打开编译。
然而并没有那么顺利,会遇到一些错误。

【报错】提示#include

GVARS3

这个库没有官方支持IOS,所以需要手动编译。新建一个cocoa touch static library。导入源代码。点击编译,会提示一些头文件找不到,主要是readline,xm,x11相关的文件。

先在OSX中安装一个brew,然后在终端中输入:
brew install readline
brew cask install xquartz
brew install lesstif

安装完后分别在
/usr/local/Cellar/readline/6.3.8
/usr/local/Cellar/lesstif/0.95.2
/usr/X11
找到安装好的内容,将头文件和.a文件移到相应的位置

然后配置一下Gvars3工程中的SearchPaths,将头文件和库文件的路径加入,即可编译成功。

这些库编译完之后,取它们的头文件和.a文件备用。接下来我们进行主体工作,编译PTAM。


PTAM

新建一个IOS APP工程,导入PTAM源代码,和刚才编译好的库。
这里我使用到了开源项目iPTAM的处理视频输入和OpenGL ES渲染的代码,导入了以下文件
这里写图片描述
其中MyVideoBuffer用来处理视频输入,teapot.h是一组模拟输入没有用到,EAGLView、ESRenderer是视图和显示相关的,GLVideoFrameAppDelegate用来代替APP自带的delegate,并且存放EAGLView的Outlet。


接着添加以下库:
这里写图片描述


然后开始修改PTAM的源代码
1. 将main.cc、VideoSource.h/.cc删除
2. 将ARDriver和MapViewer相关的文件和代码删除(先搁置这些功能)
3. 将System.cc中关于相机参数的代码删除,直接在ATANCamera.cc中将相机参数固定
4. 将System.cc中的Run()删除,添加如下函数
这里写图片描述
该函数用于让MyVideoBuffer.mm调用
5. 将Tracker.cc中与OpenGL 相关的代码改写成OpenGL ES
6. 将main.m中的delegate改成GLVideoFrameAppDelegate


接下来制作APP的界面:
这里写图片描述
如图所示,将ViewController下的View改成EAGLView类,然后加入一个VideoFramAppDelegate的object,将其中的成员glView设置成View的Outlet。
然后添加两个按钮,在ViewController中添加action,SpaceBar按钮是将Tracker中的mbUserPressedSpacebar设置成true,Reset按钮是调用Tracker中的Reset()函数。


最后就是编译阶段了,遇到了不少问题
1. 修改build settings:
这里写图片描述

这里写图片描述

这里写图片描述

2.【报错】链接时找不到CVD::get_time_of_day_ns()
这里写图片描述
【解决】在cvd工程中将 get_time_of_day_ns.cc添加进工程后重新编译

3.【报错】找不到Foundation/Foundation.h
【解决】开启build settings 中的 Prefix Header
新建一个.pch,加入
#include <Foundation/Foundation.h>

4.【报错】CVD的平台不符
这里写图片描述
【解决】找到项目的Build Settings- > Build Active Architecture Only,将其从NO 设为 YES

5.【报错】使用gvars3/instances.h链接时出错:
这里写图片描述
【解决】在编译Gvars3的时候Build settings -> C++ Standard Library 和C++ Language Dialect改成和现在的工程设置一致
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值