如何围绕自己的轴旋转ModelMesh?

时间:2014-02-17 12:32:52

标签: matrix xna rotation local axis

我有一个汽车模型,车身是分开的,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(金额)。如何在自己的轴上旋转轮子。我现在只测试1轮,而不是全部

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我有点想出了问题,但我无法解决。 FBX文件包含车身和4个车轮。车轮放置在他们认为在FBX文件中的位置,在XNA中它们被绘制在它们的位置,并且车辆原点也是车轮的原点,因此当它们旋转时,它们围绕该原点旋转。我通过移动车轮的矢量并向中心手动尝试找出汽车原点的位置,旋转车轮并将其移回原位。喜欢这个

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

我首先需要将轮胎移动到汽车的中心,旋转并将其转换回其位置。试图手动弄清楚这不是给我一个确切的位置所以有一种方法来解决汽车中心的位置?使用carMatrix.Translation只是让轮胎围绕汽车而不是它的外面旋转。