WPF实现3D翻转的动画效果

简介: 原文:WPF实现3D翻转的动画效果1、前端代码实现 1.1 原理见代码注析 ...
原文: WPF实现3D翻转的动画效果

1、前端代码实现

1.1 原理见代码注析

<Grid MouseDown="Grid_MouseDown">
    <Viewport3D>
        <Viewport3D.Camera>
            <!-- Position属性指定3D空间中摄像机的位置,LookDirection属性为摄像机方向 -->
            <PerspectiveCamera Position="0 0 500" LookDirection="0 0 -1" />
        </Viewport3D.Camera>
        <Viewport3D.Children>
            <ContainerUIElement3D>
                <Viewport2DVisual3D>
                    <Viewport2DVisual3D.Geometry>
                        <!-- Positions属性表示绘制对象的点集合,TriangleIndices属性表示对象的正反面(WPF通过逆时针环绕表示正面),TextureCoordinates属性表示2D纹理映射到3D对象 -->
                        <!-- 一般通过3D建模工具推导得出 -->
                        <MeshGeometry3D Positions="-200 200 0  -200 -200 0  200 -200 0  200 200 0" TriangleIndices="0 1 2  0 2 3" TextureCoordinates="0 0  0 1  1 1  1 0"/>
                    </Viewport2DVisual3D.Geometry>
                    <Viewport2DVisual3D.Material>
                        <DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True"/>
                    </Viewport2DVisual3D.Material>
                    <Viewport2DVisual3D.Visual>
                        <!-- 放置正面自定义用户控件 -->
                        <Page:Win1 Width="400" Height="400"/>
                    </Viewport2DVisual3D.Visual>
                </Viewport2DVisual3D>
                <Viewport2DVisual3D>
                    <Viewport2DVisual3D.Geometry>
                        <MeshGeometry3D Positions="200 200 0  200 -200 0  -200 -200 0  -200 200 0" TriangleIndices="0 1 2  0 2 3" TextureCoordinates="0 0  0 1  1 1  1 0"/>
                    </Viewport2DVisual3D.Geometry>
                    <Viewport2DVisual3D.Material>
                        <DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True"/>
                    </Viewport2DVisual3D.Material>
                    <Viewport2DVisual3D.Visual>
                        <!-- 放置反面自定义用户控件 -->
                        <Page:Win2 Width="400" Height="400"/>
                    </Viewport2DVisual3D.Visual>
                </Viewport2DVisual3D>
                <ContainerUIElement3D.Transform>
                    <RotateTransform3D>
                        <RotateTransform3D.Rotation>
                            <!-- 设置旋转轴为对齐坐标系统的Y轴 -->
                            <AxisAngleRotation3D x:Name="aar" Angle="0" Axis="0 1 0"/>
                        </RotateTransform3D.Rotation>
                    </RotateTransform3D>
                </ContainerUIElement3D.Transform>
            </ContainerUIElement3D>
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <!-- 设置指定方向传播的平行光线填充场景 -->
                    <DirectionalLight Color="Transparent"/>
                </ModelVisual3D.Content>
            </ModelVisual3D>
        </Viewport3D.Children>
    </Viewport3D>
</Grid>

2、后端代码实现

2.1 通过鼠标单击翻转动画180度显示对象反面,鼠标双击翻转动画0度显示对象正面。

private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
{
    DoubleAnimation da = new DoubleAnimation();
    da.Duration = new Duration(TimeSpan.FromSeconds(1));
    if (e.ClickCount == 2)
        da.To = 0d;
    else
        da.To = 180d;
    AxisAngleRotation3D aar = Application.Current.MainWindow.FindName("aar") as AxisAngleRotation3D;
    aar.BeginAnimation(AxisAngleRotation3D.AngleProperty, da);  
}

3、运行效果

3.1 效果图如下

