private static List <GeometryModel3D> GetModel(ModelRenderSet renderSet, Model model) { var geoModels = new List <GeometryModel3D>(); try { foreach (var groupKV in renderSet.Geometry.ModelPrimitiveGroups) { var group = groupKV.Value; var material = GetMaterial(group, model); if (material.Children.Count == 0) { continue; } var mesh = GetMesh(renderSet, group); var geoModel = new GeometryModel3D(); ModelViewModel.SetModel(geoModel, model); geoModel.Geometry = mesh; geoModel.Material = material; if (model.Type == Model.ModelType.Collision) { geoModel.BackMaterial = material; } geoModel.Freeze(); geoModels.Add(geoModel); } } catch (Exception) { Trace.WriteLine(string.Format("{0} can't render this group.", renderSet.Geometry.ModelPrimitiveGroups[0].Material.Fx)); } return(geoModels); }
private static MeshGeometry3D GetMesh(ModelRenderSet renderSet, ModelPrimitiveGroup group) { var mesh = new MeshGeometry3D(); mesh.Positions = renderSet.Geometry.Positions; mesh.TextureCoordinates = renderSet.Geometry.TextureCoordinates; mesh.Normals = renderSet.Geometry.Normals; if (!group.Sectioned) { mesh.TriangleIndices = renderSet.Geometry.TriangleIndices; } else //一般用来显示装甲 { var primitive = renderSet.Geometry.TriangleIndices .Where((v, i) => i >= group.StartIndex && i < group.EndIndex * 3); mesh.TriangleIndices = new Int32Collection(primitive); } return(mesh); }