2012-01-12 78 views
0

我有一個包含多個對象的場景。我怎樣才能將它導入到xna中並且指導每個對象的位置?現在我出口的場景.FBX並在這樣的模型加載:在xna中導入場景

cube.model = contentManager.Load<Model>("cub"); 

但對象不保留自己的立場,並都聚集在一個點上。

我需要一個方法來導入所有的對象作爲單獨的對象,但保留在場景中的對象位置?

(即我需要進口的一幕讓我可以操縱的對象,並保留在場景中的位置,這樣我不應該由我自己重新定位的所有對象)

回答

1

每個對象的場景位置都在fbx中。獲取和實現它的方法是創建一個矩陣數組來保存每個對象相對於場景原點的變換,然後在繪製時間期間爲每個對象設置效果.World時使用適當的變換。

//class variables 
Matrix[] objectTransforms; 

//LoadContent section 
cube.model = contentManager.Load<Model>("cub"); 
objectTransforms = new Matrix[cube.model.Bones.Count]; 
cube.model.CopyAbsoluteTransformsTo(objectTransforms);// the magic is done here 

//draw method 
foreach(ModelMesh mm in cube.model.Meshes) 
{ 
foreach (BasicEffect bfx in mm.Effects) 
{ 
    bfx.World = objectTransforms[mm.ParentBone.Index] * whateverLocalTransformYouWant; 
    //draw here 
} 
} 

不使用「objectTransforms」的所有對象將與位於世界座標系原點,這聽起來像你正在經歷其本地起源的結論。

0

我個人做了一個關卡編輯器的我的遊戲中的大部分事情,但我確實有一個與其他模型鏈接的大型場景。這樣我就可以在攪拌機中安排所有關卡。當我導出每個單獨的作品時,它保留的是全球的位置並在遊戲中正確導入。我會說這個問題存在於你的fbx導出器中。應該有一個選項來保存位置。

你使用的是什麼建模程序?如果您使用攪拌機,那麼您應該使用專門爲XNA製作的fbx導出程序集。