求助.net下绘制骨骼动画的问题
我的源代码和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);处抛出异常,望高手指教
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);处抛出异常,望高手指教
...全文
相关推荐
OpenGL 3D骨骼动画模型读取绘制Demo(基于Assimp)
该项目实现了一个3D骨骼动画模型的读取与渲染Demo,使用OpenGL进行图形绘制,结合Assimp库解析模型数据,支持MD5Mesh格式。项目基于VB.NET开发,利用OpenTK进行窗口与上下文管
Flash骨骼动画源文件.rar
文件名为“codesc.net”,可能是该资源的原始来源或者是项目的名字。
3Ds_MAX骨骼动画导出插件编写
**性能优化**:骨骼动画数据的导出需考虑效率问题,避免冗余数据和不必要的计算,以提高导出速度和减少内存占用。3.
骨骼动画演示程序
----------------------------------------------欢迎来我的小站进行骨骼动画的讨论,地址是:http://blog.cs
java3D骨骼动画
通过阅读提供的链接(<http://www.blogjava.net/chensiyu04/articles/215243.html>),可以获取更多关于如何在实际项目中使用这些概念的详细信息。


