Reputation: 198
I am trying to load 3d obj files or 3ds file, it's loaded
but unfortunately I am not able to load .mtl files or any textures
Any Idea/sample code how to load .mtl files or textures?
---> The 3D models is loaded but in gray color
public void load3dModel()
{
ObjReader CurrentHelixObjReader = new ObjReader();
// Model3DGroup MyModel = CurrentHelixObjReader.Read(@"D:\3DModel\dinosaur_FBX\dinosaur.fbx");
// Model3DGroup MyModel = CurrentHelixObjReader.Read(@"C:\Users\aaa\Downloads\jlb4kmi4xssg-iphone6model\iphone_6_model.FBX");
Model3DGroup model = null;
string path = @"C:\Users\aaa\Downloads\jlb4kmi4xssg-iphone6model\note4.obj";
string ext = System.IO.Path.GetExtension(path).ToLower();
switch (ext)
{
case ".3ds":
{
var r = new StudioReader();
model = r.Read(path);
break;
}
case ".fbx":
{
var r = new HelixToolkit.Wpf.ObjReader();
model = r.Read(path);
break;
}
case ".lwo":
{
var r = new HelixToolkit.Wpf.LwoReader();
model = r.Read(path);
break;
}
case ".obj":
{
var r = new HelixToolkit.Wpf.ObjReader();
model = r.Read(path);
//Material matty = (MaterialGroup)((GeometryModel3D)model.Children[0]).Material;
//Material myMaterial = MaterialHelper.CreateImageMaterial(@"C:\Users\aaa\Downloads\jlb4kmi4xssg-iphone6model\sam-scrn.jpg", 1);
// Material anotherMaterial = ((GeometryModel3D)model.Children[0]).Material;
// Newmodel.Children.Add(new GeometryModel3D { Geometry = anotherMaterial, Material = myMaterial });
break;
}
case ".objz":
{
var r = new HelixToolkit.Wpf.ObjReader();
model = r.ReadZ(path);
break;
}
case ".stl":
{
var r = new HelixToolkit.Wpf.StLReader();
model = r.Read(path);
break;
}
case ".off":
{
var r = new HelixToolkit.Wpf.OffReader();
model = r.Read(path);
break;
}
default:
throw new InvalidOperationException("File format not supported.");
}
Newmodel.Content = model;
//MyModel.Children.Add(MyModel);
}
Upvotes: 0
Views: 4513
Reputation: 161
actually helix do it by default at least for .obj files. In your .obj file there must be a line like
mtllib File02.mtl
where File02.mtl is your material file name. helix calls then LoadMaterialLib method, which reads the .mtl file specified after mtllib. Just be sure this .mtl file exists and his name was not changed. Perhaps you changed both .obj and .mtl filenames, but inside of the .obj file the mtllib parameter remained unchanged.
Upvotes: 1