Esempio n. 1
0
 void SoftSkin(Matrix4[] preBound)
 {
     // Apply skinning on all subSets
     for (int iSubSet = 0; iSubSet < data.Length; iSubSet++)
     {
         SubSetData ssData = data[iSubSet];
         if (ssData != null)
         {
             VertexUnit         vu  = mesh.SubSets[iSubSet].VertexUnit;
             PositionStream     ps  = (PositionStream)vu[typeof(PositionStream)];
             IBoneIndicesStream bis = (IBoneIndicesStream)vu[typeof(IBoneIndicesStream)];
             IBoneWeightsStream bws = (IBoneWeightsStream)vu[typeof(IBoneWeightsStream)];
             // currently just the position stream is skinned!
             Skinning.SoftSkin(ps, ssData.Position, bis, bws, preBound, Shadowed);
             ps.Upload();
         }
     }
 }
Esempio n. 2
0
        private SubSetData CreateSubSetData(SubSet subSet)
        {
            VertexUnit vu = subSet.VertexUnit;

            if (!vu.Format.Contains(Semantic.BoneIndices) ||
                !vu.Format.Contains(Semantic.BoneIndices) ||
                !vu.Format.Contains(Semantic.Position))
            {
                return(null);
            }

            SubSetData     ssData    = new SubSetData();
            PositionStream posStream = (PositionStream)vu[typeof(PositionStream)];

            ssData.Position = (Vector3[])posStream.Data.Clone();
            if (vu.Format.Contains(typeof(NormalStream)))
            {
                NormalStream normalStream = (NormalStream)vu[typeof(NormalStream)];
                ssData.Normal = (Vector3[])normalStream.Data.Clone();
            }

            return(ssData);
        }