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/,谢谢!

时间: 2024-10-18 21:32:22

WPF实现3D翻转的动画效果的相关文章

WPF编游戏系列 之六 动画效果(1)

原文:WPF编游戏系列 之六 动画效果(1)        本篇主要针对界面进行动画效果处理.首先在打开或关闭界面时,使其产生动态效果而不是生硬的显示或消失(如下图).其次在鼠标放到关闭窗口图标上时,使其出现闪动效果.下面将通过Storyboard和EventTrigger实现这些效果.     1. 先从简单的入手吧,为关闭图标增加闪动效果,首先要在ScrollViewer中添加一个关闭窗口图标. ... ... <ScrollViewer Name="queryScrollViewer

【译】仿Taasky的3D翻转菜单动画实现

最终效果 最终效果 开始 首先下载并打开一个事先搭好架子的Demo,然后来分析一下.这个Demo包含一个主页和详情页,其中MenuViewController继承自UITableViewController,它主要用于展示左边侧栏,自定义的MenuItemCell中设置了每一个菜单的图标和颜色.DetailViewController为详情页,显示了每个cell点击后,对应的颜色和图标. Starter Project效果 这个教程将详细的介绍实现步骤,具体步骤如下: 整个教程将使用自动布局来实

WF+WCF+WPF第四天-WF动画效果

本例子改造了 麒麟大神,原文地址:http://www.cnblogs.com/zhuqil/archive/2010/04/21/MoveFlow.html 效果: 活动: 水平移动:HorizontalMove 垂直移动:VerticalMove 流程: 水平跑-垂直跑-水平跑-反向水平跑-反向垂直跑-反向水平跑 界面: 界面是用Win8风格做的 实现:实现很简单,将WPF中的动画做参数传到流程当中.再根据流程图移动. 总结:我正在努力学习WF4.0技术,希望大家给点意见和支持,谢谢. 代码

纯html+css制作3D立方体和动画效果

今天放上来的,是一个用css3制作的立方体+动画,效果如下. 整个效果都只用了html和css,没有一句js,其实起初是使用了js来给六个面的小方格们赋值,后来强迫症犯了,直接手动写上吧,这样一句js都没有,更干脆利落点. 如下为body内整体结构,一个类名为big的盒子内,放置六个ul,每个ul赋予不同的类名,标明了ul面所在的位置,这六个ul会作为立方体的六个面. <div class="big"> <ul class="after">&

CSS3 3D翻转动画

CSS3动画属性:transform(变换):大小.位置.颜色.变形等状态的变化transition(过渡):初始状态过渡到结束状态这个过程中产生的动画animation(动画):定义关键帧动画 CSS3可以实现多种动画效果,下面说的是CSS3实现一个3D翻转的动画效果. <div class="container"> <div class="wrapHover> <div class="wrap"> <div c

wpf 模拟3D效果(和手机浏览图片效果相似)(附源码)

原文 wpf 模拟3D效果(和手机浏览图片效果相似)(附源码) pf的3D是一个很有意思的东西,类似于ps的效果,类似于电影动画的效果,因为动画的效果,(对于3D基础的摄像机,光源,之类不介绍,对于依赖属性也不介绍.),个人认为,依赖属性这个东西,有百分之五十是为了3D而存在.(自己写的类似于demo的东西)先上图,无图无真相这是demo的整个效果图,可以用鼠标移动,触摸屏也可以手指滑动,图片会移动,然后移动结束,会有一个回弹的判断. <Window x:Class="_3Dshow.Wi

CSS3之图片3D翻转效果(网页效果--每日一更)

今天,带来的是纯CSS3的效果--图片3D翻转. 请看效果:http://localhost:63342/webfront/PC/rotate.html 这个效果主要还是运用了CSS3的transform变形属性,与上个效果不同的是,这次并不是动画,所以没有采用animation属性,而是采用transition过渡属性.这个属性会将元素在两种效果之间进行切换,并产生一个过渡效果.详情请看代码. HTML结构: 1 <div id="content"> 2 <div

[Android]实现数字的3d翻转效果

传统的旋转动画方式如: <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:fromDegrees="0" android:toDegrees="359" android:duration=&

WPF 有趣的动画效果

WPF 有趣的动画效果 这一次我要呈上一个简单的文章,关于给你的WPF apps加入美丽的光线动画,可是我对动画这东西可能有点入迷了. 实际上.我对动画如此的入迷,以至于我最后做了之前从未打算做的东西,就是使用一些很实用的.NET代码,渐变填充生成背景动画.让我先给你看一些终于效果吧. WPF和元素定位 然而.在我们開始之前.我们须要考虑一件事情.这件事让我也有点原地转圈的感觉. 似乎当你使用WPF创建不论什么闭环形状时,你不能设置它的X和Y坐标.好吧.至少你不能在一般的WPF窗口(像VS开箱即