Я работаю над простым проектом OpenGL, и я новичок в C ++. Я медленно добавлял функции к очень простому примитивному «движку» 3D и работал над тем, чтобы он компилировался на кроссплатформенности.
У меня есть файл 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 и раньше не мог загружать текстуры. Может быть как я его компилирую?
Что мне следует предпринять, чтобы решить эту проблему? Я использую gcc на Ubuntu и clang на OSX.