You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

访问Assimp纹理坐标数据时OpenGL应用崩溃问题如何解决?

问题原因

你犯了Assimp纹理坐标访问的典型索引顺序错误:

  • aiMesh的mTextureCoords成员的第一维索引是纹理通道序号,范围是0到AI_MAX_NUMBER_OF_TEXTURECOORDS - 1(默认值为8),第二维索引才是顶点序号。

你的代码把顶点序号写在了第一维,当循环变量i超过纹理通道最大数量时,直接访问了越界的非法内存,所以打印完第一个顶点(i=0,刚好对应有效0号纹理通道)后就会崩溃。另外没有提前校验对应纹理通道是否存在数据,即使索引写对,碰到没有UV信息的模型也会触发空指针访问崩溃。

解决方法

先调用HasTextureCoords方法校验对应通道的纹理坐标是否存在,再修正索引顺序访问即可,正确代码示例:

// 先校验0号纹理通道是否存在UV数据
if (mMesh->HasTextureCoords(0)) {
    for (int i = 0; i < mMesh->mNumVertices; i++) {
        // 第一维是纹理通道序号,第二维是顶点序号
        std::cout << mMesh->mTextureCoords[0][i].x << " " << mMesh->mTextureCoords[0][i].y << std::endl;
    }
}

内容的提问来源于stack exchange,提问作者Extorc Productions

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:27:05