Utility/OBJLoader: Add support for emissive/normal maps by using custom keywords

This commit is contained in:
Lynix
2018-04-04 21:30:59 +02:00
parent 31c272ab98
commit 05a5c4c42e
4 changed files with 47 additions and 0 deletions

View File

@@ -251,6 +251,32 @@ namespace Nz
currentMaterial->reflectionMap = map;
}
}
else if (keyword == "map_normal" || keyword == "normal")
{
// <!> This is a custom keyword
std::size_t mapPos = m_currentLine.GetWordPosition(1);
if (mapPos != String::npos)
{
String map = m_currentLine.SubString(mapPos);
if (!currentMaterial)
currentMaterial = AddMaterial("default");
currentMaterial->normalMap = map;
}
}
else if (keyword == "map_emissive" || keyword == "emissive")
{
// <!> This is a custom keyword
std::size_t mapPos = m_currentLine.GetWordPosition(1);
if (mapPos != String::npos)
{
String map = m_currentLine.SubString(mapPos);
if (!currentMaterial)
currentMaterial = AddMaterial("default");
currentMaterial->emissiveMap = map;
}
}
else if (keyword == "newmtl")
{
String materialName = m_currentLine.SubString(m_currentLine.GetWordPosition(1));

View File

@@ -107,6 +107,24 @@ namespace Nz
data.SetParameter(MaterialData::DiffuseTexturePath, fullPath);
}
if (!mtlMat->emissiveMap.IsEmpty())
{
String fullPath = mtlMat->emissiveMap;
if (!Nz::File::IsAbsolute(fullPath))
fullPath.Prepend(baseDir);
data.SetParameter(MaterialData::EmissiveTexturePath, fullPath);
}
if (!mtlMat->normalMap.IsEmpty())
{
String fullPath = mtlMat->normalMap;
if (!Nz::File::IsAbsolute(fullPath))
fullPath.Prepend(baseDir);
data.SetParameter(MaterialData::NormalTexturePath, fullPath);
}
if (!mtlMat->specularMap.IsEmpty())
{
String fullPath = mtlMat->specularMap;