Как загрузить текстуры и материалы с помощью Helix 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);


    }

person Dot Net Developer    schedule 01.09.2015    source источник


Ответы (1)


на самом деле Helix делает это по умолчанию, по крайней мере, для файлов .obj. В вашем файле .obj должна быть строка вида

mtllib File02.mtl

где File02.mtl — имя файла вашего материала. helix вызывает затем метод LoadMaterialLib, который считывает файл .mtl, указанный после mtllib. Просто убедитесь, что этот файл .mtl существует и его имя не было изменено. Возможно, вы изменили имена файлов .obj и .mtl, но внутри файла .obj параметр mtllib остался неизменным.

person andc    schedule 11.04.2016
comment
Это точно моя проблема. Aghh я не мог видеть, я изменил имя файла. Спасибо за этот ответ. - person Demir; 25.03.2020