EasyAR Target 配置¶
EasyAR中的Target¶
EasyAR提供一个灵活的target管理接口,简单易用。你可以在运行时生成EasyAR的target,无需登录网站上传下载很多数据。
EasyAR通过两个步骤来管理target。
第一步是加载配置来设置target。关于target的详细说明和加载/卸载可以参考 ImageTarget 和 ObjectTarget (C++)或是 ImageTargetBaseBehaviour 和 ObjectTargetBaseBehaviour (Unity),Unity中在Editor中的配置可以参考 ImageTarget-Prefab 和 ObjectTarget-Prefab 。
第二步是将target加载进入tracker中用以跟踪。EasyAR通过异步方式 加载 和 卸载 tracker中的target,不会阻塞调用线程,因而可以动态增量加载。
加载进tracker的target会在 FrameStreamer.peek 调用中被传入 Frame ,并最终成为 TargetInstance 的一部分。
Target的Json配置¶
EasyAR target的灵活性不仅仅表现在加载和卸载的接口上,配置文件也非常灵活。
你可以只从图像本身生成target,或者通过更为细致的配置来生成target。EasyAR使用json格式来存储target的配置。完整的数据集接口示例如下
ImageTarget
{
"images" :
[
{
"image" : "idback.jpg",
"name" : "idback",
"size" : [8.56, 5.4],
"uid" : "uid-string, should NOT duplicate",
"meta" : "what ever string you like."
}
]
}
ObjectTarget
{
"objects" :
[
{
"obj" : "hexagon.obj",
"name" : "hexagon",
"scale" : 1.0,
"uid" : "uid-string, should NOT duplicate",
"meta" : "what ever string you like."
},
]
}
上面的json包含了所有可以被EasyAR使用的配置项:target路径、target名字、target大小/缩放、target uid以及meta data。这里面只有target路径是必需的。所以下面这个json也是可接受的。
ImageTarget
{
"images" :
[
{
"image" : "argame00.jpg",
"name" : "argame"
}
]
}
ObjectTarget
{
"objects" :
[
{
"obj" : "hexagon.obj",
"name" : "hexagon"
}
]
}
当然这个也可以。
ImageTarget
{
"images" :
[
{
"image" : "argame00.jpg"
}
]
}
ObjectTarget
{
"objects" :
[
{
"obj" : "hexagon.obj"
}
]
}
你可以将多个target放入json文件中然后一起或分别加载。
{
"images" :
[
{
"image" : "argame00.jpg",
"name" : "argame"
},
{
"image" : "idback.jpg",
"name" : "idback",
"size" : [8.56, 5.4],
"uid" : "uid-string"
}
]
}
{
"images" :
[
{
"image" : "sightplus/argame01.jpg",
"name" : "argame01"
},
{
"image" : "sightplus/argame02.jpg",
"name" : "argame02"
},
{
"image" : "sightplus/argame03.jpg",
"name" : "argame03"
}
]
}
或者是将不同类型的target放在同一个json中
{
"images" :
[
{
"image" : "argame00.jpg",
"name" : "argame"
},
{
"image" : "idback.jpg",
"name" : "idback",
"size" : [8.56, 5.4],
"uid" : "uid-string"
}
],
"objects" :
[
{
"obj" : "hexagon.obj"
}
]
}
有时你并不太关心像图像大小或名字这样细节的配置,只需要加载很多图像或obj文件并生成target。因此我们也提供了简化的配置方式。
ImageTarget
{
"images": [
"argame00.jpg"
]
}
ObjectTarget
{
"objects": [
"hexagon.obj"
]
}
如上,你只需要写一行路径就可以了。当有很多target的时候,写法如下,
ImageTarget
{
"images": [
"argame00.jpg",
"argame01.jpg",
"argame02.jpg",
"argame03.jpg",
"argame04.jpg",
"argame05.jpg"
]
}
ObjectTarget
{
"objects": [
"object00.jpg",
"object01.jpg",
"object02.jpg",
"object03.jpg",
"object04.jpg",
"object05.jpg"
]
}
或将它们放在一起
{
"images": [
"argame00.jpg",
"argame01.jpg",
"argame02.jpg",
"argame03.jpg",
"argame04.jpg",
"argame05.jpg"
],
"objects": [
"object00.jpg",
"object01.jpg",
"object02.jpg",
"object03.jpg",
"object04.jpg",
"object05.jpg"
]
}
当然,你也可以将上面这些配置组合进一个json文件。下面这个示例演示了一个组合,并使用了不同的路径书写方式。路径书写需要确保是unix方式的 (即使用 / 来分隔路径元素)。当前版本的EasyAR支持中文等非ASCII字符的路径,但是你必须保存json文件为UTF-8格式。
{
"images": [
"path/to/argame00.jpg",
"path/to/argame01.png",
"argame02.jpg",
{
"image" : "path/to/argame03.jpg"
},
{
"image" : "argame04.png",
"name" : "argame"
},
{
"image" : "idback.jpg",
"name" : "idback",
"size" : [8.56, 5.4],
"uid" : "uid-string"
},
"c:/win/absolute/path/to/argame05.png",
"/unix/absolute/path/to/argame06.jpg"
],
"objects": [
"path/to/argame00.obj",
"path/to/argame01.obj",
"argame02.obj",
{
"obj" : "path/to/argame03.obj"
},
{
"obj" : "argame04.obj",
"name" : "argame"
},
{
"obj" : "hexagon.obj",
"name" : "hexagon",
"scale" : 1.0,
"uid" : "uid-string, should NOT duplicate",
"meta" : "what ever string you like."
},
"c:/win/absolute/path/to/argame05.obj",
"/unix/absolute/path/to/argame06.obj"
]
}