我发现每个网格都有textureCoords形式的纹理Coords [i] [j]其中“i”是顶点ID,“j”是纹理channelID,表示使用了来自材质的特定纹理。
我知道我可以使用material-> GetTexture(aiTextureType_DIFFUSE,n,& texturePath)查找网格所使用的纹理,但是如何获得channelID并且我理解“j”对于channelID是否正确?
答案 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;
}