Не могу добавить изображения в AugmentedImageDatabase в ARCore - PullRequest
1 голос
/ 19 марта 2019

Я пишу заявку в единстве. В будущем мне нужно иметь возможность извлекать изображения из Интернета и использовать их в качестве трекеров, поэтому в настоящее время я пишу код, который добавляет изображения из списка в 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;
    }
}

Все изображения в списке были сохранены как спрайты. Все переменные с тегом [SerializeField] определены в редакторе единиц.

1 Ответ

1 голос
/ 20 марта 2019

Поскольку OP не ответил, я предполагаю, что мой комментарий решил проблему, и преобразовал мой комментарий в ответ.

ARCore поддерживает только два формата текстур (RGBA32 или RGB24) для Augmented Image Database. Поэтому текстуру необходимо сначала преобразовать, чтобы можно было добавлять изображения в базу данных.

Вторая проблема в коде OP состояла в том, что он пытался добавить изображения в базу данных в Start, которая, очевидно, выполняется при запуске приложения. Таким образом, статус сеанса равен либо None, либо Initializing, в результате чего LifecycleManager.Instance.NativeSession возвращает ноль. Поскольку Session на данный момент нет, вы не можете добавлять изображения в базу данных.

...