我创建了一个模型在3d最大,我集中在世界..不过,当我把它放在XNA中,并通过XNA应用旋转,似乎它的旋转中心是不是在实际的对象中,而是稍微远离它,所以它看起来像对象正在旋转,而不是旋转...这是烦人的any1知道如何解决这个问题?模型旋转在XNA到3D最大似乎是错误的
回答
当您将对象置于3ds世界中时,它不会改变顶点位置。它只创建了一个矩阵,可以将顶点从他们所在的位置转换到放置它们的位置。
可能是因为经常你没有对世界原点的视觉参考&没有意识到你的模型在XNA中被抵消了,可能并不明显你没有考虑到这个矩阵。
这是通过Model.CopyAbsoluteBoneTransformsTo()将该矩阵(通过内容处理器变成“Bone”转换)放入数组中,您可以在设置effect.World时使用该矩阵。
如果听起来这可能是问题,并且您想要一个快速代码示例,请告诉我们。
只是为了扩大@Steve H公司的回答了一下,这里有几个可能的原因:
您的XNA代码,你不应用骨转换到模型。像大多数建模工具一样,Max倾向于修改模型的世界变换矩阵而不是顶点本身。变换顶点往往会引入小的浮点错误,例如,围绕z轴的1,0,0旋转的Pi/2弧度的顶点可能会变为0,0.99999,0而不是0,1,0 - 这就是浮点数学,也是在你的游戏中,你总是从源几何转换而来的原因。
Here's a link to a bone transforms example on MSDN(从v3.1开始,但有很多v4示例):请注意myModel.CopyAbsoluteBoneTransformsTo(transforms)
和effect.World
作业。这个例子是为BasicEffect
,但即使你自己的效果,你需要提取骨骼转换并应用它们。例如,如果您使用自定义着色器,则可以在模型加载时执行此操作。 (请注意,即使你还没有真正在最大模型中定义的任何骨骼骨转换是必要的。)
(从链接的MSDN文章借用)
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
// Copy any parent transforms.
Matrix[] transforms = new Matrix[myModel.Bones.Count];
myModel.CopyAbsoluteBoneTransformsTo(transforms);
// Draw the model. A model can have multiple meshes, so loop.
foreach (ModelMesh mesh in myModel.Meshes)
{
// This is where the mesh orientation is set, as well
// as our camera and projection.
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.World = transforms[mesh.ParentBone.Index] *
Matrix.CreateRotationY(modelRotation)
* Matrix.CreateTranslation(modelPosition);
effect.View = Matrix.CreateLookAt(cameraPosition,
Vector3.Zero, Vector3.Up);
effect.Projection = Matrix.CreatePerspectiveFieldOfView(
MathHelper.ToRadians(45.0f), aspectRatio,
1.0f, 10000.0f);
}
// Draw the mesh, using the effects set above.
mesh.Draw();
}
base.Draw(gameTime);
}
另一种可能性是,在Max中,对象的枢轴(所有旋转/缩放/平移变换所基于的中心)不以网格为中心。 This is easy to change。
问题是3D Studio Max中的支点不会传递给XNA。您可以整天更改枢轴点,并且骨骼变形和顶点将保持不变。它只是不能正确导出。
我有一个MAXScript在http://metlab.cse.msu.edu/xna.html修复这个问题。
Charles
- 1. 在XNA中旋转3D模型
- 2. Java/libgdx 3D模型旋转错误
- 3. 如何在XNA中正确加速旋转的3D模型?
- 4. 旋转3D模型XAML C#
- 5. Xna 4.0 3D相机和模型,旋转不能正常工作
- 6. 在C中旋转3D模型#
- 7. 从rgl/persp3d旋转时的3D模型在旋转时闪烁
- 8. centralWidget大小似乎错误?
- 9. 我无法让我的3D模型在XNA中前进,但旋转工作?
- 10. xna 3d模型破坏
- 11. 模拟3D旋转
- 12. 旋转3D模型:旋转中心的建议
- 13. 围绕绝对轴旋转3d模型
- 14. 总计似乎是错误
- 15. 如何在XNA上移动3D模型?
- 16. 3D投影的3D模型的优化旋转
- 17. 3D图形 - 矢量数学,我似乎得到一些错误
- 18. 将旋转的矩形逐渐旋转到最大旋转点
- 19. 如何在XNA中获取2D模型的3D模型?
- 20. 如何在模型中旋转XNA中的单个骨骼?
- 21. XNA Sprite旋转
- 22. 如何在其中心的XNA上旋转3D立方体?
- 23. 如何在3D模型中编写3D文本在XNA c#
- 24. XNA中的旋转
- 25. 3D数学/ 2D旋转计算:分割/切割3D模型?
- 26. 我的比较似乎是错误的
- 27. 生成的url似乎是错误的
- 28. 如何螺旋WPF自动旋转3D模型
- 29. cmsfn.inherit()似乎返回错误类型
- 30. IIFE查看模型似乎是undefined
你能显示你的代码吗?另外3DS Max使用XNA使用右手的左手坐标。您是否使用Panda Export来导出模型? – 2011-04-20 10:31:09
errr我的代码和其他模型一起工作的很好,我使用3个模型的小行星,th3第三个模型看起来不对,可能是因为它不平衡绕y轴?(变形)。我怎样才能改变右手的事情? aw和最后的东西,不,我只是通过FBX格式通过3d max导出模型。 – Martinos 2011-04-20 10:48:26