Hi @Chrisss50,
Thanks for your help, I have another question that how to load texture path for FBX file in C++?
In your example, I do not know how to get these two texture file path in C++:
I can load texture path of OBJ file successfully by using my ImportMesh.cpp:
////materail
FString diffusePath = "", normalPath = "", metalnessPath = "", specularPath = "";
UMaterialInterface* ParentMaterail = LoadObject<UMaterialInterface>(NULL, TEXT("Material'/Game/test/NewMaterial.NewMaterial'"));
UMaterialInstanceDynamic* sectionmaterial = UMaterialInstanceDynamic::Create(ParentMaterail, nullptr);
bool isValid;
int32 texWidth, texHeight;
auto materialInstance = scene->mMaterials[mesh->mMaterialIndex];
if (materialInstance->GetTextureCount(aiTextureType_DIFFUSE) > 0) {
aiString tempTexturePath;
FString TempTexturePath;
materialInstance->GetTexture(aiTextureType_DIFFUSE, 0, &tempTexturePath);
TempTexturePath = FString(tempTexturePath.C_Str());
FString n1, n2;
bool splitRes1 = FilePath.Split("/", &n1, &n2, ESearchCase::IgnoreCase, ESearchDir::FromEnd);
diffusePath = n1 + "/" + TempTexturePath;
UTexture2D* textureParam = LoadTexture2DFromFile(diffusePath, isValid, texWidth, texHeight);
sectionmaterial->SetTextureParameterValue(FName("Param"), textureParam);
}
else {
UE_LOG(LogTemp, Warning, TEXT("no diffusePath"));
}
if (materialInstance->GetTextureCount(aiTextureType_NORMALS) > 0) {
aiString tempTexturePath;
FString TempTexturePath;
materialInstance->GetTexture(aiTextureType_NORMALS, 0, &tempTexturePath);
TempTexturePath = FString(tempTexturePath.C_Str());
FString n1, n2;
bool splitRes1 = FilePath.Split("/", &n1, &n2, ESearchCase::IgnoreCase, ESearchDir::FromEnd);
normalPath = n1 + "/" + TempTexturePath;
UTexture2D* textureParam = LoadTexture2DFromFile(normalPath, isValid, texWidth, texHeight);
sectionmaterial->SetTextureParameterValue(FName("Param"), textureParam);
}
else {
UE_LOG(LogTemp, Warning, TEXT("no normalPath"));
}
if (materialInstance->GetTextureCount(aiTextureType_METALNESS) > 0) {
aiString tempTexturePath;
FString TempTexturePath;
materialInstance->GetTexture(aiTextureType_METALNESS, 0, &tempTexturePath);
TempTexturePath = FString(tempTexturePath.C_Str());
FString n1, n2;
bool splitRes1 = FilePath.Split("/", &n1, &n2, ESearchCase::IgnoreCase, ESearchDir::FromEnd);
metalnessPath = n1 + "/" + TempTexturePath;
UTexture2D* textureParam = LoadTexture2DFromFile(metalnessPath, isValid, texWidth, texHeight);
sectionmaterial->SetTextureParameterValue(FName("Param"), textureParam);
}
else {
UE_LOG(LogTemp, Warning, TEXT("no metalnessPath"));
}
if (materialInstance->GetTextureCount(aiTextureType_SPECULAR) > 0) {
aiString tempTexturePath;
FString TempTexturePath;
materialInstance->GetTexture(aiTextureType_SPECULAR, 0, &tempTexturePath);
TempTexturePath = FString(tempTexturePath.C_Str());
FString n1, n2;
bool splitRes1 = FilePath.Split("/", &n1, &n2, ESearchCase::IgnoreCase, ESearchDir::FromEnd);
specularPath = n1 + "/" + TempTexturePath;
UTexture2D* textureParam = LoadTexture2DFromFile(specularPath, isValid, texWidth, texHeight);
sectionmaterial->SetTextureParameterValue(FName("Param"), textureParam);
}
else {
UE_LOG(LogTemp, Warning, TEXT("no specularPath"));
}
But when I tried to load FBX file of your example, I could not load texture successfully with these error message: