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>