Используйте ARCore с файлами OBJ и MTL

Поиграв с образцами ARCore для Android, я заметил, что в образце используется следующая строка:

mVirtualObject.createOnGlThread(this, "andy.obj", "andy.png"); 

andy.png - это текстура PNG-файла, которую нужно «растянуть» над andy.obj 3D-объектом.

Я хочу заменить модель и файл PNG элементами из Google Poly.

Но при загрузке файла obj из Poly я получаю файлы obj + mtl.

Я предполагаю, что mlt - это файл текстуры, такой как PNG, но я не могу его использовать.

Могу ли я преобразовать его в файл PNG? Или использовать mtl файл в ARCore?


person David    schedule 24.12.2017    source источник
comment
Если я правильно понимаю, ARCore поддерживает прямой рендеринг файлов .obj на Java?   -  person ManuelTS    schedule 18.10.2019
comment
@ManuelTS Да, поддерживается   -  person David    schedule 29.10.2019


Ответы (2)


. * Mtl - это файл материала, на который ссылается OBJ, и он определяет такие вещи, как текстуры и конфигурацию молнии. Библиотека загрузки OBJ, используемая в образце ARCore, очень проста, поэтому вам нужно найти лучшую или реализовать загрузку файла OBJ самостоятельно. Другой вариант - использовать 3D-библиотеку для Android, которая уже обеспечивает загрузку модели и скрывает низкоуровневый материал OpenGL. Примеры этих высокоуровневых библиотек см. На странице https://stackoverflow.com/a/48456836/385536.

person Steven Mohr    schedule 29.12.2017

Для _1 _ / _ 2_ приложений вы можете использовать следующие форматы файлов 3D:

  • .obj
  • .fbx
  • .glTF
  • .glb
  • .sfa (определение объекта сцены в формате ASCII)
  • .sfb (определение объекта двоичной сцены)

А также следующие поддерживаемые форматы файлов _3 _ / _ 4_:

  • .mtl
  • .bin
  • .png
  • .jpg
  • .sfm
  • .mat

Если вы не можете прочитать соответствующую mtl текстуру, просто сконвертируйте / замените ее другим поддерживаемым форматом. Вы можете использовать obj актив таким образом:

@Override
protected Void doInBackground(Void... voids) {
    try {
        mVirtualObject.createOnGlThread(this, 
                                        "andy.obj", 
                                        "andy.png");
        mVirtualObject.setBlendMode(MtlRenderer.BlendMode.Shadow);
        mVirtualObject.setMaterialProperties(1.0f, 0.0f, 0.0f, 1.0f)
        mVirtualObjectShadow.createOnGlThread(this, 
                                              "andy_shadow.fbx", 
                                              "andy_shadow.sfm");
        mVirtualObjectShadow.setBlendMode(MtlRenderer.BlendMode.Shadow);
        mVirtualObjectShadow.setMaterialProperties(1.0f, 0.0f, 0.0f, 1.0f);
    } catch (Exception e) {
        Log.e(TAG, "Failed to read 3D asset file");
    }
    return null;
}

Надеюсь это поможет.

person Andy Fedoroff    schedule 08.04.2019
comment
Если я правильно понимаю, ARCore поддерживает прямой рендеринг файлов .obj на Java? - person ManuelTS; 18.10.2019
comment
Не уверен. Я не пробовал .obj непосредственно в ARCore Java. Это только для примера. Обычно я придерживаюсь официального подхода: developers.google.com/ar/develop/ java / sceneform / import-assets - person Andy Fedoroff; 18.10.2019