【问题标题】:How do I rotate a ModelMesh around its own axis?如何围绕自己的轴旋转模型网格?
【发布时间】:2014-02-17 12:32:51
【问题描述】:

我有一个汽车模型,车身是分开的,4 个轮胎是分开的,但它们在同一个 FBX 文件中。我可以旋转车身及其工作,但轮胎不会绕自己的轴旋转。

foreach (BasicEffect effect in carModel.Meshes[0].Effects) 
            { 
                effect.EnableDefaultLighting(); 
                effect.World = transforms[carModel.Meshes[0].ParentBone.Index] * carWorldMatrix; 
                effect.Projection = camera.projectionMatrix; 
                effect.View = camera.viewMatrix; 
            } 
            carModel.Meshes[0].Draw(); 

            foreach (BasicEffect effect in carModel.Meshes[1].Effects) 
            { 
                effect.EnableDefaultLighting(); 
                effect.World = transforms[carModel.Meshes[1].ParentBone.Index] * tireMatrix; 
                effect.Projection = camera.projectionMatrix; 
                effect.View = camera.viewMatrix; 
            } 
            carModel.Meshes[1].Draw(); 

要创建旋转,我只是使用 Matrix.CreateRotationY(amount)。我怎样才能在自己的轴上旋转轮子。我现在只是在测试 1 个轮子,并不是所有的轮子

【问题讨论】:

    标签: matrix xna rotation local axis


    【解决方案1】:

    我假设您的tireMatrix 是您提到的Matrix.CreateRotationY(amount)。如果是这样,你应该像这样实现它来绘制网格[1]:

    effect.World = tireMatrix * transforms[carModel.Meshes[1].ParentBone.Index] * carWorld;
    

    【讨论】:

    • 它不起作用。轮胎跟随汽车旋转,但不是绕着自己的轴旋转,而是围绕汽车旋转。
    • 这可能是因为您选择了 Matrix.CreateRotationY 而不是 Maatrix.CreateRotationX ... 或 Z。只有您才能知道轮子围绕哪个轴旋转。自从你提出 Y 旋转后,我就认为你已经接受了
    • 我想出了问题,但我无法解决。 FBX 文件包含车身和 4 个轮子。车轮放置在它们应该在 FBX 文件中的位置,在 XNA 中它们被绘制在它们的位置,汽车原点也是车轮的原点,因此当它们旋转时,它们围绕该原点旋转。我手动尝试通过将车轮的矢量移动到中心来确定汽车的原点,然后旋转车轮并将其移回原位。
    【解决方案2】:

    我有点想通了,但我无法解决它。 FBX 文件包含车身和 4 个轮子。车轮放置在它们应该在 FBX 文件中的位置,在 XNA 中它们被绘制在它们的位置,汽车原点也是车轮的原点,因此当它们旋转时,它们围绕该原点旋转。我手动尝试通过将车轮的矢量移动到中心来确定汽车的原点,旋转车轮并将其移回原位。像这样

    tireMatrix = Matrix.CreateTranslation(carOrigin) * 
                 Matrix.CreateRotationY(rotAmount) * 
                 Matrix.CreateTranslation(tirePos);
    

    我首先需要将轮胎移动到汽车的中心,旋转它并将其平移回原来的位置。试图手动找出这个并没有给我确切的位置,所以有没有一种方法可以计算出汽车的中心在哪里?使用 carMatrix.Translation 只是让轮胎围绕汽车旋转,而不是它的位置。

    【讨论】:

      猜你喜欢
      • 2012-09-29
      • 2023-03-07
      • 1970-01-01
      • 2017-10-13
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      相关资源
      最近更新 更多