Utility/OBJLoader: Add support for emissive/normal maps by using custom keywords
This commit is contained in:
parent
31c272ab98
commit
05a5c4c42e
|
|
@ -80,6 +80,7 @@ Nazara Engine:
|
||||||
- Dual-stack sockets are now supported (by using NetProtocol_Any at creation/opening)
|
- 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.
|
- Fixed IPv6 addresses not being correctly encoded/decoded from the socket API.
|
||||||
- Fix copy and move semantic on HandledObject and ObjectHandle
|
- 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:
|
Nazara Development Kit:
|
||||||
- Added ImageWidget (#139)
|
- Added ImageWidget (#139)
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,8 @@ namespace Nz
|
||||||
String decalMap;
|
String decalMap;
|
||||||
String diffuseMap;
|
String diffuseMap;
|
||||||
String displacementMap;
|
String displacementMap;
|
||||||
|
String emissiveMap; //< <!> Custom addition: not present in MTL
|
||||||
|
String normalMap; //< <!> Custom addition: not present in MTL
|
||||||
String reflectionMap;
|
String reflectionMap;
|
||||||
String shininessMap;
|
String shininessMap;
|
||||||
String specularMap;
|
String specularMap;
|
||||||
|
|
|
||||||
|
|
@ -251,6 +251,32 @@ namespace Nz
|
||||||
currentMaterial->reflectionMap = map;
|
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")
|
else if (keyword == "newmtl")
|
||||||
{
|
{
|
||||||
String materialName = m_currentLine.SubString(m_currentLine.GetWordPosition(1));
|
String materialName = m_currentLine.SubString(m_currentLine.GetWordPosition(1));
|
||||||
|
|
|
||||||
|
|
@ -107,6 +107,24 @@ namespace Nz
|
||||||
data.SetParameter(MaterialData::DiffuseTexturePath, fullPath);
|
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())
|
if (!mtlMat->specularMap.IsEmpty())
|
||||||
{
|
{
|
||||||
String fullPath = mtlMat->specularMap;
|
String fullPath = mtlMat->specularMap;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue