private void LoadMaterialLib(string mtlFile)
{
var path = Path.Combine(this.TexturePath, mtlFile);
if (!File.Exists(path))
{
return;
}
using (var materialReader = new StreamReader(path))
{
MaterialDefinition currentMaterial = null;
while (!materialReader.EndOfStream)
{
var line = materialReader.ReadLine();
if (line == null)
{
break;
}
line = line.Trim();
if (line.StartsWith("#") || line.Length == 0)
{
continue;
}
string keyword, value;
SplitLine(line, out keyword, out value);
switch (keyword.ToLower())
{
case "newmtl":
if (value != null)
{
currentMaterial = new MaterialDefinition(value);
this.Materials.Add(value, currentMaterial);
}
break;
case "ka":
if (currentMaterial != null && value != null)
{
currentMaterial.Ambient = ColorParse(value);
}
break;
case "kd":
if (currentMaterial != null && value != null)
{
currentMaterial.Diffuse = ColorParse(value);
}
break;
case "ks":
if (currentMaterial != null && value != null)
{
currentMaterial.Specular = ColorParse(value);
}
break;
case "ns":
if (currentMaterial != null && value != null)
{
currentMaterial.SpecularCoefficient = DoubleParse(value);
}
break;
case "d":
if (currentMaterial != null && value != null)
{
currentMaterial.Dissolved = DoubleParse(value);
}
break;
case "tr":
if (!this.SkipTransparencyValues && currentMaterial != null && value != null)
{
currentMaterial.Dissolved = DoubleParse(value);
}
break;
case "illum":
if (currentMaterial != null && value != null)
{
currentMaterial.Illumination = int.Parse(value);
}
break;
case "map_ka":
if (currentMaterial != null)
{
currentMaterial.AmbientMap = value;
}
break;
case "map_kd":
if (currentMaterial != null)
{
currentMaterial.DiffuseMap = value;
}
break;
case "map_ks":
if (currentMaterial != null)
{
currentMaterial.SpecularMap = value;
}
break;
case "map_d":
if (currentMaterial != null)
{
currentMaterial.AlphaMap = value;
}
break;
case "map_bump":
case "bump":
if (currentMaterial != null)
{
currentMaterial.BumpMap = value;
}
break;
}
}
}
}