UDT实现的原理:
这里会有两个新的类:ImageTargetBuilder 和 ImageTargetBuilderState。
通过这两个类可以实时创建
复制代码
ImageTargetBuilder builder;
ObjectTracker imageTracker;
DataSet dataSet;
boolean building = false;
boolean scanning = false;
// 开始扫描
void startUserDefScan()
{
builder.startScan();
scanning = true;
}
// 开始创建ImageTargetBuilder
void startUserDefBuild(String name, float sceneSizeWidth)
{
building = builder.startBuild(name, sceneSizeWidth);
builder.stopScan();
scanning = false;
}
// 通过ImageTargetBuilder 获取TrackableSource
// 再根据TrackableSource 创建tracker并**dataset
void onApplicationUpdate()
{
if (building)
{
TrackableSource trackableSource = builder.getTrackableSource ();
if (trackableSource != null)
{
imageTracker.deactivateDataSet(dataSet);
dataSet.createTrackable(trackableSource);
imageTracker.activateDataSet(dataSet);
building = false;
}
else if (scanning)
{
updateScanningGUI();
}
}
}
在选择实时拍摄的场景时,需要注意以下几点:其实也是ImageTarget的选择标准了:
|
Attribute |
Example |
|
Rich in detail |
A street scene, group of people, collages and mixtures of items, and sport scenes |
|
Good contrast |
Includes bright and dark regions, and well-lit |
|
No repetitive patterns |
A grassy field, the façade of modern house with identical windows, and a checkerboard |
|
Ease of availability |
Business cards, magazine, and memos |
同样,你也可以通过一些方法实时反馈你当前使用作Target的图像的识别度到底是多少:
/// <summary>
/// called when the UserDefinedTargetBehaviour reports a new frame Quality
/// </summary>
void OnFrameQualityChanged(ImageTargetBuilder.FrameQuality frameQuality);
需要单独介绍一下这一项:UserDefinedTargetBuildingBehaviour
作用:提供开始和停止扫描Target的方式以及创建新的Target。
三个选项:
1、Start scanning automatically:
当开始摄像头,自动检测摄像头画面的特征点
2、Stop tracker while scanning:
当扫描的时候自动终止跟踪,当停止扫描,跟踪自动开启。
3、Stop scanning after creating a target:
当新的target创建之后,自动停止扫描
PS:默认选择第一项,这种方式一直扫描状态,当Target创建之后会被立刻跟踪。因此,模型出现更快。并且选择这种,可以识别多个标志。
在demo中,你可以扫描一个地方出现茶壶后,再扫描另外一个地方,又会出现茶壶;然后返回之前扫描的Target,茶壶又会出现。发现每个Target出现的模型都是茶壶,那么怎么样才能使不同的Target出现不同的模型呢?且听下回分解!!
首先运行demo示例:
请尊重所有作者的劳动,转载请注明原帖来自 AR学院 !