为什么assimp无法产生切线?

时间:2014-03-08 23:03:26

标签: c++ opengl assimp

我正在使用Assimp加载模型以在OpenGL中渲染(模型是stanford兔子的.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()来计算读取文件后的切线以及其他步骤是否完整,以便使用法线计算切线,但得到相同的结果。

0 个答案:

没有答案