我正在使用Assimp将3D模型加载到我的程序中。到目前为止,一切都变得花花公子,除了我遇到一个似乎没有意义的Lightwave对象。当然它在Lightwave中很好地渲染,但在Assimp中没有纹理坐标,没有UV坐标,但最终会加载纹理。但这没有用 - 他们只是坐在记忆中,永远不会被使用,因为 - 你猜对了 - 没有纹理坐标。
到目前为止,我还没有找到任何有用的Assimp页面。其他模型加载精细,并正确纹理映射。这是Assimp的问题吗?
答案 0 :(得分:4)
所有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坐标没有任何用处。你必须自己添加。
希望这不是迟到的帮助!
答案 1 :(得分:1)
有8个纹理坐标槽...每个可以填充不同的纹理或不...你只需要检查第一个
mesh-> mTextureCoords [0]
将其转换为类似“const struct aiVector3D *”的数组 并遍历索引mTextureCoords [0] [t]
注意我们循环t和它的2d数组
mask = poly2mask(boundary(:,1), boundary(:,2), size(img, 1), size(img, 2));
希望它有所帮助!我也被困在这里了!以为它没有加载...
现在: 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)