Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }