Гироскоп CMAttitude установка пользовательской системы отсчета
Я использую Pitch and Roll из CMAttitude для управления положением точки в игре iPhone. Когда я начинаю уровень, я регистрирую эталонное отношение и во время игры использую
[attitude multiplyByInverseOfAttitude:attitudeRef]
чтобы получить текущую ориентацию по отношению к эталону, управляйте горизонтальной позицией точки (со свойством pitch) и вертикальной позицией (со свойством roll).
Проблема в том, что я хотел бы добавить функцию сброса только компонента ролика ссылочной позиции positionRef к пользовательскому значению. Углы CMAttitude euler являются свойствами, доступными только для чтения, и я, по-видимому, не могу создать собственный объект CMAttitude с настраиваемым креном и высотой тона.
Как я мог это сделать?
1 ответ
К сожалению, нет простого способа добиться этого. Как вы заявили, CMAttitude
не предоставляет никаких функций для управления им или для создания экземпляра. Тем не менее, вы должны сделать умножение самостоятельно. Кроме того, вам понадобится дополнительный класс для кватернионов, потому что CMQuaternion - это только структура.
Хорошей новостью является то, что весь необходимый код уже доступен, например, в проекте cocoamath. Посмотрите, как реализован multiplyByInverseOfAttitude (CMAttitude Class)? для некоторого руководства и большего количества ссылок на основы математики кватерниона.