bool trackingMouse = false; bool trackballMove = false; bool redrawContinue = false;

Если значение флага redrawContinue равно true, то функция обработки простоя вызывает функцию перерисовки изображения. Если значение флага trackingMouse равно true, то обновляется позиция трекбола в функции обработки движения. Если значение флага trackballMove равно true, то обновляется матрица вращения, которая используется в функции display ( ).

Значения флагов изменяются в функции обработки событий мыши mouse( ). Когда пользователь нажимает кнопку мыши (определенную или любую - это определяет разработчик программы), запускается процесс обновления позиции трекбола в функции обработки события движения мыши, причем, если пользователь передвигает мышь, вызывается функция перерисовки объектов на экране. Когда пользователь отпускает кнопку мыши, отслеживание прекращается. Два последних положения мыши используются для определения вектора скорости, что позволяет организовать непрерывное обновление матрицы поворота и таким образом - непрерывное вращение объектов на экране. В этом случае объект будет вращаться и после того, как пользователь отпустит кнопку мыши.

Текст программы, реализующей описанный алгоритм, находится в файле cube2.c. Учтите, что в этой программе используется некоторое упрощение при определении скорости вращения, но в ней также обрабатываются ситуации, не рассмотренные в данном описании. Например, что делать, если указатель мыши находится в углу экрана и соответствующая точка на плоскости не может быть спроектирована на верхнюю полусферу поверхности шарика трекбола.

4.10.3. Плавное вращение Описанный пример демонстрирует, с какими сложностями встречается программист при использовании рассмотренных выше методов определения параметров поворота. Этот подход основан на углах ЭгЪера, которые описывают повороты вокруг осей системы координат. Он позволяет сформировать матрицу произвольного поворота, используя суперпозицию простых поворотов вокруг осей системы координат х, у и г. Хотя OpenGL и позволяет самостоятельно сформировать любую матрицу поворота, но удобнее использовать принцип суперпозиции для определения как оси вращения, так и соответствующих углов.


⇐ Предыдущая| |Следующая ⇒