示例#1
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);
        }
示例#2
0
        private static MaterialGroup GetMaterial(ModelPrimitiveGroup group, Model model)
        {
            MaterialGroup material = new MaterialGroup();


            for (int i = group.Material.Propertys.Count - 1; i >= 0; --i)
            {
                var property = group.Material.Propertys[i];
                {
                    if (property.Name == "diffuseMap")
                    {
                        var diffusePath = new PackageFileInfo(property.Texture);

                        if (model.Type == Model.ModelType.Collision)
                        {
                            var armor      = model.ArmorObject.Armor;
                            var armorValue = (byte)armor.GetArmorValue(group.Material.Identifier);

                            var rgb = waveLengthToRGB(armorValue + 410);

                            var diffuse = new DiffuseMaterial();

                            var diffuseBrush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(255, 0, 0, 0));
                            diffuse.Brush        = diffuseBrush;
                            diffuse.Color        = Colors.Black;
                            diffuse.AmbientColor = Colors.Black;
                            material.Children.Add(diffuse);

                            var emissive = new EmissiveMaterial();

                            var emissiveBrush = new ImageBrush();
                            SetImageSource(emissiveBrush, diffusePath);
                            emissiveBrush.TileMode      = TileMode.Tile;
                            emissiveBrush.ViewportUnits = BrushMappingMode.Absolute;
                            emissive.Brush = emissiveBrush;
                            material.Children.Add(emissive);
                        }
                        else
                        {
                            var        diffuse      = new DiffuseMaterial();
                            ImageBrush diffuseBrush = new ImageBrush();
                            SetImageSource(diffuseBrush, diffusePath);
                            diffuseBrush.TileMode      = TileMode.Tile;
                            diffuseBrush.ViewportUnits = BrushMappingMode.Absolute;
                            diffuse.Brush = diffuseBrush;
                            material.Children.Add(diffuse);
                        }
                    }
                    else if (property.Name == "specularMap")
                    {
                        var specularPath = new PackageFileInfo(property.Texture);
                        var specular     = new SpecularMaterial();

                        ImageBrush specularBrush = new ImageBrush();
                        SetImageSource(specularBrush, specularPath);
                        specularBrush.TileMode      = TileMode.Tile;
                        specularBrush.ViewportUnits = BrushMappingMode.Absolute;
                        specular.Brush         = specularBrush;
                        specular.SpecularPower = 20;
                        material.Children.Add(specular);
                    }
                }
            }
            return(material);
        }