2009-06-09 62 views
4

我想在XNA中繪製模型。我已經收到並在Blender中生成它並將其導出爲fbx文件格式,以便內容管道可以使用它。我應該將哪些代碼添加到WindowsGame()的Draw()方法中?我嘗試了以下,但我得到的只是一個灰色屏幕(灰色不是藍色,這是清晰的顏色,介意你)該模型與content.Load一起導入,並且這不會引發錯誤,我將它稱爲「碗」 。如何使用BasicEffect在XNA中繪製模型

任何人都可以告訴我爲什麼這裏不起作用?

protected override void Draw(GameTime gameTime) 
     { 
      GraphicsDevice.Clear(Color.CornflowerBlue); 
      BasicEffect b = new BasicEffect (graphics.GraphicsDevice, new EffectPool ()); 
      foreach (ModelMesh m in Bowl.Meshes) 
      { 
       b.View = Cam.mView; 
       b.Projection = Cam.mProj; 
       b.World = mWorld; 
       b.EnableDefaultLighting (); 
       b.Begin (); 
       m.Draw (); 
       b.End (); 
      } 

      base.Draw(gameTime); 
     } 

我剛剛注意到,這相當於在效率方面謀殺罪,但我已經嘗試了這麼多東西,我只是需要它之前,我優化它的工作。

+1

只是注意:不要把「新BasicEffect ...「在Draw()中,它會減慢渲染速度。將其作爲全局變量,並將其初始化() - d。 – 2011-04-24 00:37:11

回答

5

第一次嘗試渲染某個東西時,一個非常常見的問題是相機沒有看到您認爲正在看的東西。另一個可能的問題是該模型沒有達到您所期望的規模。因此,例如,如果相機在z上有5個單位,但型號爲10個單位,則相機在模型內有效。

至於渲染問題所說,微軟對這個相當不錯的文檔:http://msdn.microsoft.com/en-us/library/bb203933.aspx

您可以使用此代碼片段作爲幫助:

private void DrawModel(Model m) 
{ 
    Matrix[] transforms = new Matrix[m.Bones.Count]; 
    float aspectRatio = graphics.GraphicsDevice.Viewport.Width/graphics.GraphicsDevice.Viewport.Height; 
    m.CopyAbsoluteBoneTransformsTo(transforms); 
    Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), 
     aspectRatio, 1.0f, 10000.0f); 
    Matrix view = Matrix.CreateLookAt(new Vector3(0.0f, 50.0f, Zoom), Vector3.Zero, Vector3.Up); 

    foreach (ModelMesh mesh in m.Meshes) 
    { 
     foreach (BasicEffect effect in mesh.Effects) 
     { 
      effect.EnableDefaultLighting(); 

      effect.View = view; 
      effect.Projection = projection; 
      effect.World = gameWorldRotation * transforms[mesh.ParentBone.Index] * Matrix.CreateTranslation(Position); 
     } 
     mesh.Draw(); 
    } 
} 
+0

在Blender中製作的任何模型中是否會自動產生基本效果 - 作爲FBX導出 - 是否在XNA中導入?這聽起來好像這個代碼會尋找一個與BasicEffect兼容的效果,我不能想到它會在哪裏找到一個,因爲我沒有添加:(:(它是否被管道自動添加?) – wsd 2009-06-09 20:13:28