5

我正在使用 Assimp 将 3D 模型加载到我的程序中。到目前为止,一切都变得很花哨,除了我遇到了一个似乎没有意义的 Lightwave 对象。当然它在 Lightwave 中渲染得很好,但在 Assimp 中没有纹理坐标,没有 UV 坐标,但纹理最终会被加载。但这无济于事——它们只是存在于内存中,永远不会被使用,因为——你猜对了——没有纹理坐标。

到目前为止,我还没有找到任何有用的 Assimp 页面。其他模型加载良好并且经过适当的纹理映射。这是 Assimp 的问题吗?

4

2 回答 2

5

所有 Lightwave 型号都会发生这种情况,还是仅此一种?您的程序是否正确渲染其他模型?

我也遇到了和你一样的问题,使用 assimp 读取 OBJ 文件(而不是 Lightwave 数据文件)并在 OpenGL 中渲染。我的渲染器完全是从 assimp 网站上的示例复制而来的。我对我的渲染器进行了一些调查,发现我没有任何代码可以使用 UV!所以,我补充说

if( mesh->mTextureCoords[0] != NULL ) {
    glTexCoord2fv( &mesh->mTextureCoords[0][index].x );
}

就在我画一个顶点之前,在哪里

int index = face->mIndices[i];

i 是 for 循环的循环控制变量。

问题:在 assimp 网站上找到的渲染代码对 UV 坐标没有任何用处。你必须自己添加。

希望这还不算晚!

于 2013-07-05T03:30:15.870 回答
2

有8个纹理坐标槽...每个可以填充不同的纹理...你只需要检查第一个

网格->mTextureCoords[0]

将其转换为类似“const struct aiVector3D*”的数组并循环遍历索引 mTextureCoords[0][t]

注意我们循环 t 和它的一个二维数组

    for (t = 0; t < mesh->mNumVertices; ++t) {
        const struct aiVector3D* textureVec = &mesh->mTextureCoords[0][t];
        printf("tex (%f,%f,%f)", textureVec->x, textureVec->y, textureVec->z );
    }

希望能帮助到你!我也卡在这里了!以为没有加载...

NOW:TEX(0.159871,0.410298,000000)Tex(0.034839,0.369741,0.000000000000000000000000000000000000000000000000000000000000000000个)Tex(0.147435,0.50647,0.0.00000000000000000000000000000000000000000000000000000000000000000000个) tex (0.196806,0.695823,0.000000)tex (0.082196,0.735817,0.000000)tex (0.257118,0.783297,0.000000)tex (0.159520,0.847968,0.000000)tex (0.314932,0.833907,0.000000)tex (0.318555,0.981848,0.000000)tex ( 0.554152,0.373114,0.000000)tex (0.557998,0.677465,0.000000)tex (0.442610,0.703479,0.000000)

于 2016-09-18T14:41:25.623 回答