Domanda

Voglio disegnare un modello in XNA. Ho gona avanti e prodotta in Blender ed esportato a FBX formato di file in modo che il Pipeline contenuti possono lavorare con esso. Quale codice devo aggiungere al metodo draw () della mia WindowsGame ()? Ho provato quanto segue ma tutto quello che ottiene è uno schermo grigio (grigio non blu, che è il colore chiaro, si badi bene) Il modello viene importato con content.Load, e questo getta nessun errore, e ho chiamato "Bowl" .

Chiunque può dire al mio perché questo qui non funziona?

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);
        }

Ho appena notato che questo equivale a uccidere in termini di efficienza, ma ho provato tante cose, ho solo bisogno di lavorare prima di ottimizzarlo.

È stato utile?

Soluzione

Un problema molto comune quando il primo tentativo di rendere qualcosa è che la fotocamera non sta guardando quello che pensi che sta guardando. Un altro possibile problema è che il modello non è in una scala che ci si aspetterebbe. Così, per esempio, se la fotocamera è di 5 unità di nuovo sulla z, ma il modello è largo 10 unità, la fotocamera è in modo efficace all'interno del modello.

Per quanto riguarda la domanda di rappresentazione va, Microsoft ha abbastanza buona documentazione su questo: http://msdn.microsoft.com/en-us/library/bb203933.aspx

È possibile utilizzare questo frammento come aiutante:

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();
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top