目录
- Vuforia 是什么?
- 环境准备
- 1 安装 Android Studio
- 2 配置 Android NDK 与 SDK
- 3 创建 Vuforia 开发者账户并获取 Key
- 创建第一个 AR 项目:3D 模型跟踪
- 1 步骤一:在 Vuforia Target Manager 中创建数据库
- 2 步骤二:添加并准备 3D 模型
- 3 步骤三:在 Android Studio 中创建新项目
- 4 步骤四:配置项目依赖和权限
- 5 步骤五:配置 ARCamera
- 6 步骤六:加载并显示 3D 模型
- 7 步骤七:运行和测试
- 核心概念解析
- 1 Vuforia 数据库
- 2 Target (目标)
- 3 Image Target (图像目标)
- 4 Model Target (模型目标)
- 5 Trackable (可追踪对象)
- 6 ARCamera (AR 相机)
- 7 GameObject (游戏对象) 与 Behavior (行为)
- 进阶功能与资源
- 1 平面检测
- 2 多目标跟踪
- 3 云识别
- 4 官方资源与社区
- 常见问题与故障排除
- Q1: 为什么我的 App 一打开就崩溃?
- Q2: 为什么摄像头画面是黑的?
- Q3: 为什么我的 3D 模型没有出现?
- Q4: Vuforia Key 有什么限制?
Vuforia 是什么?
Vuforia 是一款功能强大的增强现实 开发引擎,由 PTC 公司开发,它被广泛用于为移动设备(iOS、Android)和头戴式显示器(如 HoloLens、Magic Leap)创建 AR 应用程序。

Vuforia 的核心能力是识别和跟踪现实世界中的物体或图像,并将虚拟的 3D 模型、2D 图像、视频等数字信息叠加到摄像头捕捉到的真实画面上。
主要功能包括:
- 图像识别: 识别特定的 2D 图片。
- 模型识别: 识别 3D 物体(如玩具、机器零件)。
- 平面检测: 在环境中检测水平面(如地面、桌面)和垂直面(如墙壁)。
- 物体识别: 识别通用物体类别,无需预先训练。
- Smart Terrain: 在设备周围实时构建 3D 网格,用于虚拟物体与现实环境的交互。
- 云识别: 将庞大的目标数据库存储在云端,减轻应用体积。
环境准备
在开始编码之前,请确保你的开发环境已经准备就绪。
1 安装 Android Studio
这是开发 Android 应用的官方 IDE,如果你还没有安装,请从 Android 官网 下载并安装。

2 配置 Android NDK 与 SDK
Vuforia 的本地库需要 Android NDK (Native Development Kit) 来编译。
- 打开 Android Studio,进入
File->Settings(Windows) 或Android Studio->Preferences(macOS)。 - 导航到
Appearance & Behavior->System Settings->Android SDK。 - 在
SDK Tools标签页中,勾选以下两项:- NDK (Side by side): 用于编译 C/C++ 代码。
- CMake: 一个跨平台的构建工具。
- 点击
Apply或OK进行安装。
3 创建 Vuforia 开发者账户并获取 Key
- 访问 Vuforia 开发者平台。
- 注册一个免费账户。
- 登录后,进入
Develop->License Manager。 - 点击
Add a license key,给你的 App 起个名字("MyFirstARApp"),然后创建。 - 你将获得一个 Vuforia License Key(一长串字母和数字)。请妥善保管,这是我们配置 AR 应用程序的核心凭证。
创建第一个 AR 项目:3D 模型跟踪
我们将创建一个应用,当手机摄像头对准一个特定的 3D 模型(比如一个茶壶)时,屏幕上会显示一个 3D 茶壶模型并跟随它移动。
1 步骤一:在 Vuforia Target Manager 中创建数据库
数据库是存储你想要识别的目标的集合。
- 登录 Vuforia 开发者平台,进入
Develop->Target Manager。 - 点击
Add Database,创建一个新的数据库,给它一个名字(MyFirstDatabase),选择Access为Developer(免费),Create。 - 进入刚创建的数据库,点击
Add Target->Model Target。 - 选择 3D 模型:点击
Choose File,上传一个.obj格式的 3D 模型文件(这里可以下载一个示例茶壶模型)。 - 命名和设置:给目标起个名字(
Teapot),然后点击Add。 - 下载数据库:创建成功后,在数据库页面点击
Download按钮,选择Android平台,下载一个.xml文件,这个文件包含了你目标的“数字指纹”,我们需要把它放到 Android 项目中。
2 步骤二:添加并准备 3D 模型
我们需要一个 3D 模型文件(如 .fbx 或 .obj)来显示在 AR 场景中,你可以使用任何 3D 建模软件创建,或从网上下载免费资源。

