Вопрос

Я хочу нарисовать модель в XNA.Я пошел дальше и создал его в Blender и экспортировал в формат файла fbx, чтобы конвейер контента мог с ним работать.Какой код мне следует добавить в метод Draw() моей WindowsGame()?Я пробовал следующее, но все, что я получаю, это серый экран (серый, а не синий, который является чистым цветом, заметьте). Модель импортирована с контентом. Загрузка, и это не вызывает ошибок, и я назвал ее «Чаша». .

Может ли кто-нибудь сказать мне, почему это здесь не сработает?

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

Я только что заметил, что с точки зрения эффективности это эквивалентно убийству, но я перепробовал очень много вещей, мне просто нужно, чтобы это работало, прежде чем я его оптимизирую.

Это было полезно?

Решение

Очень распространенная проблема при первой попытке рендеринга заключается в том, что камера смотрит не на то, на что вы думаете.Другая возможная проблема заключается в том, что модель не соответствует ожидаемому масштабу.Например, если камера находится на расстоянии 5 единиц от оси z, но ширина модели составляет 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();
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top