public void LoadMDLFile(MDL.MDLFile mdlfile) { CurrentMatrix = Matrix3D.Identity; _mdlFile = mdlfile; ClearViewport(); SetCamera(); myModel = ConvertMDL(_mdlFile); this.mainViewport.Children.Add(myModel); DefaultRotate(); }
private ModelVisual3D ConvertMDL(MDL.MDLFile _mdlFile) { ModelVisual3D newmodel = new ModelVisual3D(); Model3DGroup model = new Model3DGroup(); List<MDL.MDLObject> meshes = new List<MDL.MDLObject>(); if (_mdlFile.RootObject.Count(x => x.type == MDL.MDLType.mdl_group) > 0) { meshes = _mdlFile.RootObject.Where(x => x.type == MDL.MDLType.mdl_group).First().childrens.Where(x => x.type == MDL.MDLType.mdl_mesh).ToList(); } else { meshes = _mdlFile.RootObject.Where(x => x.type == MDL.MDLType.mdl_mesh).ToList(); } IOrderedEnumerable<MDL.MDLObject> orderedMeshes = meshes.OrderBy(x => -x.mesh.nfaces); for (int itemindex = 0; itemindex < orderedMeshes.Count(); itemindex++) { MDL.MDLObject item = meshes[itemindex]; if (item.lodval < 1 || orderedMeshes.Count() == 1 ) { MeshGeometry3D mesh = new MeshGeometry3D(); for (int i = 0; i < item.mesh.vertices.Count(); i++) { mesh.Positions.Add(new Point3D(item.mesh.vertices[i].x, item.mesh.vertices[i].y, item.mesh.vertices[i].z)); mesh.TextureCoordinates.Add(new Point(item.mesh.vertices[i].mx, item.mesh.vertices[i].my)); Vector3D normal = new Vector3D(item.mesh.vertices[i].nx, item.mesh.vertices[i].ny, item.mesh.vertices[i].nz); mesh.Normals.Add(normal); } _bounds = mesh.Bounds; for (int i = item.mesh.faces.Count() - 1; i > -1; i--) { mesh.TriangleIndices.Add(item.mesh.faces[i]); } if (_textures.Count > 0) 0 && item.textidx > -1) { ImageBrush ib = new ImageBrush(); int textureIndex = item.textidx; if (textureIndex < 0) textureIndex = 0; ib.ImageSource = loadBitmap(_textures[textureIndex]); Material diffuse1 = new DiffuseMaterial(ib); Material spec1 = new SpecularMaterial(ib, 40); MaterialGroup matGroup = new MaterialGroup(); matGroup.Children.Add(diffuse1); matGroup.Children.Add(spec1); GeometryModel3D gmodel = new GeometryModel3D(mesh, matGroup); model.Children.Add(gmodel); } else { Material material = new DiffuseMaterial(new SolidColorBrush(Colors.Gray)); GeometryModel3D gmodel = new GeometryModel3D(mesh, material); model.Children.Add(gmodel); } } }
public void LoadMDLFile(MDL.MDLFile currentBinaryMDL, List<System.Drawing.Bitmap> referencedImages) { _textures = referencedImages; LoadMDLFile(currentBinaryMDL); }