2D костная система

Я пытаюсь написать систему 2D Bone в XNA.

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

«Круто», — подумал я, а затем ужас ударил меня по лицу, когда я увидел, что матрицы можно применять только к одному пакету спрайтов.

Я провел несколько тестов производительности, чтобы проверить, было ли мое беспокойство заслуженным, и это было так, вызов spritebatch.Begin и End несколько раз снижает мою частоту кадров на огромную (и неприемлемую) величину.

Итак, прежде чем рисовать изображение одной кости, мне придется создать его конечное положение и поворот (и, возможно, масштабировать в будущем) вручную. В этом случае вы бы по-прежнему использовали матрицы и каким-то образом извлекали информацию в конце непосредственно перед рисованием кости? Если да, то какие идеи о том, как получить окончательную информацию, которая мне нужна? Или было бы проще попытаться построить все это из необработанных позиций и поворотов его родительских узлов?

Заранее спасибо всем, у кого есть идеи.


person Sekhat    schedule 21.03.2009    source источник


Ответы (2)


Честно говоря, я бы отказался от объекта рендеринга Sprite и переключился на квадраты экранного пространства. Нет никаких искусственных ограничений для четырехугольников экранного пространства, и вы можете использовать стандартную реализацию костных систем: перемещаться по дереву, применяя преобразования по мере продвижения, а затем выталкивать их, когда вы двигаетесь обратно вверх по дереву.

person Ron Warholic    schedule 21.03.2009

В любом случае, матрицы не являются излишними, когда вы работаете в 2D? Я имею в виду 16 скалярных умножений для каждого произведения матрицы-вектора, когда вы можете обойтись 4 умножениями для вращения и 2 суммирования для перевода?

person Cecil Has a Name    schedule 27.03.2009