飘遥的Blog

C/C++/.NET
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

WPF 3D 翻盘抽奖程序

Posted on 2009-02-28 16:08  Zzx飘遥  阅读(4726)  评论(5编辑  收藏  举报
由于需要做几个抽奖程序,是抽奖程序,做的酷炫华丽必不可少。不太熟悉flash,因此放弃;如果用silverlight做,需要在网页中呈现,不方便,放弃;自己熟悉的技术只有Winform和WPF了。做了一番之后,发现要想用Winform实现比较酷炫华丽的效果真的很困难,而WPF相对简单多了。既然做就做成最酷的,用立方体呈现翻盘,表面布上卡通画的纹理,鼠标移动到立方体上,立方体旋转,触发声音,用徐徐展开的画卷并伴随着音乐呈现结果是个不错的创意。
最终结果如图:


展开后如图:


XAML定义按钮模板实现立方体按钮。
按钮触发后改变按钮样式并禁用按钮。
核心代码:
<Viewport3D>
    
<Viewport3D.Camera>
        
<PerspectiveCamera Position="2.9,2.9,2.9" LookDirection="-1,-1,-1" />
    
</Viewport3D.Camera>
    
<Viewport3D.Children>
        
<ModelVisual3D>
            
<ModelVisual3D.Content>
                
<DirectionalLight Direction="-0.3,-0.4,-0.5" />
            
</ModelVisual3D.Content>
        
</ModelVisual3D>
        
<ModelVisual3D>
            
<ModelVisual3D.Transform>
                
<RotateTransform3D>
                    
<RotateTransform3D.Rotation>
                        
<AxisAngleRotation3D Axis="0,1,0" Angle="0" />
                    
</RotateTransform3D.Rotation>
                
</RotateTransform3D>
            
</ModelVisual3D.Transform>
            
<ModelVisual3D.Content>
                
<GeometryModel3D>
                    
<GeometryModel3D.Material>
                        
<DiffuseMaterial>
                            
<DiffuseMaterial.Brush>
                                
<VisualBrush ViewportUnits="Absolute" Transform="1,0,0,-1,0,1">
                                    
<VisualBrush.Visual>
                                        
<Border Background="{Binding Path=Background, RelativeSource='{RelativeSource TemplatedParent}'}">
                                            
<Label Content="{Binding Path=Content, RelativeSource='{RelativeSource TemplatedParent}'}" />
                                        
</Border>
                                    
</VisualBrush.Visual>
                                
</VisualBrush>
                            
</DiffuseMaterial.Brush>
                        
</DiffuseMaterial>
                    
</GeometryModel3D.Material>
                    
<GeometryModel3D.Geometry>
                        
<MeshGeometry3D
                
Positions="1,1,-1 1,-1,-1 -1,-1,-1 -1,1,-1 1,1,1 -1,1,1 -1,-1,1 1,-1,1 1,1,-1 1,1,1 1,-1,1 1,-1,-1 1,-1,-1 1,-1,1 -1,-1,1 -1,-1,-1 -1,-1,-1 -1,-1,1 -1,1,1 -1,1,-1 1,1,1 1,1,-1 -1,1,-1 -1,1,1"
                TriangleIndices
="0 1 2 0 2 3 4 5 6 4 6 7 8 9 10 8 10 11 12 13 14 12 14 15 16 17 18 16 18 19 20 21 22 20 22 23"
                TextureCoordinates
="0,1 0,0 1,0 1,1 1,1 -0,1 0,-0 1,0 1,1 -0,1 0,-0 1,0 1,0 1,1 -0,1 0,-0 -0,0 1,-0 1,1 0,1 1,-0 1,1 0,1 -0,0"/>
                    
</GeometryModel3D.Geometry>
                
</GeometryModel3D>
            
</ModelVisual3D.Content>
        
</ModelVisual3D>
    
</Viewport3D.Children>
</Viewport3D>