如何从Assimp中的材质中获取纹理通道ID?

时间:2016-08-21 11:38:03

标签: 3d assimp

我发现每个网格都有textureCoords形式的纹理Coords [i] [j]其中“i”是顶点ID,“j”是纹理channelID,表示使用了来自材质的特定纹理。

我知道我可以使用material-> GetTexture(aiTextureType_DIFFUSE,n,& texturePath)查找网格所使用的纹理,但是如何获得channelID并且我理解“j”对于channelID是否正确?

2 个答案:

答案 0 :(得分:1)

您可以直接从材质中读取纹理路径。

if(material->GetTextureCount(aiTextureType_DIFFUSE) > 0) {
    aiString path;
    material->GetTexture(aiTextureType_DIFFUSE, 0, &path);
    printf("Diffuse Texture: %s\n", path.data.c_str());
}

纹理坐标:

if(aiM->mTextureCoords[0])
    for (int j = 0; j < aiM->mNumVertices; j++)
        vd.texCoord1 = Vector2(aiM->mTextureCoords[0][j].x, aiM->mTextureCoords[0][j].y);

答案 1 :(得分:0)

您可以使用AI_MATKEY_UVWSRC获得纹理的channelID(如果已明确定义)。

// gets channelID for 0th Diffuse texture
int uvChannel = -1;
if (aiReturn_SUCCESS == material->Get(AI_MATKEY_UVWSRC(aiTextureType::aiTextureType_DIFFUSE, 0), uvChannel)) {
    std::cout << "uvChannel: " << uvChannel << std::endl;
} else {
    std::cout << "uvChannel: Not defined" << std::endl;
}

记录在“ How to map UV channels to textures (MATKEY_UVWSRC)”上。