Vuforia开发高阶三-用户自定义Target(第一部分)
关于(用户自定义)UDT示例的开发,使用u3d的步骤和ImageTarget的类似。一般的ImageTarget示例,制作自己需要的内容,最基本的两步操作是更换Target和更换模型,但是在自定义的时候,Target是实时获取的,不需要事先准备,更换模型的操作步骤还是一样的。
UDT实现的原理:
这里会有两个新的类:ImageTargetBuilder 和 ImageTargetBuilderState。
通过这两个类可以实时创建
复制代码
在选择实时拍摄的场景时,需要注意以下几点:其实也是ImageTarget的选择标准了:
同样,你也可以通过一些方法实时反馈你当前使用作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示例:
然后替换模型:
最后运行的示例:
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学院 !