1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| private void DrawMeshContainer(AnimationMeshContainer mesh, AnimationFrame parent)
{
//Etape 1
if (mesh.SkinInformation != null)
{
//Etape2a
if (mesh.NumberInfluences == 1)
device.RenderState.VertexBlend = VertexBlend.ZeroWeights;
else
device.RenderState.VertexBlend = (VertexBlend)(mesh.NumberInfluences - 1);
if (mesh.NumberInfluences > 0)
device.RenderState.IndexedVertexBlendEnable = true;
//Etape3a
BoneCombination[] bones = mesh.GetBones();
//Etape4a
for (int iAttrib = 0; iAttrib < mesh.NumberAttributes; iAttrib++)
{
for (int iPaletteEntry = 0; iPaletteEntry < mesh.NumberPaletteEntries;
++iPaletteEntry)
{
int iMatrixIndex = bones[iAttrib].BoneId[iPaletteEntry];
if (iMatrixIndex != -1)
{
device.Transform.SetWorldMatrixByIndex(iPaletteEntry,
mesh.GetOffsetMatrices()[iMatrixIndex] *
mesh.GetFrames()[iMatrixIndex].
CombinedTransformationMatrix);
}
}
//Etape5a
device.Material = mesh.GetMaterials()[bones[iAttrib].AttributeId].Material3D;
device.SetTexture(0, mesh.GetTextures()[bones[iAttrib].AttributeId]);
//Etape6a
mesh.MeshData.Mesh.DrawSubset(iAttrib);
}
}
else
//Etape2b
{
//Cette partie du code n'est appelée que pour les mesh sans info de skins ce qui n'est pas le cas ici.
}
} |
Partager