Предположительно, у вас есть два вектора, описывающих ориентацию камеры.Один из них будет вашим V'<sub>up</sub>
, указывающим, какой путь вверх относительно ориентации камеры, а другим будет ваш V'<sub>norm</sub>
, который будет указывать направление камеры.У вас также будет позиция <b>p'</b>
, где ваша камера находится в какое-то время.Вы определяете каноническую ориентацию и положение, например:
<b>V<sub>up</sub></b> = <0, 1, 0>
<b>V<sub>norm</sub></b> = <0, 0, 1>
<b>p</b> = <0, -1, 0>
При заданном вращении кватерниона q
вы затем применяете свое вращение к этим векторам, чтобы получить:
<b>V'<sub>up</sub></b> = q<b>V<sub>up</sub></b>q<sup>-1</sup>
<b>V'<sub>norm</sub></b> = q<b>V<sub>norm</sub></b>q<sup>-1</sup>
<b>p'</b> = q<b>p</b>q<sup>-1</sup>
В вашей конкретной ситуации вы определяете q
, чтобы постепенно накапливать различные повороты, которые приводят к окончательному повороту, который вы применяете к камере.Эффект будет таким, что это будет похоже на то, что вы описываете.То есть вы перемещаете камеру внутри статически ориентированной и позиционированной сферы, а не перемещаете сферу вокруг статически ориентированной и позиционированной камеры.
Каждый шаг вычисляется путем поворота на некоторый угол θ вокруг вектора <b>V</b> = <b>V'<sub>up</sub></b> x <b>V'<sub>norm</sub></b>
.