Ogre3D: вращение относительно пользовательской центральной точки
Я пытаюсь повернуть узел вокруг пользовательской центральной точки в Ogre3D, но я не могу найти способ сделать это. Я изучил кватернионы и матрицы, но, похоже, они не выполняют то, что я пытаюсь сделать (но, если честно, я не совсем уверен, что полностью их понимаю).
Рисунок ниже иллюстрирует то, что я хочу ("дверь" в стене, если смотреть сверху). "o" представляет центральную точку (шарнир), "x" дверь, "=" стену.
- Original position
- What I get: What I want:
== x x o x x == == x o x x x ==
- After a 90 degree clockwise rotation:
- What I get: What I want:
x
x x
== o == == o ==
x x
x x
x
2 ответа
Если речь идет об объекте, который вы хотите всегда вращать вокруг одной и той же точки (например, двери), самый простой способ - изменить точку поворота объекта.
Это может быть легко сделано вашим художником в Maya/Max/Blender.
Или вы можете прикрепить дверь к дополнительному узлу сцены в желаемой позиции. А затем поверните этот дополнительный узел сцены. Это имеет то преимущество, что вы можете делать все из Огре.
Основная методика с точки зрения matrix calculus
является:
переместить модель в точку
повернуть модель
Сначала вы можете попытаться выполнить Translate(...)
, после Rotate(...)
Один раз, когда это удастся, можно оптимизировать, используя одну матрицу с данными о перемещении и повороте, поэтому будет выполнять то, что вы хотите, с одной Transform(...)
вызов
Надеюсь это поможет.