产品经理有设想将AR元素引入到新的APP中。这是比较时髦的元素,但是iOS原生还没有支持。上gitHub也找不到star上千的库,搜百度,也没有很好的扫盲文章。在即将放弃的时候,“视+”应用和EasyAR这个免费的AR第三方库被发现了。
资源下载
-
下载SDK和样例代码
分Unity和Native两种类型。不是纯游戏,而是在iOS应用中一个插件,所以Unity暂时不考虑。 -
视+官网
这个据说是用EasyAR库的,并且已经有APP了,也下载用了,感觉还是挺有意思的。
简要过程
-
整个SDK有212M,比较大。不过这个是支持N多平台的,其中iOS的framework大小为22M
-
Native的Sample包含Android和iOS两部分,最基础的HelloAR打包之后的大小为13.3M
-
使用前需要在EasyAR的官网注册为开发者,需要用邮箱验证。对于下载的Sample,要运行起来,也要在网上创建应用,提供应用的名字和bundle id,生成一个key,写在程序中。整个过程和友盟差不多。
-
需要真机调试,提供的framework不支持模拟器,链接会出问题。
-
好在从XCode7开始,个人账号不交钱也能真机调试了。最低支持版本最好设定为iOS8,提供的是framework,不是以往的.a文件。
-
提供的framework是一个C++库,很明显是做游戏的。主要的使用场景也是在摄像头拍摄界面加入自定义的动画。HelloAR中,类AR是对easyar.framework的第一层封装;类Render是用OpenGL写的一个立方体;看来还是做游戏的节奏。
-
主要功能有两个,第一个功能是目标图像识别。目标图片都是jpg格式的,打包在程序中,读入内存,作为识别的目标。打开图片,用HelloAR的程序的摄像头对准图片,能够识别成功。这些目标图像视+APP也在用,也是能够正常识别的。
- 第二个功能是将虚拟物体和实际的的拍摄场景合二为一,这是AR(增强现实)的核心功能。使用HelloAR识别之后,场景是摄像界面加了一个有色方块。而用视+APP识别之后,则是一个“打地鼠游戏了”。并且还提供了拍照片、拍视频的功能。
-
在实际使用中,将HelloAR中那个有色方块替换成自己想要的内容就可以了。可以是静态图片,可以是CA动画,也可以是普通的按钮等控件,当然也可以是OpenGL游戏... .... 也就是替换HelloAR工程中那个Render类。
-
如果想要互动,也可以提供自己的目标图片,替换掉工程中那些图片就可以了。当然,如果要改图片名字的话,读图片那部分代码的图片名字也要相应改改。重新编译运行,可以发现HelloAR可以识别自定义的图片,识别后照样在图片上面加一个有色方块;这个时候,视+APP就识别不出来了,怎么“扫描”都没有反应了。
- 简单讲,视+APP现在做的事情就是通过摄像头将实际的场景作为背景,然后在此基础上玩小游戏。达到的效果是好像游戏人物来到了现实之中,还是比较有趣的。也能符合AR(增强现实,虚拟和实际结合)这种热门概念,也是比较有创意的。为了减小APP的大小,小游戏都是在用户选定了特定场景之后,(选的方式有两种,一种是识别目标图片,前面已经讲过;另一种是用户选择),从网上下载,还能跟当前火热的“云计算”扯上关系,也是花了不少心思的。比如下面这张让大名鼎鼎的“巫妖王”在自己的键盘上跳来跳去,很有成就感吧。
评估结果
可行性
-
提供的easyar.framework是C++库,可以用Object-C包一层,就可以在Swift的工程中使用。
-
将计算机中的物体通过摄像头拍摄界面和实际的背景环境合二为一,这是核心功能,能够达到AR的需求。通过屏幕截图,就是当年很好玩的“PS”。
-
提供了识别特征图片的接口,可以自定义一些交互的手段,这个功能也不错。
-
自定义的场景最好是游戏和动画,可以做出比较有趣的内容。像视+APP这样的,就可以作为一个“以现实为背景的小游戏平台”。
不足之处
-
easyar.framework对于工具类APP来说,还是大了一点,有22M
-
easyar.framework的C++接口,对于非游戏开发者,不够友好;最好能够提供Object-C接口,或者是Swift接口。
-
游戏属于沉浸式应用,结合到普通工具类应用中总感觉气氛不对。最好能够提供适合工具类应用的framework。除了游戏,AR应该也有比较广泛的用武之地。
-
通过摄像头将现实场景搬到手机里,这个主意不错。不过总感觉这是微缩版的“现实”,“现实感”不是很强,还是有点“只是游戏”的感觉。仅仅只是拍照场景,也有点受限。
-
希望科幻片中虚拟光线的模式能够早日成为现实。虚拟人物通过光线的方式来到现实,可以互动;一关,又回去了,不见了;这样感觉更自然一点。键盘,显示屏......这些成本高,体积大、占地方的东西到时候都可以减掉了.......想想都激动。
备注
- 做这个事情大概是2016年六七月份的样子吧,当时是作为研究可行性,在项目中引入AR功能,时间也不长,就折腾了一个星期左右,认识也是很浅的。后来想不到会有人问相关的技术问题,说实话,确实回答不了。
- easyar的例子下载下来,记得当时是不能运行的,原因是他要像友盟一样,根据bundle id生成APPKey,所以,要让他提供的demo运行起来,这些相关的地方要修改一下的。也就一两个地方,当时也就花了半个小时左右就折腾出来了。
- 另外一个就是要自定义,那么就要在入口代码里面,替换或者增加自己的图片,大的框架已经搭好了,稍微改改也就可以了。基本上是改图片名字,工程中加入自己的图片等很基础的工作,没有实际功能的修改。
- 当时,时间大部分是花在easyar和视+相关文档的阅读,以及他们提供的例子的体验上,技术上花的时间也很少。当时,也确实感觉很好玩。不过,最后评估的结果,是不加入这块功能,所以也就没有继续了。
- 很感谢大家的关注和关心。技术相关问题确实回答不了,请谅解。现在,也过去一年时间了,基本上忘记光了,要搞的话,也需要从零开始看文档。当时,用到的所有资料都在上面提到的链接里面了,现在能够正常运行起来都不知道,苹果每年都在更新,一个月不跟进就会落后,何况一年多没碰这一块了。不过当时是可以的,上面那些截图,都是通过实际的Demo拍照来的。
网友评论
AugmentedTarget::Status status = frame.targets()[i].status();
if(status == AugmentedTarget::kTargetStatusTracked){
// 加载模型成功
Matrix44F projectionMatrix = getProjectionGL(camera_.cameraCalibration(), 0.2f, 500.f);
Matrix44F cameraview = getPoseGL(frame.targets()[i].pose());
ImageTarget target = frame.targets()[i].target().cast_dynamic<ImageTarget>();
renderer.render(projectionMatrix, cameraview, target.size());
}
}
这个方法里面 不过怎么写要看看