EasyAR Target 配置

EasyAR中的Target

EasyAR提供一个灵活的target管理接口,简单易用。你可以在运行时生成EasyAR的target,无需登录网站上传下载很多数据。

EasyAR通过两个步骤来管理target。

第一步是加载配置来设置target。关于target的详细说明和加载/卸载可以参考 ImageTargetObjectTarget (C++)或是 ImageTargetBaseBehaviourObjectTargetBaseBehaviour (Unity),Unity中在Editor中的配置可以参考 ImageTarget-PrefabObjectTarget-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"
  ]
}