Frage

Ich möchte ein Modell in XNA ziehen. Ich habe gona voraus und produziert es in Blender und Exportiert es Dateiformat FBX so der Content Pipeline kann damit arbeiten. Welcher Code sollte ich mit dem Zeichnen () Methode meiner WindowsGame () hinzufügen? Ich habe das Folgende versucht, aber Alles, was ich bekommen ist ein grauer Bildschirm (Gray nicht Blau, die die klare Farbe ist wohlgemerkt) Das Modell ist mit content.Load importiert, und dies keinen Fehler wirft, und ich nannte es „Bowl“ .

Kann jemand sagen, meint, warum dies hier nicht funktionieren?

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

Ich habe gerade bemerkt, dass dies entspricht in Bezug auf die Effizienz zu ermorden, aber ich habe so viele Dinge ausprobiert, ich brauche es nur zu arbeiten, bevor ich es zu optimieren.

War es hilfreich?

Lösung

Ein wirklich weit verbreitetes Problem, wenn zuerst etwas zu machen versucht, ist, dass die Kamera nicht schaut, was Sie denken, es ist auf der Suche. Ein weiteres mögliches Problem ist, dass das Modell nicht auf einer Skala, die man erwarten würde. So zum Beispiel, wenn die Kamera 5 Einheiten zurück auf der z, aber das Modell ist 10 Einheiten breit, Ihre Kamera ist effektiv innerhalb des Modells.

Was die Rendering-Frage geht, Microsoft hat ziemlich gute docs auf diese: http://msdn.microsoft.com/en-us/library/bb203933.aspx

Sie können diesen Schnipsel als Helfer verwenden:

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();
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top