Шаровый манипулятор

79

Одним из наиболее востребованных способов поведения трехмерных сцен является возможность вращения объекта с помощью мыши. Самой распространенной реализацией такого поведения является так называемый виртуальный шаровой манипулятор (trackball), который присутствует во многих программах трехмерной графики. Хотя WPF не имеет встроенную реализацию виртуального шарового манипулятора, команда разработчиков WPF предоставила свободно распространяемый класс-пример, выполняющий эту функцию. Виртуальный шаровой манипулятор — это надежный, исключительно популярный фрагмент кода, включенный в большинство демонстрационных трехмерных приложений, предложенных командой WPF.

Базовый принцип шарового манипулятора заключается в том, что пользователь щелкает кнопкой мыши где-то на поверхности трехмерного объекта и поворачивает его вокруг воображаемой центральной оси. Степень поворота зависит от расстояния перетаскивания мыши. Например, если щелкнуть посредине правой части Viewport 3D и перетащить курсор мыши влево, то трехмерная сцена повернется вокруг воображаемой вертикальной оси. Если продолжить перемещение мыши влево, то трехмерная сцена повернется на 180 градусов, отобразив заднюю сторону:

Виртуальный шаровый манипулятор

Хотя кажется, что виртуальный шаровой манипулятор поворачивает трехмерную сцену, на самом деле он перемещает камеру. Камера всегда остается на одном и том же расстоянии от центральной точки трехмерной сцены. По сути, камера перемещается по поверхности большой сферы, включающей всю сцену. За описанием работы виртуального шарового манипулятора WPF и необходимых вычислений обращайтесь по адресу http://viewport3d.com/trackball.htm. Код виртуального шарового манипулятора вместе с упомянутыми ранее проектами трехмерных инструментов доступен для загрузки по адресу http://www.codeplex.com/3DTools.

Поскольку виртуальный шаровой манипулятор перемещает камеру, его не следует использовать совместно с собственной анимацией перемещения камеры. Однако его можно применять с анимированной трехмерной сценой (например, с описанной выше сценой, где вращается тор).

Использовать виртуальный шаровой манипулятор чрезвычайно легко. Все, что нужно для этого — поместить объект Viewport3D в оболочку класса TrackballDecorator. Класс TrackballDecorator включен в проект трехмерных инструментов, так что начать следует с добавления XML-псевдонима для пространства имен.

Пройди тесты
Лучший чат для C# программистов