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

hak*_*kam 5 c# 3d xna

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

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

我试图改变这样的代码:

 effect.World = Matrix.CreateRotationZ(modelRotation) *  effect.World = Matrix.CreateTranslation(position); 
Run Code Online (Sandbox Code Playgroud)

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

 effect.World = Matrix.CreateTranslation(position) * Matrix.CreateRotationZ(modelRotation); 
                effect.View = camera.View; 
                effect.Projection = camera.Projection;
Run Code Online (Sandbox Code Playgroud)

小智 3

我有一些建议可以帮助您入门:

  1. DirectX/Xna 中的矩阵乘法顺序与您在学校学到的不同。

在学校的v = A B y意思是:v = A (B y)。因此,在链接矩阵时,首先应用 B。

如果你想组合矩阵 A 和 B,你可以将它们相乘C = A B

在 Directx/XNA 中,顺序相反。要组合矩阵 B 和 A,您可以编写var C = B * A;

为了防止我犯错误,我采用了命名约定:每个矩阵(或变换)被称为AtoB: WorldToView, ModelToWorld, 或ModelToRotatedModel

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

  var modelToView = modelToWorld * worldToView; 
Run Code Online (Sandbox Code Playgroud)

并不是:

  var nowhereToNowhere = worldToView * modelToWorld; 
Run Code Online (Sandbox Code Playgroud)

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

PS我希望你的汽车模型的原点在汽车的中心,否则它仍然会奇怪地移动。