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

@ -80,6 +80,7 @@ Nazara Engine:
- Dual-stack sockets are now supported (by using NetProtocol_Any at creation/opening)
- Fixed IPv6 addresses not being correctly encoded/decoded from the socket API.
- Fix copy and move semantic on HandledObject and ObjectHandle
- Add support for emissive and normal maps in .mtl loader using custom keywords ([map_]emissive and [map_]normal)
Nazara Development Kit:
- Added ImageWidget (#139)

View File

@ -45,6 +45,8 @@ namespace Nz
String decalMap;
String diffuseMap;
String displacementMap;
String emissiveMap; //< <!> Custom addition: not present in MTL
String normalMap; //< <!> Custom addition: not present in MTL
String reflectionMap;
String shininessMap;
String specularMap;

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;