3D-возможности в Silverlight 3

Как известно, в WPF присутствуют замечательные возможности по работе с 3D. Silverlight в этом отношении существенно уступает WPF, т.к. является кросс-платформенной технологией. Так было до второй версии Silverlight. Однако, в третьей версии поддержка 3D появилась. Эту тему мы как раз и рассмотрим.

На самом деле, если взглянуть чуть детальнее на возможности 3D в Siliverlight 3, то можно быстро понять что это не та поддержка, которая присутствует в WPF. Это, собственно, и логично. По своей сути, возможности 3D в Silverlight сводятся к получению проекций изображения под разными углами по трём осям. Конечно, это не то, чего хотелось бы в идеале, тем не менее эта функциональность позволяет представить наше приложение в трехмерном виде.

За получение 3D-проекций в Silverlight 3 отвечает свойство Projection, которое доступно для всех объектов. Используя это свойство можно задать параметры отображения элемента. Давайте создадим обычную панель, в которую положим стандартные элементы управления.

<StackPanel Name="InputPanel" Grid.Row="1">
  <TextBlock Text="Text:"/>
  <TextBox />
  <ComboBox />
  <Button Content="Go!"/>
</StackPanel>

Теперь получим 3D-проекцию нашей панели. Повернем панель по оси X.

<StackPanel Name="InputPanel" Grid.Row="1">
  <StackPanel.Projection>
    <PlaneProjection RotationX="20" />
  </StackPanel.Projection>
  <TextBlock Text="Text:"/>
  <TextBox />
  <ComboBox />
  <Button Content="Go!"/>
</StackPanel>

Что интересно, значения параметров 3D-проекций можно изменять при помощи привязок и в рамках различных действий анимации (что логично). Это делает проекции Silverlight вполне пригодным для использования механизмом.

Давайте протестируем это. Создадим три элемента управления Slider. Привяжем каждый такой элемент управления к своей оси.

<StackPanel>
  <Slider Value="{Binding ElementName=InputPanel, Path=Projection.RotationX, Mode=TwoWay}" Minimum="0" Maximum="720" />
  <Slider Value="{Binding ElementName=InputPanel, Path=Projection.RotationY, Mode=TwoWay}" Minimum="0" Maximum="720" />
  <Slider Value="{Binding ElementName=InputPanel, Path=Projection.RotationZ, Mode=TwoWay}" Minimum="0" Maximum="720" />
</StackPanel>
  
<StackPanel Name="InputPanel" Grid.Row="1">
  <StackPanel.Projection>
    <PlaneProjection RotationX="20" />
  </StackPanel.Projection>
  <TextBlock Text="Text:"/>
  <TextBox />
  <ComboBox />
  <Button Content="Go!"/>
</StackPanel>

Теперь мы можем вращать изображение в 3D-пространстве в режиме реального времени! :))) Вот как выглядит приложение.