Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el ejemplo siguiente, Rotation3DAnimationUsingKeyFrames se usa para hacer girar un objeto 3D mientras su eje de rotación anima lo que da como resultado un "wobble". Esta animación usa los siguientes fotogramas clave:
LinearRotation3DKeyFrame se usa para crear una interpolación fluida y lineal entre valores.
DiscreteRotation3DKeyFrame se usa para crear "saltos" repentinos entre valores (sin interpolación).
SplineRotation3DKeyFrame se usa para crear una transición de variable entre valores en función de la KeySpline propiedad . En el ejemplo siguiente, esta parte de la animación comienza lentamente, pero hacia el final del segmento de tiempo, acelera exponencialmente.
Ejemplo
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<DockPanel>
<Viewbox>
<Canvas Width="321" Height="201">
<!-- The Viewport3D provides a rendering surface for 3-D visual content. -->
<Viewport3D Name="MyAnimatedObject"
ClipToBounds="True" Width="150" Height="150"
Canvas.Left="0" Canvas.Top="10">
<!-- Defines the camera used to view the 3D object. -->
<Viewport3D.Camera>
<PerspectiveCamera Position="0,0,2" LookDirection="0,0,-1" FieldOfView="60" />
</Viewport3D.Camera>
<!-- The ModelVisual3D children contain the 3D models -->
<Viewport3D.Children>
<!-- Two ModelVisual3D define the lights cast in the scene. Without light, the
3D object cannot be seen. Also, the direction of the lights affect shadowing. -->
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight Color="#FFFFFF" Direction="-0.612372,-0.5,-0.612372" />
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight Color="#FFFFFF" Direction="0.612372,-0.5,-0.612372" />
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<GeometryModel3D>
<!-- The geometry specifes the shape of the 3D plane. In this case, a flat sheet is created. -->
<GeometryModel3D.Geometry>
<MeshGeometry3D
TriangleIndices="0,1,2 3,4,5 "
Normals="0,0,1 0,0,1 0,0,1 0,0,1 0,0,1 0,0,1 "
TextureCoordinates="0,0 1,0 1,1 1,1 0,1 0,0 "
Positions="-0.5,-0.5,0.5 0.5,-0.5,0.5 0.5,0.5,0.5 0.5,0.5,0.5 -0.5,0.5,0.5 -0.5,-0.5,0.5 " />
</GeometryModel3D.Geometry>
<!-- The material specifies the material applied to the plane. In this case it is a linear gradient.-->
<GeometryModel3D.Material>
<MaterialGroup>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
<LinearGradientBrush.GradientStops>
<GradientStop Color="Yellow" Offset="0" />
<GradientStop Color="Red" Offset="0.25" />
<GradientStop Color="Blue" Offset="0.75" />
<GradientStop Color="LimeGreen" Offset="1" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</MaterialGroup>
</GeometryModel3D.Material>
<!-- The Transform specifies how to transform the 3D object. The properties of the
Rotation object are animated causing the 3D object to rotate and "wobble" (see Storyboard below).-->
<GeometryModel3D.Transform>
<RotateTransform3D x:Name="myRotateTransform3D" >
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0,3,0" Angle="40" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
</GeometryModel3D.Transform>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D.Children>
<!-- Trigger the rotation animation when the 3D object loads. -->
<Viewport3D.Triggers>
<EventTrigger RoutedEvent="Viewport3D.Loaded">
<BeginStoryboard>
<Storyboard>
<!-- This animation animates the Rotation property of the RotateTransform
causing the 3D shape to rotate and wobble as the rotation angle and
axis are animated. -->
<Rotation3DAnimationUsingKeyFrames
Storyboard.TargetName="myRotateTransform3D"
Storyboard.TargetProperty="Rotation" >
<Rotation3DAnimationUsingKeyFrames.KeyFrames>
<!-- Using a LinearRotation3DKeyFrame, the object gradually rotates to an angle
of -60 degrees while the axis of rotation shifts (animates) to a new value. -->
<LinearRotation3DKeyFrame KeyTime="0:0:1">
<LinearRotation3DKeyFrame.Value>
<AxisAngleRotation3D Axis="1,0,1" Angle="-60" />
</LinearRotation3DKeyFrame.Value>
</LinearRotation3DKeyFrame>
<!-- Using a DiscreteRotation3DKeyFrame, the object suddenly rotates to the an angle
of 80 degrees on a new axis. This happens immdeiately after the first 1 and
a half seconds of the animation. -->
<DiscreteRotation3DKeyFrame KeyTime="0:0:1.5">
<DiscreteRotation3DKeyFrame.Value>
<AxisAngleRotation3D Axis="0,0,1" Angle="80" />
</DiscreteRotation3DKeyFrame.Value>
</DiscreteRotation3DKeyFrame>
<!-- Using a SplineRotation3DKeyFrame, the object rotates back to its starting position.
The animation starts out slowly at first and then speeds up. This KeyFrame ends
after the fourth second. -->
<SplineRotation3DKeyFrame KeySpline="0.6,0.0 0.9,0.00" KeyTime="0:0:4">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D Axis="0,3,0" Angle="40" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
</Rotation3DAnimationUsingKeyFrames.KeyFrames>
</Rotation3DAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Viewport3D.Triggers>
</Viewport3D>
</Canvas>
</Viewbox>
</DockPanel>
</Page>
Consulte también
- Información general sobre gráficos 3D
- Información general sobre animaciones deKey-Frame
- Animar una rotación 3D mediante guiones gráficos
- Animar una rotación 3D mediante Rotation3DAnimation
- Animar una rotación 3D mediante cuaterniones
- Animar una rotación 3D mediante fotogramas clave (QuaternionAnimationUsingKeyFrames)
.NET Desktop feedback