Ejemplo n.º 1
0
        public void AddGeometryData(MeshPartGeometryData data, MeshMaterial material, Matrix transform)
        {
            if (!parts.ContainsKey(material))
            {
                throw new InvalidOperationException("Material not created by the meshbuilder");
            }
            var p = parts[material];

            var xTransform = transform.xna();

            var sPositions = data.GetSourceVector3(MeshPartGeometryData.Semantic.Position);
            var sNormals   = data.GetSourceVector3(MeshPartGeometryData.Semantic.Normal);
            var sTexcoords = data.GetSourceVector2(MeshPartGeometryData.Semantic.Texcoord);

            var nPositions = new XnaVector3[sPositions.Length];
            var nNormals   = new XnaVector3[sNormals.Length];
            var nTexcoords = sTexcoords;

            XnaVector3.Transform(sPositions, ref xTransform, nPositions);
            XnaVector3.TransformNormal(sNormals, ref xTransform, nNormals);

            p.Positions.AddRange(nPositions);
            p.Normals.AddRange(nNormals);
            p.Texcoords.AddRange(nTexcoords);
        }