WPF项目中使用3D模型和动画
wpf使用Viewport3D创建3D模型,该对象包含了Camera摄像头,ModelVisual3D模型详细配置,包括填充的纹理。运用3D模型和动画,可以创建非常炫酷的3D效果,wpf这么强大,怎么就没发扬壮大<- _ ->!!
创建思路:
- 先创建一个3D模型(太专业了,从网上copy别人的模型,加以改造)
- 创建panel模板用来填充模型,也可以使用图片
- 创建动画使模型动起来(其实改变的是摄像头的角度)

创建模型
<Viewport3D>
<Viewport3D.Camera>
<PerspectiveCamera
Position = "1.75, 2.75, 2.75"
LookDirection = "-1.75, -2.75, -2.75"
UpDirection = "0, 1, 0"
FieldOfView = "60">
<PerspectiveCamera.Transform>
<Transform3DGroup>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0 1 0" x:Name="hr"/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="1 0 0" x:Name="vr"/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Transform3DGroup>
</PerspectiveCamera.Transform>
</PerspectiveCamera>
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup >
<!-- Lights -->
<AmbientLight Color="Transparent"/>
<DirectionalLight Color="Gainsboro" Direction="1,-2,-3" />
<DirectionalLight Color="Gainsboro" Direction="-1,2,3" />
<!-- Top -->
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions = "-1,1,1 1,1,1 1,1,-1 -1,1,-1"
TriangleIndices = "0 1 2 2,3,0"
TextureCoordinates="0,1 1,1 1,0 0,0"
/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<VisualBrush Viewport="0,0,.5,.25" TileMode="Tile" Visual="{Binding ElementName=cubebg}"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
<!-- Front -->
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions = "-1,-1,1 1,-1,1 1,1,1 -1,1,1"
TriangleIndices = "0 1 2 2,3,0"
TextureCoordinates="0,1 1,1 1,0 0,0"
/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<VisualBrush Viewport="0,0,.5,.25" TileMode="Tile" Visual="{Binding ElementName=cubebg}"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
<!-- Right -->
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions = "1,-1,1 1,-1,-1 1,1,-1 1,1,1"
TriangleIndices = "0 1 2 2,3,0"
TextureCoordinates="0,1 1,1 1,0 0,0"
/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<VisualBrush Viewport="0,0,.5,.25" TileMode="Tile" Visual="{Binding ElementName=cubebg}"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
<!-- Left -->
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions = "-1,-1,-1 -1,-1,1 -1,1,1 -1,1,-1"
TriangleIndices = "0 1 2 2,3,0"
TextureCoordinates="0,1 1,1 1,0 0,0"
/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<VisualBrush Viewport="0,0,.5,.25" TileMode="Tile" Visual="{Binding ElementName=cubebg}"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
<!-- Back -->
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions = "1,-1,-1 -1,-1,-1 -1,1,-1 1,1,-1"
TriangleIndices = "0 1 2 2,3,0"
TextureCoordinates="0,1 1,1 1,0 0,0"
/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<VisualBrush Viewport="0,0,.5,.25" TileMode="Tile" Visual="{Binding ElementName=cubebg}"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
<!-- Bottom -->
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions = "-1,-1,-1 1,-1,-1 1,-1,1 -1,-1,1"
TriangleIndices = "0 1 2 2,3,0"
TextureCoordinates="0,1 1,1 1,0 0,0"
/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<VisualBrush Viewport="0,0,.5,.25" TileMode="Tile" Visual="{Binding ElementName=cubebg}"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
创建panel
<WrapPanel Visibility="Hidden"> <Border x:Name="cubebg" Background="{StaticResource LGBrush}" BorderThickness="2"> <WrapPanel Margin="1" > <Border Width="10" Height="10" Background="AliceBlue"/> </WrapPanel> </Border> </WrapPanel>
创建动画
<Window.Triggers>
<EventTrigger RoutedEvent="Viewport3D.Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<BeginStoryboard.Storyboard>
<Storyboard>
<DoubleAnimation From="0" To="180" Storyboard.TargetName="vr" Storyboard.TargetProperty="Angle"
AutoReverse="True" Duration="0:0:8" RepeatBehavior="Forever"/>
<DoubleAnimation From="180" To="360" Storyboard.TargetName="hr" Storyboard.TargetProperty="Angle"
AutoReverse="True" Duration="0:0:8" RepeatBehavior="Forever"/>
<DoubleAnimation From="0" To="1" Storyboard.TargetName="cubebg" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[1].(GradientStop.Offset)"
AutoReverse="True" BeginTime="0:0:0" Duration="0:0:1.5" RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard.Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Window.Triggers>
其它(内部颜色渐变效果)
<Window.Resources>
<LinearGradientBrush x:Key="LGBrush" StartPoint="0,0.5" EndPoint="1,0.5">
<GradientStop Color="White" Offset="0"/>
<GradientStop Color="Red" Offset="0.46"/>
<GradientStop Color="LightSkyBlue" Offset="1"/>
</LinearGradientBrush>
</Window.Resources>

浙公网安备 33010602011771号