我正在制作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
我有一些建议可以帮助您入门:
在学校的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我希望你的汽车模型的原点在汽车的中心,否则它仍然会奇怪地移动。
| 归档时间: |
|
| 查看次数: |
3283 次 |
| 最近记录: |