XNA (MonoGame) 世界空间和物体运动

Posted

技术标签:

【中文标题】XNA (MonoGame) 世界空间和物体运动【英文标题】:XNA (MonoGame) world space and object movement 【发布时间】:2012-01-03 08:21:36 【问题描述】:

我刚开始在 XNA 中进行 3D 编码,并且正在努力解决一些问题。

我使用 XNA 的目标是制作一款太空模拟游戏(我知道是原创)移动我的敌舰。我对 2d 中的转向行为做了一些有价值的事情,但不是 3d。

我的问题是:

如果我试图移动船只以“寻找”一个位置,这种移动如何影响船只的世界矩阵(如果有的话)?我正在使用vector3s,并将加速度添加到速度,然后将速度添加到位置。这是正确的方法吗?

我现在不必发帖,否则我会发帖,我只是想了解采取什么方法。

谢谢

【问题讨论】:

就速度/加速度积分而言,牛顿运动随时间 dt 在恒定加速度 a 下的正确公式是:x = x0 + v0*dt + 0.5*一个dtdt。新速度为 v = v0 + a*dt。这些方程适用于 3D 向量(其中速度和加速度本身就是向量。) 感谢您的回复,使用这个公式,我是否还需要维护一个世界矩阵,以便船只转换到世界空间,或者这不是必需的吗? 通常,您会根据演员(在本例中为船)的位置和方向构建世界矩阵。假设您正在跟踪的位置是世界位置,您只需将世界矩阵的平移部分替换为演员的位置。 好的,非常感谢,我会试试看 搞定了,感谢您的帮助 【参考方案1】:

给您的对象/实体/船一个位置(Vector3)和旋转(矩阵),然后您可以使用以下代码(以及此答案底部的示例)来移动船。

例如将船向前移动 5 个单位:

Entity myShip = new Entity();
myShip.GoForward(5.0f);

让你的船桶滚动 90 度

myShip.Roll(MathHelper.PiOver2);

这是示例代码

public class Entity

    Vector3 position = Vector3.Zero;
    Matrix rotation = Matrix.Identity;

    public void Yaw(float amount)
    
       rotation *= Matrix.CreateFromAxisAngle(rotation.Up, amount);
    

    public void YawAroundWorldUp(float amount)
    
       rotation *= Matrix.CreateRotationY(amount);
    

    public void Pitch(float amount)
    
       rotation *= Matrix.CreateFromAxisAngle(rotation.Right, amount);
    

    public void Roll(float amount)
    
       rotation *= Matrix.CreateFromAxisAngle(rotation.Forward, amount);
    

    public void Strafe(float amount)
    
       position += rotation.Right * amount;
    

    public void GoForward(float amount)
    
       position += rotation.Forward * amount;
    

    public void Jump(float amount)
    
       position += rotation.Up * amount;
    

    public void Rise(float amount)
    
       position += Vector3.Up * amount;
    

【讨论】:

以上是关于XNA (MonoGame) 世界空间和物体运动的主要内容,如果未能解决你的问题,请参考以下文章

无法理解在 monogame/xna 中“发布”代码的工作原理

XNA,Monogame;有没有XACT的替代品?

使用 FNA-XNA(或MonoGame) 框架和 Nez 引擎开发游戏 (目录)

使用 XNA/Monogame 从 spritesheet 中绘制一个 sprite

MonoGame / XNA在Spritebatch中绘制多边形

在XNA / Monogame中使用Ray的视线