如何围绕其中心旋转3D模型?

时间:2011-07-29 17:48:17

标签: c# 3d xna

我正在制作一款3D汽车游戏,我对旋转有问题。 我想围绕自己旋转模型,但是当我移动时,它开始移动 世界 !

问题是:如何让模型的中心移动?

我试图像这样更改代码:

 effect.World = Matrix.CreateRotationZ(modelRotation) *  effect.World = Matrix.CreateTranslation(position); 

现在不是相对于模型向前移动,而是朝着设定的方向移动! &安培;这是我的代码:

 effect.World = Matrix.CreateTranslation(position) * Matrix.CreateRotationZ(modelRotation); 
                effect.View = camera.View; 
                effect.Projection = camera.Projection;

2 个答案:

答案 0 :(得分:3)

我有一些提示可以帮助您入门:

  1. DirectX / Xna中的矩阵乘法顺序与您在学校学到的不同。
  2. 在学校v = A B y意思是:v = A (B y)。因此,当链接矩阵时,首先应用B.

    如果要组合矩阵A和B,则将它们乘以C = A B

    在Directx / XNA中,订单相反。要组合矩阵B和A,请编写var C = B * A;

    为了阻止我犯错,我采用了命名约定:每个矩阵(或变换)都称为AtoBWorldToViewModelToWorldModelToRotatedModel。< / p>

    这提醒您第一个矩阵的输出必须与右矩阵的输入匹配:

      var modelToView = modelToWorld * worldToView; 
    

    而不是:

      var nowhereToNowhere = worldToView * modelToWorld; 
    

    这对我帮助很大,我希望它可以帮助你解决矩阵问题。

    P.S。 我希望你的汽车模型的起源位于汽车的中心,否则它仍会奇怪地移动。

答案 1 :(得分:3)

尝试切换这些值:

effect.World = Matrix.CreateTranslation(position) * Matrix.CreateRotationZ(modelRotation);

所以它变成了:

effect.World = Matrix.CreateRotationZ(modelRotation) * Matrix.CreateTranslation(position);

我遵循一个名为ISROT

的简单首字母缩略词
  

身份

     

比例

     

轮换

     

方向

     

翻译

你从右到左工作,所以你总是用Translation结束你的陈述。

相关问题