- 将你下载的
.obj文件(或你自己的模型)放入 Android Studio 项目的app/src/main/assets文件夹下,如果这个文件夹不存在,请手动创建。
3 步骤三:在 Android Studio 中创建新项目
- 打开 Android Studio,选择
File->New->New Project...。 - 选择
Empty Views Activity模板,Next。 - 配置你的项目:
- Name:
MyFirstARApp - Package name:
com.example.myfirstarapp(根据你的实际情况修改) - Save location: 选择项目保存路径
- Language:
Java或Kotlin(本教程以 Java 为例,但 Kotlin 的步骤类似) - Minimum SDK:
API 24: Android 7.0 (Nougat)或更高版本。
- Name:
- 点击
Finish等待项目构建完成。
4 步骤四:配置项目依赖和权限
-
添加 Vuforia 依赖:
- 打开
app/build.gradle文件。 - 在
dependencies代码块中,添加 Vuforia 核心库:implementation 'com.ptc.vuforia:vuforia:9.8.+' // 使用最新版本
- 点击 "Sync Now" 同步 Gradle。
- 打开
-
添加权限和配置:
-
打开
app/src/main/AndroidManifest.xml文件。 -
在
<application>标签之前,添加必要的相机和网络权限:<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-
在
<application>标签内部,添加 Vuforia Key 和配置ARActivity:<application ...> <!-- 将 YOUR_VUFORIA_LICENSE_KEY 替换为你在第 2.3 步获取的 Key --> <meta-data android:name="com.vuforia.KEY" android:value="YOUR_VUFORIA_LICENSE_KEY" /> <activity android:name="com.vuforia.VuforiaPlayerActivity" android:configChanges="orientation|screenSize|keyboardHidden" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 如果你使用的是 Empty Views Activity,请保留 MainActivity --> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> -
注意:
VuforiaPlayerActivity是 Vuforia 的启动界面,它会初始化 AR 相机。MainActivity将在 AR 初始化完成后被加载。
-
5 步骤五:配置 ARCamera
- 打开
app/res/layout/activity_main.xml文件。 - 删除默认的
TextView,添加一个ARCamera组件,这是 Vuforia 的核心,负责处理相机预览和跟踪。<com.vuforia.arCamera.ARCamera xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/arCamera" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:context=".MainActivity" />
6 步骤六:加载并显示 3D 模型
- 将你在 3.1 步下载的数据库文件(
MyFirstDatabase.xml)复制到app/src/main/assets文件夹。 - 修改
MainActivity.java文件,加载数据库并创建 3D 模型。
package com.example.myfirstarapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import com.vuforia.DataSet;
import com.vuforia.ObjectTracker;
import com.vuforia.Trackable;
import com.vuforia.TrackableResult;
import com.vuforia.Vuforia;
import com.vuforia.Vector3;
import com.vuforia.ObjectTarget;
import com.vuforia.ObjectTrackerInstantiationException;
import com.vuforia.Trackables;
import com.vuforia.VuforiaException;
import com.vuforia.arCamera.ARCamera;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity {
private ARCamera arCamera;
private DataSet dataSet;
private ObjectTracker objectTracker;
private Trackable teapotTrackable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
arCamera = findViewById(R.id.arCamera);
// 初始化 Vuforia
Vuforia.setInitParameters(this, Vuforia.GL11, "");
try {
Vuforia.init();
} catch (VuforiaException e) {
Toast.makeText(this, "Vuforia 初始化失败: " + e.getMessage(), Toast.LENGTH_LONG).show();
finish();
return;
}
}
@Override
protected void onResume() {
super.onResume();
// 加载数据集
loadDataSet();
// 启动 AR 相机
arCamera.onResume();
}
@Override
protected void onPause() {
super.onPause();
// 暂停 AR 相机
arCamera.onPause();
// 释放数据集
if (dataSet != null) {
dataSet.deactivate();
dataSet.destroy();
dataSet = null;
}
}
private void loadDataSet() {
// 创建一个 Object Tracker
objectTracker = ObjectTracker.getInstance();
if (objectTracker == null) {
Toast.makeText(this, "无法创建 ObjectTracker", Toast.LENGTH_LONG).show();
return;
}
try {
objectTracker.start();
} catch (ObjectTrackerInstantiationException e) {
Toast.makeText(this, "启动 ObjectTracker 失败: " + e.getMessage(), Toast.LENGTH_LONG).show();
return;
}
// 加载数据集
dataSet = objectTracker.createDataSet();
InputStream inputStream = null;
try {
inputStream = getAssets().open("MyFirstDatabase.xml");
if (!dataSet.load(inputStream, "", Vuforia.STORAGE_ABSOLUTE)) {
Toast.makeText(this, "加载数据集失败", Toast.LENGTH_LONG).show();
return;
}
} catch (IOException e) {
Toast.makeText(this, "读取数据集文件失败: " + e.getMessage(), Toast.LENGTH_LONG).show();
return;
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 激活数据集
if (!objectTracker.activateDataSet(dataSet)) {
Toast.makeText(this, "激活数据集失败", Toast.LENGTH_LONG).show();
return;
}
// 获取数据集中的第一个目标 (我们的茶壶)
Trackables trackables = dataSet.getTrackables();
teapotTrackable = (Trackable) trackables.get(0);
teapotTrackable.start(); // 开始跟踪
// 为目标创建一个 3D 渲染器
// 注意:这里简化了,实际渲染需要 OpenGL ES
// Vuforia 的 Unity 插件会处理这个,原生 SDK 需要自己写渲染代码。
// 这是一个概念性的步骤,表明你需要在这里渲染模型。
Toast.makeText(this, "数据集加载成功,请将摄像头对准目标物体", Toast.LENGTH_SHORT).show();
}
}
重要提示:上面的代码加载了数据库并启动了跟踪,但并没有渲染 3D 模型,在原生 Android SDK 中,渲染 3D 模型需要你自己使用 OpenGL ES 编写复杂的渲染管线,这超出了“入门教程”的范畴,对于初学者,强烈推荐使用 Vuforia + Unity,Unity 内置了强大的渲染引擎,可以让你轻松地将 3D 模型拖拽到场景中即可显示。
7 步骤七:运行和测试
- 将你的 Android 设备通过 USB 连接到电脑,并开启“开发者选项”和“USB 调试”。
- 在 Android Studio 中,点击绿色的“运行”按钮。
- App 会启动,请求相机权限,请允许。
- 将摄像头对准你在 3.1 步上传的 实物 3D 模型(例如一个真实的茶壶)。
- 如果一切顺利,你应该会看到 App 成功识别并跟踪该模型。(由于我们没有写渲染代码,你可能只看到相机画面,但 Vuforia 的日志会显示跟踪成功)。
核心概念解析
理解这些概念是掌握 Vuforia 的关键。
- Vuforia 数据库: 一个
.xml文件,包含了你想要识别的“目标”的数字信息,一个 App 可以加载多个数据库。 - Target (目标): 你想让 Vuforia 识别的任何东西,可以是图像、3D 模型、物体等。
- Image Target (图像目标): 最常见的目标类型,基于一张 2D 图片,Vuforia 会提取图片的特征点进行识别。
- Model Target (模型目标): 基于 3D 模型的目标,Vuforia 会从 3D 模型中生成多个 2D 视图,从而实现从不同角度识别实物。
- Trackable (可追踪对象): 在代码中,一个被识别并跟踪的目标实例,当你创建一个
ImageTarget或ModelTarget并加载到场景中时,它就变成了一个Trackable。 - ARCamera (AR 相机): Vuforia 的核心组件,它负责:
- 访问设备的相机。
- 初始化 Vuforia 引擎。
- 执行目标识别和跟踪算法。
- 将相机画面作为背景渲染到屏幕上。
- GameObject (游戏对象) 与 Behavior (行为): 在 Unity/Vuforia 生态中,你在场景中放置的任何东西(如 3D 模型、图片、灯光)都是一个
GameObject。Behavior是附加在GameObject上的脚本,赋予其特定功能。ImageTarget本身是一个GameObject,你可以将一个 3D 模型作为它的子对象,并附加一个ModelTargetBehaviour来让它只在目标被识别时显示。
进阶功能与资源
当你掌握了基础后,可以探索更强大的功能。
-
平面检测:
- 功能: 不需要特定的目标图片或模型,Vuforia 可以自动检测环境中的平面,如地面、桌面、墙壁。
- 用途: 将虚拟家具放置在你的房间里,或在墙上挂虚拟画框。
- 实现: 在 Unity 中,只需添加一个
PlaneFinderGameObject 并将其作为其他虚拟物体的父对象即可。
-
多目标跟踪:
- 功能: 在一个数据集中添加多个目标(多张图片或多个 3D 模型),Vuforia 可以同时跟踪它们。
- 用途: 创建一个复杂的 AR 产品说明书,用户扫描不同部件时,显示对应的 3D 动画和信息。
-
云识别:
- 功能: 将目标存储在 Vuforia 的云端服务器上,你的 App 只需发送请求到云端进行识别,无需在本地存储庞大的数据库文件。
- 用途: 识别海量的、频繁更新的目标,如杂志上的广告、产品包装等。
- 注意: 云识别需要付费订阅。
-
官方资源与社区:
- Vuforia 官方文档: https://library.vuforia.com/ (最权威的参考资料)
- Vuforia 开发者社区: https://developer.vuforia.com/forum (提问和交流的好地方)
- Unity Asset Store: 搜索 "Vuforia",有大量现成的插件、示例和扩展。
- 推荐: 对于绝大多数开发者,Vuforia + Unity 是最高效、最友好的组合,Unity 可视化的编辑环境和强大的渲染引擎能让你专注于创意,而不是底层的 OpenGL 编程。
常见问题与故障排除
-
Q1: 为什么我的 App 一打开就崩溃?
- A1: 最常见的原因是
AndroidManifest.xml中的Vuforia License Key错误或无效,请仔细检查 Key 是否正确粘贴,其次是缺少必要的相机权限。
- A1: 最常见的原因是
-
Q2: 为什么摄像头画面是黑的?
- A2:
- 检查是否授予了相机权限。
- 检查设备是否被其他应用占用(如正在视频通话)。
- 检查
ARCamera组件是否正确添加到布局中。 - 在某些模拟器上,相机功能可能无法正常工作,请务必在真机上测试。
- A2:
-
Q3: 为什么我的 3D 模型没有出现?
- A3:
- 原生 SDK: 因为你没有编写渲染代码,模型自然不会显示,这是正常的,原生 SDK 开发复杂。
- Unity: 检查你的 3D 模型是否被正确放置为
ImageTarget或ModelTarget的子对象,检查ModelTargetBehaviour的Enabled属性是否勾选。
- A3:
-
Q4: Vuforia Key 有什么限制?
- A4: 免费的 Developer Key 有一些限制:
- 每个月处理的请求数量有限制。
- 不能用于商业发布的产品。
- 如果你的应用需要公开发布并盈利,你需要申请一个商用 Key,这通常是付费的。
- A4: 免费的 Developer Key 有一些限制:
希望这份详尽的教程能帮助你顺利开启 Vuforia AR 开发之旅!祝你编码愉快!
