我在没有skinnedprocessor的xna框架中使用fbx文件格式。
我关注了this之类的一些关于个体骨骼旋转或平移的帖子,用于在人体中创建手势。我使用XNA样本显示fbx模型,我甚至能够左右移动全身。
现在我的问题是我编写了一个用于旋转一些有效骨骼的代码,但只显示了普通模型,而不是带有旋转骨骼9的模型。
这段代码是用skinnedmodelprocessor.cs编写的 的 的
的 List<Matrix> bindPose = new List<Matrix>();
List<Matrix> inverseBindPose = new List<Matrix>();
List<int> skeletonHierarchy = new List<int>();
foreach (BoneContent bone in bones)
{
bindPose.Add(bone.Transform);
inverseBindPose.Add(Matrix.Invert(bone.AbsoluteTransform));
skeletonHierarchy.Add(bones.IndexOf(bone.Parent as BoneContent));
}
//code for updating the position of a particular bone
int idbone = 9;
bindPose[idbone] = bindPose[idbone]*Matrix.CreateRotationX(MathHelper.ToRadians(45.0f));
的 这是我的绘制方法 protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); 的
的 Matrix[] bones = animationPlayer.GetSkinTransforms();
Matrix view = Matrix.CreateTranslation(0, -40, 0) * Matrix.CreateRotationY(MathHelper.ToRadians(camerarotation))
* Matrix.CreateRotationX(MathHelper.ToRadians(cameraArc))
* Matrix.CreateLookAt(new Vector3(0, 0, -cameraArc), new Vector3(0, 0, 0), Vector3.Up);
Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, GraphicsDevice.Viewport.AspectRatio, 1, 10000);
//Looping over multiple meshes
foreach (ModelMesh mesh in firstmodel.Meshes)
{
foreach (SkinnedEffect effect in mesh.Effects)
{
effect.SetBoneTransforms(bones);
effect.EnableDefaultLighting();
effect.World = worldtransformations[mesh.ParentBone.Index];
effect.View = view;
effect.Projection = projection;
effect.SpecularColor = new Vector3(0.25f);
effect.SpecularPower = 16;
}
mesh.Draw();
}
}
的 它看起来像是搞砸了。
我有三个型号的第一和第三个模型错误弹出“没有皮肤数据”,但我加载了一切(纹理,更改内容处理器)。
第二个模型只是给了空白屏幕。