求助.net下绘制骨骼动画的问题

d3ddx 2006-05-01 09:29:39
我的源代码和directxSDk上的动画实例基本一样但运行时会在
private void DrawMeshContainer(AnimationMeshContainer mesh, AnimationFrame parent)
{
// first check for skinning
if (mesh.SkinInformation != null)
{
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;

BoneCombination[] bones = mesh.GetBones();

for (int iAttrib = 0; iAttrib < mesh.NumberAttributes; iAttrib++)
{
// first, get world matrices
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);

}
}

// Setup the material
device.Material = mesh.GetMaterials()[bones[iAttrib].AttributeId].Material3D;
device.SetTexture(0, mesh.GetTextures()[bones[iAttrib].AttributeId]);

// Finally draw the subset
Mesh x = mesh.MeshData.Mesh;
x.DrawSubset(iAttrib);
}
}
else
{
// Standard mesh, just draw it using FF
device.RenderState.VertexBlend = VertexBlend.Disable;

// Set up transforms
device.Transform.World = parent.CombinedTransformationMatrix;

ExtendedMaterial[] materials = mesh.GetMaterials();
for (int i = 0; i < materials.Length; ++i)
{
device.Material = materials[i].Material3D;
device.SetTexture(0, mesh.GetTextures()[i]);
mesh.MeshData.Mesh.DrawSubset(i);
}
}
}的 Mesh x = mesh.MeshData.Mesh;
x.DrawSubset(iAttrib);处抛出异常,望高手指教
...全文
84 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