确实,随着技术的不断进步,Android中AR(增强现实)应用的开发变得更加容易。以下是一些使AR应用开发变得简单的方法和工具:
1. "ARCore":这是Google推出的一个开源平台,它允许开发者轻松地在Android设备上创建AR应用。ARCore利用设备的摄像头、传感器和处理器来构建AR体验。
2. "ARKit":虽然ARKit主要用于iOS设备,但一些开发工具和框架也支持跨平台开发,使得在Android上使用ARKit变得可能。
3. "Unity和Unreal Engine":这两个都是流行的游戏开发引擎,它们提供了强大的AR开发工具和API,可以创建复杂的AR应用。
4. "AR Foundation":这是Unity提供的一个框架,它为AR开发提供了一套标准的API,使得开发者可以更容易地创建AR应用。
5. "ARCore Extensions":Google为ARCore提供了一系列扩展,包括SLAM(同时定位与映射)、平面检测和物体识别等,这些都可以简化AR应用的开发。
6. "ARKit for Android":虽然ARKit最初是为iOS设计的,但一些第三方库如Augmented Reality Plugin for Unity可以将ARKit的功能带到Android平台。
7. "ARCore Studio":这是一个用于调试和测试AR应用的工具,可以帮助开发者快速迭代和优化他们的AR体验。
8. "ARCore Depth API":这个API允许开发者使用Android设备的前置摄像头来获取深度信息,这对于创建更
相关内容:
【威哥说】AR技术在这两年非常火爆,从去年开始,手机上各种AR的应用也渐渐兴起,究其原因是AR能够呈现给我们绚丽的效果,比起二维码的单调,扫描图片就可以动起来。今天,我就带大家制作Android版AR应用。
【正文】增强现实(Augmented Reality,简称AR),增强现实技术,它是一种将真实世界信息和虚拟世界信息“无缝”集成的新技术,是把原本在现实世界的一定时间空间范围内很难体验到的实体信息(视觉信息,声音,味道,触觉等),通过电脑等科学技术,模拟仿真后再叠加,将虚拟的信息应用到真实世界,被人类感官所感知,从而达到超越现实的感官体验。真实的环境和虚拟的物体实时地叠加到了同一个画面或空间同时存在。
要编写AR应用,必须用c语言,也就要用到NDK,本次实现过程要使用一个非常强大的AR SDK-EasyAR,EasyAR是Easy AugmentedReality的缩写,是视辰信息科技的增强现实解决方案系列的子品牌。它具有强大的跨平台能力,支持Windows/Mac OS/Android/iOS等主流的操作系统,EasyAR支持使用平面目标的AR,支持1000个以上本地目标的流畅加载和识别,支持基于硬解码的视频(包括透明视频和流媒体)的播放,支持二维码识别,支持多目标同时跟踪。作为一个SDK,它的API设计也比较简洁,因此,选择EasyAR进行项目的编写。
这是官方网站 http://www.easyar.cn/ ,需要申请key,目前是免费。
下面是环境的搭建:
要进行AR开发,必须使用NDK,由于EasyAR SDK目前不支持纯Java的API,所以我们需要同时编写Java和C++代码来使用EasyAR。为了能够在Android程序中同时运行C++和Java的代码,Google提供了Android NDK(Native Development Kit),它可以允许用户使用C/C++之类的原声代码在Dalvik虚拟机中执行部分程序。
本项目也需要配置AndroidNDK,当前使用的IDE是Android Studio 1.5,NDK版本为Android NDK r10e,这里大家要注意,不要使用低于1.5的Android Studio,不然会有问题,JDK要求1.7.
首先,要想使用NDK,必须先根据Android官方文档修改build.gradle。根据此网站进行配置:
http://tools.android.com/tech-docs/android-ndk-preview
修改后再对build..gradle进行EasyAR配置,根据此网站配置:
http://www.easyar.cn/view/docs/Getting-Started/Setting-up-EasyAR-Android-SDK.html
环境配置好以后,记得在这里Clean并且Rebuild项目,以免发生错误。
主要步骤是:
1、 新建名为GuideActivity的Class和guide.xml的布局文件,绘制启动界面和过渡动画,并且在最后调用MainActivity,释放自己。
2、 在AndroidManifest.xml中增加GuideActivity的属性信息,并将其设置为默认启动的Activity。具体增加的配置信息如下:
<activity
android:name=".GuideActivity"
android:configChanges="orientation…">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在操作界面上有3个按钮,从左到右分别是“重播”、“打开网页”和“扫描二维码”。点击它们可以完成相应的功能。
在MainActivity的开始处,需要先调用EasyAR的初始函数,并且创建GLView用于OpenGL绘图。
EasyAR.initialize(this, key); // 使用key初始化EasyAR引擎
nativeInit(); // 设置匹配图片namecard和目标配置文件target.json
GLView glView = new GLView(this);
// 继承至SurfaceView,它内嵌的surface专门负责OpenGL渲染。
glView.setRenderer(new Render());
// glView 置于视图的顶部(覆盖显示)
glView.setZOrderMediaOverlay(true);
接下来设置3个按钮的监听函数,它们的OnClickListener都会调用相应的其他函数完成按钮对应的功能,而OnTouchListener则用于显示按钮不同状态下的图片,以达到点击按钮时的动画效果。
为了建立完整的AR场景,一个CameraDevice需要attached到ImageTracker,然后Augmenter需要周期性地从ImageTracker获取新的Frame。attach和newFrame操作让整个AR链条开始工作,而数据则在这个链条上流动。
从CameraDevice产生的Image会在每帧进入ImageTracker并推动tracker运行。这些Image将跟随Frame进入Augmenter。
Target从图像和json文件中构造出来,可以被加载进ImageTracker。当它被tracker检测或跟踪到,将会跟随Frame进入Augmenter。最终移动到AugmentedTarget。
下面介绍AR功能的实现:
在jni文件夹中有5个.cc/.hpp文件。他们是实现AR效果的核心代码。其中ar.hpp和ar.cc中定义了Class AR,实现了包括相机初始化、载入json、图片文件、视频的播放、停止、内存释放、OpenGL的刷新和Resize。
class AR
{
public:
AR();
virtual ~AR();
virtual bool initCamera();
virtual void loadFromImage(const std::string& path);
virtual void loadAllFromJsonFile(const std::string& path);
virtual bool start();
virtual bool stop();
virtual bool clear();
virtual void initGL();
virtual void resizeGL(int width, int height);
virtual void render();
void setPortrait(bool portrait);
};
在helloarvideo.cc中实现了继承自Class AR的Class HelloARVideo,它在Class AR的基础上实现了从摄像头获取图像,并从中得到对应的ImageTargetID、二维码文本。Helloarvideo.cc中实现的若干JNI函数也是C++与Java代码的接口。
Renderer.hpp/.cc实现了通过相机的位姿和图片的位置,将视频流进行投影变换至合适的尺寸。它主要是为了helloarvideo.cc中的功能服务的。
Java文件中还有Render和GLView两个Class。其中Render负责调用MainActivity中在helloarvideo.cc里实现的函数。GLView负责增强后视频的绘制。
本文出自微信公众号mjw-java,更多精彩内容关注微信公众号或访问网站www.moliying.com。
此外腾讯课堂Android项目实战公开课马上就要节课啦,纯干货,感兴趣的朋友记得报名去听啊。地址:
https://ke.qq.com/course/144222#term_id=100163320