Pregunta

quiero dibujar un modelo en XNA. He Gona adelante y produje en Blender y exportados a formato de archivo FBX por lo que el contenido de la tubería puede trabajar con él. ¿Qué código debo añadir al método draw () de mi WindowsGame ()? He intentado lo siguiente pero lo único que consigo es una pantalla gris (Gray no azul, que es el color claro, que conste) El modelo se importa con content.Load, y esto arroja ningún error, y lo he llamado "Bowl" .

Puede alguien decir a mi por qué esto aquí no va a funcionar?

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

He he dado cuenta de que esto es equivalente a asesinar en términos de eficiencia, pero lo he intentado muchas cosas, yo sólo lo necesito para trabajar antes de optimizarlo.

¿Fue útil?

Solución

Un tema muy común cuando primero tratando de hacer que algo es que la cámara no está mirando a lo que creo que está mirando. Otro posible problema es que el modelo no es a una escala que era de esperar. Así, por ejemplo, si la cámara es de 5 unidades de nuevo en la z, pero el modelo es de 10 unidades de ancho, su cámara es efectiva dentro del modelo.

En cuanto a la cuestión de representación va, Microsoft tiene muy buenos doctores en esto: http://msdn.microsoft.com/en-us/library/bb203933.aspx

Puede utilizar este fragmento como un ayudante:

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();
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top