Я работаю над простым проектом OpenGL, и я новичок в C ++. Я медленно добавлял функции к очень простому примитивному трехмерному «движку» и работал над тем, чтобы он компилировался кроссплатформенным.
У меня есть файл make, который я запускаю для OSX и Linux (Ubuntu), а для Windows У меня есть файл решения Visual Studio, модифицированный для работы со структурой каталогов проекта.
Каждый раз, когда я делаю изменения, я проверяю компиляцию и тестирование на каждой платформе, и это было здорово, пока я не добавил поддержку моделей загрузки с использованием Assimp. Точнее говоря, загрузка моделей прошла нормально, но загрузка текстур - это то, что вызвало проблему, а точнее - чтение имени файла текстуры.
Особенность в том, что этот код на самом деле работает и правильно компилируется на всех платформах, на которые я нацеливаюсь: Linux (Ubuntu), OSX и Windows 10 - за исключением того, что в Ubuntu (и только в Ubuntu ) объект aiString
из Assimp, похоже, не возвращает имя файла текстуры.
Это фрагмент кода, который я сузил до того, что действительно отображает мою проблему:
aiString path;
mat->GetTexture(aiTextureType_DIFFUSE, 0, &path);
fprintf(stderr, "Loading texture '%s'...\n", path.data);
std::string full_path = _model_load_path + std::string(path.C_Str());
fprintf(stderr, "Full path: '%s'\n", full_path.c_str());
Это вывод в OSX и Windows 10:
Loading texture 'glass_dif.png'...
Full path: 'resources/meshes/nanosuit/glass_dif.png'
Это вывод в Ubuntu:
Loading texture ''...
Full path: 'resources/meshes/nanosuit/'
Конечно, текстуры загружены и применены к модель правильная в OSX и Windows 10, но не в Ubuntu. Все остальное, кажется, работает, включая загрузку модели (она просто отображается в черном цвете, поскольку шейдер не может сэмплировать цвет текстуры).
Единственное, о чем я могу думать, - это версия, которую я установил, libassimp-dev
, то есть 4 против 5 в OSX. Но я скептически отношусь к v4 и до этого не мог загружать текстуры. Может ли быть так, как я это компилирую?
Что я должен начать изучать, чтобы устранить это? Я использую G cc на Ubuntu и Clang на OSX.