Я интегрировал библиотеку «Assimp» для загрузки компонентов файлов OBJ/MTL.
Все работает корректно.
Но давайте сосредоточимся на следующем примере файла MTL:
# Blender MTL File: 'plane.blend'
# Material Count: 1
newmtl PlaneMtl
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ni 1.000000
d 1.000000
illum 2
map_Ka ambient_texture.jpg
map_Kd diffuse_texture.jpg
map_Ks specular_texture.jpg
map_Bump bump_texture.jpg
И давайте рассмотрим следующий код:
aiMesh *pMesh = scene->mMeshes[idz];
aiMaterial *pMaterial = scene->mMaterials[pMesh->mMaterialIndex];
aiString ambient_texture_path, diffuse_texture_path, specular_texture_path, bump_texture_path;
pMaterial->GetTexture(aiTextureType_AMBIENT, 0, &ambient_texture_path);
pMaterial->GetTexture(aiTextureType_DIFFUSE, 0, &diffuse_texture_path);
pMaterial->GetTexture(aiTextureType_SPECULAR, 0, &specular_texture_path);
pMaterial->GetTexture(aiTextureType_HEIGHT, 0, &bump_texture_path);
std::cout << "AmbientTexture: " << ambient_texture_path.C_Str() << std::endl;
std::cout << "DiffuseTexture: " << diffuse_texture_path.C_Str() << std::endl;
std::cout << "SpecularTexture: " << specular_texture_path.C_Str() << std::endl;
std::cout << "BumpTexture: " << bump_texture_path.C_Str() << std::endl;
Вот результат:
ambient_texture.jpg
diffuse_texture.jpg
specular_texture.jpg
bump_texture.jpg
Как видите, все работает отлично, а ключевые слова 'map_Ka, map_Kd, map_Ks и map_Bump' относятся к картам объемного, диффузного, зеркального отражения и рельефа (высоты) соответственно. Так что эти ключевые слова верны.
Но как насчет текстуры нормалей (для отображения нормалей) и текстуры смещения (для отображения смещения)?
Я попытался добавить следующие строки в свой файл MTL для проверки:
map_Normal normal_texture.jpg
map_Disp disp_texture.jpg
используя код:
aiString normal_texture_path, displacement_texture_path;
pMaterial->GetTexture(aiTextureType_NORMALS, 0, &normal_texture_path);
pMaterial->GetTexture(aiTextureType_DISPLACEMENT, 0, &displacement_texture_path);
std::cout << "NormalTexture: " << normal_texture_path.C_Str() << std::endl;
std::cout << "DispTexture: " << displacement_texture_path.C_Str() << std::endl;
и вывод:
NormalTexture:
DispTexture:
Таким образом, ключевые слова «map_Normal» и «map_Disp» неверны и поэтому не являются частью документации Wavefront MTL.
Я не смог найти правильную и официальную документацию по формату WaveFront MTL (только в Википедии или туториалах нет ничего официального и полного).
Существует ли официальная документация по формату Wavefront MTL и OBJ со всеми ключевыми словами, описанными в ней?
Если это не так, кто-нибудь знает ключевые слова для нормальной текстуры и текстуры смещения?