Assimp 模型有纹理但没有纹理坐标
Posted
技术标签:
【中文标题】Assimp 模型有纹理但没有纹理坐标【英文标题】:Assimp model has Textures but no Texture Coordinates 【发布时间】:2013-05-01 17:58:48 【问题描述】:我正在使用 Assimp 将 3D 模型加载到我的程序中。到目前为止,一切都变得很花哨,除了我遇到了一个似乎没有意义的 Lightwave 对象。当然它在 Lightwave 中渲染得很好,但在 Assimp 中没有纹理坐标,没有 UV 坐标,但纹理最终会被加载。但这无济于事——它们只是停留在内存中,永远不会被使用,因为——你猜对了——没有纹理坐标。
到目前为止,我还没有找到任何有用的 Assimp 页面。其他模型加载良好并且经过适当的纹理映射。这是 Assimp 的问题吗?
【问题讨论】:
【参考方案1】:所有 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 坐标没有任何用处。您必须自己添加。
希望这还不算晚!
【讨论】:
我没有大量的模型,但至少有一个发生了这种情况。【参考方案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 );
希望对您有所帮助!我也卡在这里了!以为它没有加载...
现在: Tex(0.159871,0.410298,0.000000)Tex(0.034839,0.369741,0.000000)Tex(0.147435,0.506447,0.000000)Tex(0.018893,0.493014,0.000000)Tex(0.159871,0.602596,0.000000)Tex(0.034839,0.616288,0.000000)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)
【讨论】:
其实可能是meth->mNumUVComponents...抱歉!以上是关于Assimp 模型有纹理但没有纹理坐标的主要内容,如果未能解决你的问题,请参考以下文章