「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 形式に関する正しい公式ドキュメントを見つけることができませんでした (Wikipedia またはチュートリアルにあるものだけが公式で完全なものではありません)。
すべてのキーワードが説明されている Wavefront MTL および OBJ 形式に関する公式ドキュメントは存在しますか?
そうでない場合、法線テクスチャとディスプレイスメント テクスチャのキーワードを知っている人はいますか?