2009-06-09 8 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()ではレンダリングが遅くなります。代わりにそれをグローバル変数として持ち、Initialize() - d。 –

答えて

5

最初に何かをレンダリングしようとしたときに本当によくある問題は、カメラがあなたが見ていると思っているものを見ていないということです。別の可能性のある問題は、モデルがあなたが期待する規模ではないということです。例えば、カメラがz上に5ユニット戻っていて、モデルの幅が10ユニットの場合、カメラは事実上モデルの内側にあります。

は限りレンダリング疑問が行くように、Microsoftはこの上かなり良いドキュメントを持っています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

+0

はい実際には、カスタムエフェクトを使用する場合は、カスタムパイプラインでビルトインエフェクトをカスタマイズすることができます。http://blogs.msdn.com/ shawnhar/archive/2006/12/07/rendering-a-model-with-a-custom-effect.aspx –