Трехмерная графика в Silverlight

97

В прикладном интерфейсе Silverlight API также поддерживается манипулирование трехмерными данными, а результаты получаются сходными с теми, что и в рассмотренном в предыдущей статье примере проекта приложения WPF, где двухмерное изображение накладывалось на трехмерную плоскость. Но на платформе Silverlight в настоящее время отсутствует такая же полная поддержка трехмерной графики (внедрена в версии Silverlight 5), как и на платформе WPF, а вместо нее предоставляется упрощенная среда для трехмерной графики в перспективе.

В частности, вместо того чтобы работать с элементами типа Viewport3D и соответствующими объектами камеры и освещения, в Silverlight можно изменять положение любого объекта, производного от базового класса UIElement, по осям координат X, Y, Z с помощью свойства Projection (Проекция). В этом свойстве может быть задан объект типа PlaneProjection (Проекция на плоскость), являющийся упрощенным вариантом объекта типа Viewport3D.

В своей простейшей форме объект типа PlaneProjection может быть настроен на вращение с помощью свойств RotationX, RotationY и RotationZ. А управлять центральной точкой его вращения можно с помощью свойств CenterOfRotationX, CenterOfRotationY и CenterOfRotationZ, в которых задается как глобальное, так и локальное смещение данной точки.

Как и следовало ожидать, в среде Expression Blend IDE предоставляется отдельный редактор, доступный на панели Properties для полноценной настройки объекта типа PlaneProjection и его связывания с объектом типа UIElement.

Если выбрать на монтажном столе элемент управления Image, то на панели Properties появится область Transform с подобластью Projection, как показано на рисунке. В этой подобласти можно настроить свойство Projection любого графического элемента, выбранного на монтажном столе:

Редактор проекций в Silverlight

Как и в остальных элементах управления пределами на панели Properties, для настройки значений координат проецирования X, Y, Z достаточно щелкнуть кнопкой мыши на соответствующем элементе управления и, не отпуская ее переместить курсор мыши. Ниже показана формирующаяся при этом разметка XAML:

<Image Margin="210,161,66,220" Source="img23963.jpg" Stretch="Fill">
			<Image.Projection>
				<PlaneProjection RotationX="5" RotationZ="7" RotationY="20"/>
			</Image.Projection>
		</Image>
Пройди тесты
Лучший чат для C# программистов