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(...) вызов

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

Другие вопросы по тегам