欢迎转载,但请注明出处: http://www.cnblogs.com/julyweb/,谢谢!
目录
相关文章
|
C#
WPF 界面实现多语言支持 中英文切换 动态加载资源字典
原文:WPF 界面实现多语言支持 中英文切换 动态加载资源字典 1、使用资源字典,首先新建两个字典文件en-us.xaml、zh-cn.xaml。定义中英文的字符串在这里面【注意:添加xmlns:s="clr-namespace:System;assembly=mscorlib】 zh-cn.
2872 0
|
IDE C# 开发工具
WPF钟表效果实现
中WPF中的RotateTransform实现UI元素的旋转,并模拟钟表的秒针、分针和时针。
1123 0
WPF钟表效果实现
|
IDE 编译器 C#
WPF实现强大的动态公式计算
数据库可以定义表不同列之间的计算公式,进行自动公式计算,但如何实现行上的动态公式计算呢?行由于可以动态扩展,在某些应用场景下将能很好的解决实际问题。本文就探讨一下如何在WPF中实现一种基于行字段的动态公式计算。
990 0
WPF实现强大的动态公式计算
|
网络协议 C# 移动开发
C# WPF上位机实现和下位机TCP通讯
C# WPF上位机实现和下位机TCP通讯下位机使用北京大华程控电源DH1766-1,上位机使用WPF。实现了电压电流实时采集,曲线显示。上午在公司调试成功,手头没有程控电源,使用TCP服务端模拟。昨天写的TCP服务端正好排上用场。
2335 0
|
C#
WPF特效-实现3D足球效果
原文:WPF特效-实现3D足球效果 WPF 实现 3D足球效果,效果图如下:  每个面加载不同贴图。                                                          ...
856 0
|
算法 C# 容器
WPF特效-实现弧形旋转轮播图
原文:WPF特效-实现弧形旋转轮播图        项目遇到,琢磨并实现了循环算法,主要处理循环替换显示问题       (如:12张图组成一个圆弧,但总共有120张图需要呈现,如何在滑动中进行显示块的替换,并毫无卡顿)        处理的自己感觉比较满意,记录一下。
2040 0
|
C#
wpf采用Xps实现文档显示、套打功能
原文:wpf采用Xps实现文档显示、套打功能 近期的一个项目需对数据进行套打,用户要求现场不允许安装office、页面预览显示必须要与文档完全一致,xps文档来对数据进行处理。Wpf的DocumentView 控件可以直接将数据进行显示,xps也是一种开放式的文档,如果我们能够替换里面的标签就最终实现了我们想要的效果。
1730 0
|
C#
WPF编游戏系列 之六 动画效果(1)
原文:WPF编游戏系列 之六 动画效果(1)        本篇主要针对界面进行动画效果处理。首先在打开或关闭界面时,使其产生动态效果而不是生硬的显示或消失(如下图)。其次在鼠标放到关闭窗口图标上时,使其出现闪动效果。
666 0
|
C# 前端开发
WPF编游戏系列 之七 动画效果(2)
原文:WPF编游戏系列 之七 动画效果(2)        上一篇已经对关闭窗口图标进行了动画效果处理,本篇将对窗口界面的显示和关闭效果进行处理。由于所有的动画效果都是针对窗口界面的Canvas,所以先要为它添加一些RenderTranform属性,这些属性不要填写任何效果,后面会由Storyboard和EventTrigger为其提供。
634 0
|
文字识别 C# Windows
通通WPF随笔(4)——通通手写输入法(基于Tablet pc实现)
原文:通通WPF随笔(4)——通通手写输入法(基于Tablet pc实现)          从我在博客园写第一篇博客到现在已经有1年半了,我的第一篇博客写的就是手写识别,当时,客户需求在应用中加入手写输入功能,由于第三方的手写输入法都无法定制界面,所以领导决定自主开发,所以我就很简单地基于Tablet pc写了一个WPF控件,由于几个瓶颈问题,导致这个输入功能只能在我们的UI框架里使用,而无法做到像输入法那样可以输入到任意窗口。
2108 0