【发布时间】: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 是整个模型的位置)。
但这不起作用;它从桶的顶端正确地开始,但随着它的旋转,它并没有完全跟随它)。
我想到了另一种解决方案,在枪管的尖端添加两个小球体,并以某种方式获取它们在世界空间中的坐标,从而将子弹的起始位置放置在那里。知道该怎么做吗?
谢谢!
【问题讨论】: