无法将图像添加到ARCore中的AugmentedImageDatabase

时间:2019-03-19 13:12:06

标签: c# unity3d arcore

我正在统一编写一个应用程序。将来,我需要能够从Web上提取图像并将其用作跟踪器,因此我目前正在编写代码,以便在运行时将列表中的图像添加到AugmentedImageDatabase。

但是,每次添加图像时,AugmentedImageDatabase.AddImage()方法都会返回-1。这意味着添加图像时出错,但是没有说明是哪种错误。我已经检查了API文档,但它们也没有添加任何信息。

为什么我的代码没有将图像添加到AugmentedImageDatabase?

public class DataBaseGenerator : MonoBehaviour {
    [SerializeField]
    ARCoreSessionConfig session;

    [SerializeField]
    AugmentedImageDatabase imageDatabase;

    [SerializeField]
    List<Texture2D> image;

    private int ErrorIndex = 0;

    // What happens on the first frame
    void Start ()
    {
        CreateDatabase();
    }
    private void CreateDatabase()
    {
        int i = 0;
        foreach (Texture2D texture in image)
        {
            string name = "Tracker";
            Texture2D rgbTexture = new Texture2D(texture.width, texture.height, TextureFormat.RGBA32, false);
            rgbTexture.SetPixels(texture.GetPixels());
            rgbTexture.Apply();

            ErrorIndex = imageDatabase.AddImage(name, rgbTexture, 0);
            GameUtility.ShowToastMessage(ErrorIndex.ToString());
            Debug.Log(name + ": " + ErrorIndex);
            i++;
        }
        session.AugmentedImageDatabase = imageDatabase;
    }
}

列表中的所有图像均已保存为Sprites。 所有带有[SerializeField]标签的变量都在统一编辑器中定义。

1 个答案:

答案 0 :(得分:1)

由于OP没有回复,我假设我的评论解决了问题,并将我的评论转换为答案。

ARCore仅支持Augmented Image Database的两种纹理格式(RGBA32或RGB24)。因此,必须首先转换纹理,以便能够将图像添加到数据库。

OP代码中的第二个问题是他试图将图像添加到Start中的数据库中,该图像显然在启动应用程序时被执行。因此,会话状态为NoneInitializing,导致LifecycleManager.Instance.NativeSession返回null。由于目前没有Session,因此无法将图像添加到数据库中。