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(); } } }
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); }