2012-07-03 51 views
0

我有一個平臺模型,它上面有一個炮塔。炮塔有兩個桶,我正在試圖從桶中射出子彈。XNA中網格的偏移

炮塔本身是包含在模型中的網格。我能夠通過操縱ModelBone.Transform矩陣像這樣旋轉炮塔:

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

其中theModel表示整個模型(平臺+炮塔),turretBone是ModelBone代表炮塔和turretMatrix代表一個4x4 XNA矩陣,用於描述轉盤的旋轉,使其面向玩家。

這部分工作完美。現在

,我想從炮塔的桶尖火子彈。出於某種原因,我無法確定barrells的提示位置是什麼,以便我將它用作子彈的始發位置。

火的方向是確定的,因爲我用turretBone.Transform.Down的方向。 (我知道向上/向下/等是相對的,但想像在俯視射擊遊戲中炮彈向下朝向玩家,即在XNA 2D中增加Y)。

我明白turretBone.Transform是相對於其父,是否正確?所以,如果我想將100個單位向右移動400個單位,我需要做什麼?

我試圖做這樣的事情:

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

從炮塔(其中位置是整個模型的位置)向下移動900個單位的權利和400個單位。

這雖然不起作用;它在桶的頂端正確地開始,但是當它旋轉時,它並不完全遵循它)。

我想到另一個解決方案在桶的頂端在世界空間將兩個小球並以某種方式獲得它們的座標放置有子彈的起始位置。任何想法如何做到這一點?

謝謝!

回答

0

我已經解決了使用第二種方法(具有放置在球體桶的尖端)的問題。

Matrix world = transforms[sphereBone.Index] * any_other_transformation_applied 

打完電話後

theModel.CopyAbsoluteBoneTransformsTo(transforms); 

的伎倆。

謝謝。