如何使用Helix ToolKit加载纹理和材质?

时间:2015-09-01 06:16:58

标签: wpf helix-3d-toolkit

我正在尝试加载3d obj文件或3ds文件,它已加载

但遗憾的是我无法加载.mtl文件或任何纹理

任何构思/示例代码如何加载.mtl文件或纹理?

---> 3D模型已加载但为灰色

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);


    }

1 个答案:

答案 0 :(得分:0)

实际上,helix默认至少为.obj文件执行。 在你的.obj文件中必须有一行像

mtllib File02.mtl

其中File02.mtl是您的材料文件名。 helix调用LoadMaterialLib方法,该方法读取mtllib之后指定的.mtl文件。请确保此.mtl文件存在且其名称未更改。也许您更改了.obj和.mtl文件名,但在.obj文件中,mtllib参数保持不变。