Я объединил Libreiry «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 со всеми ключевыми словами, объясненными внутри?
Если это не тот, кто знает ключевые слова для нормальной и смещающей текстуры?
Ok. Спасибо. Итак, какой формат вы можете мне предложить? – user1364743
Зависит от того, с чем вам удобно и что вы хотите импортировать. Collada разработан как очень гибкий формат 3D-обмена. –