Ogre3D: вращение относительно пользовательской центральной точки - PullRequest
1 голос
/ 23 марта 2012

Я пытаюсь повернуть узел вокруг пользовательской центральной точки в 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 ]

2 голосов
/ 23 марта 2012

Если речь идет об объекте, который вы хотите всегда вращать вокруг одной и той же точки (например, двери), самый простой способ - изменить точку поворота объекта.

Это может быть легко сделано вашим художником в Maya / Max / Blender.

Или вы можете прикрепить дверь к дополнительному узлу сцены в желаемой позиции. А затем поверните этот дополнительный узел сцены. Это дает то преимущество, что вы можете делать все, что угодно от Огре.

0 голосов
/ 23 марта 2012

Базовая методика с точки зрения matrix calculus:

  • переместить модель в точку

  • повернуть модель

Сначала вы можете попытаться выполнить Translate(...), после того, как Rotate(...), однажды завершив это, можно оптимизировать, используя одну матрицу с данными перемещения и поворота, поэтому будет выполнять то, что вы хотите, с одним Transform(...) звоните

Надеюсь, это поможет.

...