Assimp 4 Загрузка отсутствующих материалов не вызывает ошибок

Я использую Assimp 4.1.0 для загрузки файлов OBJ. Некоторые файлы могут ссылаться на отсутствующий файл материала, и я хотел указать материалы по умолчанию, если Assimp не найдет их должным образом.

Учитывая документацию:

aiMaterial* mat = .....
// The generic way
if(AI_SUCCESS != mat->Get(<material-key>,<where-to-store>)) {
   // handle epic failure here
}

Он должен что-то выбросить, но это не так. Он возвращает aiReturn_SUCCESS, даже если файла материала там не было. Есть ли у кого-нибудь обходной путь для этого?

Спасибо !


person Pedro Osório    schedule 06.02.2019    source источник


Ответы (1)


Когда материала в вашем примере нет, это будет тип nullptr, и ваше приложение выйдет из строя. Когда материал на основе obj не был импортирован (файл с расширением mtl), базовый материал не будет создан, я предполагаю, что этот файл материала будет использоваться для получения ключа, который вы хотите найти.

Сначала убедитесь, что вы используете правильный экземпляр материала. Тогда API будет работать так, как описано в документации по API.

Просто спросите, есть ли еще открытые вопросы. И вы получите более быстрые ответы, если будете напрямую использовать сторону проекта :-).

Ким

person KimKulling    schedule 06.02.2019
comment
Но похоже, что Assimp создает коллекцию материалов на основе тех, на которые ссылается OBJ, даже несмотря на то, что он не нашел никакого определения для этого материала (по умолчанию он равен 0,0 для окружающей среды, 0,6 для диффузных и 0,0 для зеркальных компонентов). Указатели материалов не равны нулю. Он определенно создает DefaultMaterial (с этим точным именем), с которым я могу справиться, но он также несет в себе все другие неопределенные материалы и дает собственные значения по умолчанию. - person Pedro Osório; 06.02.2019
comment
Да, в настоящий момент мы создаем материал по умолчанию. Для решения этой проблемы уже открыт отчет о проблеме. - person KimKulling; 06.02.2019