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>