Я использую Assimp для загрузки в модель для рендеринга в OpenGL (модель представляет собой .obj Стэнфордского кролика, только с информацией о положении вершины, без текстурных координат или нормалей). Я установил флаги постобработки так, чтобы Assimp генерировал гладкие нормали и вычислял тангенты / битангенсы. Тем не менее, хотя я могу нормально обращаться к массиву нормалей, я получаю segfault, когда пытаюсь получить доступ к массиву касательных.
Вот код, который я использую для чтения файла, и все мои флаги постобработки:
const aiScene* scene = importer.ReadFile(filename,
aiProcess_JoinIdenticalVertices |
aiProcess_Triangulate |
aiProcess_GenSmoothNormals |
aiProcess_CalcTangentSpace |
//aiProcess_RemoveComponent (remove colors) |
aiProcess_LimitBoneWeights |
aiProcess_ImproveCacheLocality |
aiProcess_RemoveRedundantMaterials |
aiProcess_GenUVCoords |
aiProcess_SortByPType |
aiProcess_FindDegenerates |
aiProcess_FindInvalidData |
aiProcess_FindInstances |
aiProcess_ValidateDataStructure |
aiProcess_OptimizeMeshes |
aiProcess_OptimizeGraph |
aiProcess_Debone |
0);
И вот где я терплю крушение:
vert.normal.x = mesh->mNormals[j].x; // This runs fine
vert.normal.y = mesh->mNormals[j].y;
vert.normal.z = mesh->mNormals[j].z;
vert.tangent.x = mesh->mTangents[j].x; // I crash here
vert.tangent.y = mesh->mTangents[j].y;
vert.tangent.z = mesh->mTangents[j].z;
Очевидно, что это не в состоянии создать касательные, хотя я говорю это.
Я пытался использовать importer.ApplyPostProcessing()
вычислить касательные после того, как файл прочитан, а остальные шаги выполнены, так что у него есть нормали для вычисления касательных, но я получаю тот же результат.
Задача ещё не решена.
Других решений пока нет …