【问题标题】:Offset of a mesh in XNAXNA 中网格的偏移
【发布时间】:2012-07-03 21:51:59
【问题描述】:

我有一个平台模型,上面装有炮塔。炮塔有两个枪管,我正在尝试从枪管中发射子弹。

炮塔本身是模型中包含的网格。我可以通过像这样操作 ModelBone.Transform 矩阵来旋转炮塔:

turretBone.Transform = Matrix.CreateRotationX(3.14f /2f) * turretMatrix * Matrix.CreateTranslation(turretBone.Transform.Translation);
theModel.CopyAbsoluteBoneTransformsTo(transforms);

其中theModel代表整个模型(平台+炮塔),turretBone是代表炮塔的ModelBone,turretMatrix代表一个4x4 XNA矩阵描述炮塔的旋转,使其面向玩家。

这部分工作得很好。

现在,我想从炮塔的枪管尖端发射一颗子弹。由于某种原因,我无法确定枪管尖端的位置,因此我将其用作子弹的起始位置。

火的方向没问题,因为我使用 turretBone.Transform.Down 作为方向。 (我知道 up/down/etc 是相对的,但将 Down 想象成在顶视图射击游戏中,枪管朝玩家射击,即在 XNA 2D 中增加 Y)。

我知道 turretBone.Transform 是相对于其父级的,对吗?那么,如果我想向右移动 100 个单位,向下移动 400 个单位,我该怎么办?

我尝试过这样做:

Position + turretBone.Translation + turretBone.Transform.Right * 900f + turretBone.Transform.Down * 400f

从炮塔向右移动 900 个单位,向下移动 400 个单位(其中 Position 是整个模型的位置)。

但这不起作用;它从桶的顶端正确地开始,但随着它的旋转,它并没有完全跟随它)。

我想到了另一种解决方案,在枪管的尖端添加两个小球体,并以某种方式获取它们在世界空间中的坐标,从而将子弹的起始位置放置在那里。知道该怎么做吗?

谢谢!

【问题讨论】:

    标签: 3d xna offset mesh


    【解决方案1】:

    我已经使用第二种方法(将球体放置在桶的顶端)解决了这个问题。

    Matrix world = transforms[sphereBone.Index] * any_other_transformation_applied
    

    调用后

    theModel.CopyAbsoluteBoneTransformsTo(transforms);
    

    成功了。

    谢谢。

    【讨论】:

      猜你喜欢
      • 2017-08-30
      • 2016-05-27
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      相关资源
      最近更新 更多