Pergunta

Eu quero desenhar um modelo no XNA. Eu tenho gona frente e produziu em Blender e exportados para FBX File Format para que o Content Pipeline pode trabalhar com ele. O código que eu deveria adicionar ao método draw () da minha WindowsGame ()? Eu tentei o seguinte, mas tudo que eu vejo é uma tela cinza (Grey não Azul, que é a cor clara, você mente) O modelo é importado com content.Load, e este lança nenhum erro, e eu chamei-o "Bowl" .

Alguém pode me dizer porque isso aqui não vai 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);
        }

Eu só notei que este é equivalente ao assassinato em termos de eficiência, mas eu tentei tantas coisas, eu só preciso dele para trabalho antes de otimizá-lo.

Foi útil?

Solução

Um problema muito comum quando pela primeira vez a tentar tornar algo é que a câmara não está olhando para o que você acha que ele está olhando. Outro possível problema é que o modelo não é em uma escala que você esperaria. Assim, por exemplo, se a câmera é de 5 unidades de volta no z, mas o modelo é de 10 unidades de largura, sua câmera é efetivamente dentro do modelo.

Quanto à questão rendendo vai, a Microsoft tem muito boas docs sobre isso: http://msdn.microsoft.com/en-us/library/bb203933.aspx

Você pode usar esse trecho como um auxiliar:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top