Esempio n. 1
0
        /// <summary>
        /// Create a new packmesh container
        /// </summary>
        /// <returns>The newly created container</returns>
        ///
        public override MeshContainer CreateMeshContainer(string name,
                                                          MeshData meshData, ExtendedMaterial[] materials,
                                                          EffectInstance effectInstances, GraphicsStream adjacency,
                                                          SkinInformation skinInfo)
        {
            // We only handle meshes here
            if (meshData.Mesh == null)
            {
                throw new ArgumentException();
            }

            // We must have a vertex format packmesh
            if (meshData.Mesh.VertexFormat == VertexFormats.None)
            {
                throw new ArgumentException();
            }

            Packmesh packmesh = new Packmesh();

            packmesh.Name = name;
            int    numFaces = meshData.Mesh.NumberFaces;
            Device dev      = meshData.Mesh.Device;

            // Make sure there are normals
            if ((meshData.Mesh.VertexFormat & VertexFormats.Normal) == 0)
            {
                // Clone the packmesh
                Mesh tempMesh = meshData.Mesh.Clone(meshData.Mesh.Options.Value,
                                                    meshData.Mesh.VertexFormat | VertexFormats.Normal, dev);

                meshData.Mesh = tempMesh;
                meshData.Mesh.ComputeNormals();
            }

            // Store the materials
            packmesh.SetMaterials(materials);
            packmesh.SetAdjacency(adjacency);
            Texture[] texturas = new Texture[materials.Length];

            // Create any textures
            for (int i = 0; i < materials.Length; i++)
            {
                if (materials[i].TextureFilename != null)
                {
                    texturas[i] = TextureLoader.FromFile(dev, @"..\..\" +
                                                         materials[i].TextureFilename);
                }
            }
            packmesh.SetTextures(texturas);
            packmesh.MeshData = meshData;

            // If there is skinning info, save any required data
            if (skinInfo != null)
            {
                packmesh.SkinInformation = skinInfo;
                int      nOssos         = skinInfo.NumberBones;
                Matrix[] offsetMatrices = new Matrix[nOssos];

                for (int i = 0; i < nOssos; i++)
                {
                    offsetMatrices[i] = skinInfo.GetBoneOffsetMatrix(i);
                }

                packmesh.SetOffsetMatrices(offsetMatrices);

                app.gerarModeloElastico(packmesh);
            }

            return(packmesh);
        }