我正在使用 Assimp 加载模型以在 OpenGL 中渲染(模型是 stanford bunny 的 .obj,只有顶点位置信息,没有纹理坐标或法线)。我设置了后处理标志,以便 Assimp 生成平滑法线并计算切线/双切线。但是,虽然我可以很好地访问法线数组,但当我尝试访问切线数组时会出现段错误。
这是我用来读取文件的代码,以及我所有的后处理标志:
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()
来计算切线,以便它有法线来计算切线,但我得到了相同的结果。