none
XNA поворот части модели RRS feed

  • Вопрос

  • Есть модель кубик-рубик. Нужно осуществить поворот верхней ( или нижней) части модели на 90 градусов, т.е. вращать одновременно несколько костей относительно оси центральной кости. Помогите или подскажите литературу.
    16 марта 2012 г. 6:36

Ответы

  • Проблему с перемещениями решил, теперь кубики просто поворачиваются на 90 градусов вокруг своей оси, создавая эффект будто произошел поворот всей части куба. При этом столкнулся вот с такой проблемой. В 3D Max кубик вращается вокруг своей оси, а в программе он не только вращается, но и перемещается, отрываясь от куба.
    Вот код поворота одного кубика:

    cube.model.Bones[1].Transform = cube.model.Bones[1].Transform *
                    Matrix.CreateRotationZ(MathHelper.ToRadians(90));

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

    UPD:
    Нашел решение в (CreateRotation * CreateTranslation) с указанием вектора вручную для каждого кубика. Для моей модели, которая в пространстве не перемещается подходит, но муторно и чувствую, что есть способ и попроще).

    21 марта 2012 г. 4:24

Все ответы

  • Добрый день.

    Если я правильно понял, вас интересует скелетная анимация в XNA.

    Mesh Animation via Bones   статья + исходник

    Skinned Mesh Character Animation Programming   3 урока на базе стандартной демки которая кочует из версии в версию DirectX SDK + к каждому уроку исходник

    16 марта 2012 г. 13:47
  • Спасибо! С анимацией разобрался, худо-бедно. А дальше хуже. Нужно получить координаты конкретного bone, чтобы понимать требуется его двигать или нет. Подскажите пожалуйста как можно получить координаты bone, или нужен другой подход.
    17 марта 2012 г. 7:32
  • Для такой задачи скелетная анимация, скорее всего, не сработает. Так как элементы постоянно вращаются в разных плоскостях.

    Предлагаю самому сделать моделку в коде из цветных вершинок. (ну соответственно будем хранить координаты кадого кубика (или 3х3 массив цветов) и всегда будем знать, что и как можно вращать.) так все должно получиться просто.

    20 марта 2012 г. 12:54
  • Проблему с перемещениями решил, теперь кубики просто поворачиваются на 90 градусов вокруг своей оси, создавая эффект будто произошел поворот всей части куба. При этом столкнулся вот с такой проблемой. В 3D Max кубик вращается вокруг своей оси, а в программе он не только вращается, но и перемещается, отрываясь от куба.
    Вот код поворота одного кубика:

    cube.model.Bones[1].Transform = cube.model.Bones[1].Transform *
                    Matrix.CreateRotationZ(MathHelper.ToRadians(90));

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

    UPD:
    Нашел решение в (CreateRotation * CreateTranslation) с указанием вектора вручную для каждого кубика. Для моей модели, которая в пространстве не перемещается подходит, но муторно и чувствую, что есть способ и попроще).

    21 марта 2012 г. 4:24