原文:Silverlight三维透视+倒影效果

知识概要:

1.使用2D内容创建3D体验,了解图像的PlaneProjection属性,具体内容读者自己查看文档。

2.Silverlight图形图形的变换效果的使用。

最终的效果如下图:

马上开始动手:

首先准备五张图片:直接在xaml中进行导入:

代码

<Grid x:Name="LayoutRoot" Background="Black">    //背景色通过background属性设为黑色
 <Image Source="1.jpg" Stretch="Fill" Width="192" Height="276"/>
 <Image Source="2.jpg" Stretch="Fill" Width="192" Height="276"/>
 <Image Source="3.jpg" Stretch="Fill" Width="192" Height="276"/>
 <Image Source="4.jpg" Stretch="Fill" Width="192" Height="276"/>
 <Image Source="5.jpg" Stretch="Fill" Width="192" Height="276"/>
</Grid>

其中的Stretch属性设置为Fill;

知识拓展:  关于Stretch属性的四个值------------------------->Start:

----------------------------------->1.None: 不对图像进行拉伸,使得填充完规定的大小尺寸

----------------------------------->2.Uniform:按比例进行拉伸,直到有一边达到规定的尺寸,其余部分不会被填充

----------------------------------->3.UniformToFill:按比例进行拉伸,直到所以的边都满足规定的尺寸。超出大小部分会被剪裁。

----------------------------------->4.Fill:不按比例拉伸,完全填充规定的尺寸

------END

至此,你已经成功让5张漂亮的图片在屏幕上显示了。

接着,我们试着让它们出现3D透视效果:

代码

<Image Source="1.jpg" Stretch="Fill" Width="192" Height="276">
     <Image.Projection>
       <PlaneProjection RotationY="-70" GlobalOffsetX="-230" GlobalOffsetZ="-100"/>
     </Image.Projection>
</Image>
<Image Source="2.jpg" Stretch="Fill" Width="192" Height="276">
     <Image.Projection>
       <PlaneProjection RotationY="-70" GlobalOffsetX="-155" GlobalOffsetZ="-100"/>
     </Image.Projection>
</Image>
<Image Source="3.jpg" Stretch="Fill" Width="192" Height="276">
     <Image.Projection>
       <PlaneProjection RotationY="70" GlobalOffsetX="230" GlobalOffsetZ="-100"/>
     </Image.Projection>
</Image>
<Image Source="4.jpg" Stretch="Fill" Width="192" Height="276">
     <Image.Projection>
       <PlaneProjection RotationY="70" GlobalOffsetX="155" GlobalOffsetZ="-100"/>
     </Image.Projection>
</Image>
<Image Source="5.jpg" Stretch="Fill" Width="192" Height="276"/>
     

在上述代码中,除了第五张图片不对他进行变化(因为他是放在中间的图片),其它的都通过 Projection的PlaneProjection属性进行设置。

PlaneProjection提供的一套属性使得其中的element具有在3维空间中的形状。其中RotationY是对element在三维坐标中沿着Y轴旋转一定的度数,这里第一张图片旋转-70 ;GlobalOffsetX是在X轴坐标上的偏移。例如:GlobalOffsetX=“-230”,就表示在X负半轴上离原点230个单位处。GlobalOffsetZ与GlobalOffsetX一样,只不过它是在Z轴(垂直于屏幕)的偏移。我们让图像在Z轴向屏幕里面移动100个单位。

到此,我们已经让图片具有3D效果。

接下来,就开始设置倒影:

我们以图片一为例:

代码


            <Image Source="1.jpg" Stretch="Fill" Width="192" Height="276">
            <Image.Projection>
                <PlaneProjection RotationY="-70" GlobalOffsetX="-230" GlobalOffsetZ="-100"/>
            </Image.Projection>
        </Image>
        <Image Source="1.jpg" Stretch="Fill" Width="192" Height="276" Opacity="0.2">
            <Image.RenderTransform>
                <TransformGroup>
                    <ScaleTransform ScaleY="-1"/>
                    <TranslateTransform Y="470"/>
                    <SkewTransform AngleY="-25"/>
                </TransformGroup>
            </Image.RenderTransform>
                <Image.Projection>
                <PlaneProjection RotationY="-70" GlobalOffsetX="-230" GlobalOffsetZ="-100"/>
            </Image.Projection>
            <Image.OpacityMask>
                <LinearGradientBrush StartPoint="0.5,0.0" EndPoint="0.5,1.0">
                    <GradientStop Offset="0.0" Color="#00000000"/>
                    <GradientStop Offset="1.0"  Color="#FF000000"/>            
                </LinearGradientBrush>
            </Image.OpacityMask>
        </Image>

A.实现思路很简单:

.复制图片一

.沿着X轴翻转

.进行图片的倾斜变换进行调整

.制作半遮罩效果

-----------------------------知识延伸:(变换效果)-------------------------

Silverlight中的变换是由Transform类来定义,其中主要包括:

RotateTransform:旋转变换

ScaleTransform:缩放变换

SkewTransform:倾斜变换

TranslateTransform:移动变换

TransformGroup:变换组

MatrixTransform:矩阵变换

( 这里不做具体介绍,具体内容及使用方法请查看文档和相关基础书籍)

--------------------------------------------------------------------------------

复制图片:我们采用在原有图片基础上再导入图片一;沿着X轴翻转,使用ScaleTransform属性,使它的ScaleY="-1",这样就使得图片翻转。然后通过TranslateTransform属性的Y属性在y 轴上进行位置的调整,使得图像一的副本位于图

像一下面的合适位置,但是你会发现,由于之前进行了3D透视变化。两图像并没有在同一基准线上,因此要通过SkewTransform进行图像的倾斜变换。

最后制作对倒影图片制作半遮罩效果,通过Image属性的OpcityMask 属性进行设置。在其中,我们放入了一个

LinearGradientBrush线性渐变画刷,通过设置GradientStop属性的Offset以及Color属性,制作出半遮罩效果。

至此,一个简单的三维透视+倒影效果就做好了。

完整的代码:

代码

 <Grid x:Name="LayoutRoot" Background="Black">
<Image Source="1.jpg" Stretch="Fill" Width="192" Height="276">
            <Image.Projection>
                <PlaneProjection RotationY="-70" GlobalOffsetX="-230" GlobalOffsetZ="-100"/>
            </Image.Projection>
        </Image>
        <Image Source="1.jpg" Stretch="Fill" Width="192" Height="276" Opacity="0.2">
            <Image.RenderTransform>
                <TransformGroup>
                    <ScaleTransform ScaleY="-1"/>
                    <TranslateTransform Y="470"/>
                    <SkewTransform AngleY="-25"/>
                </TransformGroup>
            </Image.RenderTransform>
                <Image.Projection>
                <PlaneProjection RotationY="-70" GlobalOffsetX="-230" GlobalOffsetZ="-100"/>
            </Image.Projection>
            <Image.OpacityMask>
                <LinearGradientBrush StartPoint="0.5,0.0" EndPoint="0.5,1.0">
                    <GradientStop Offset="0.0" Color="#00000000"/>
                    <GradientStop Offset="1.0"  Color="#FF000000"/>            
                </LinearGradientBrush>
            </Image.OpacityMask>
        </Image>
        <Image Source="2.jpg" Stretch="Fill" Width="192" Height="276">
            <Image.Projection>
                <PlaneProjection RotationY="-70" GlobalOffsetX="-155" GlobalOffsetZ="-100"/>
            </Image.Projection>
        </Image>
        <Image Source="2.jpg" Stretch="Fill" Width="192" Height="276" Opacity="0.2">
            <Image.RenderTransform>
                <TransformGroup>
                    <ScaleTransform ScaleY="-1"/>
                    <TranslateTransform Y="500"/>
                    <SkewTransform AngleY="-25"/>
                </TransformGroup>
            </Image.RenderTransform>
            <Image.Projection>
                <PlaneProjection RotationY="-70" GlobalOffsetX="-155" GlobalOffsetZ="-100"/>
            </Image.Projection>
            <Image.OpacityMask>
                <LinearGradientBrush StartPoint="0.5,0.0" EndPoint="0.5,1.0">
                    <GradientStop Offset="0.0" Color="#00000000"/>
                    <GradientStop Offset="1.0"  Color="#FF000000"/>
                </LinearGradientBrush>
            </Image.OpacityMask>
        </Image>
        <Image Source="3.jpg" Stretch="Fill" Width="192" Height="276">
            <Image.Projection>
                <PlaneProjection RotationY="70" GlobalOffsetX="230" GlobalOffsetZ="-100"/>
            </Image.Projection>
        </Image>
        <Image Source="3.jpg" Stretch="Fill" Width="192" Height="276" Opacity="0.2">
            <Image.RenderTransform>
                <TransformGroup>
                    <ScaleTransform ScaleY="-1"/>
                    <TranslateTransform Y="380"/>
                    <SkewTransform AngleY="25"/>
                </TransformGroup>
            </Image.RenderTransform>
            <Image.Projection>
                <PlaneProjection RotationY="70" GlobalOffsetX="230" GlobalOffsetZ="-100"/>
            </Image.Projection>
            <Image.OpacityMask>
                <LinearGradientBrush StartPoint="0.5,0.0" EndPoint="0.5,1.0">
                    <GradientStop Offset="0.0" Color="#00000000"/>
                    <GradientStop Offset="1.0"  Color="#FF000000"/>
                </LinearGradientBrush>
            </Image.OpacityMask>
        </Image>
        <Image Source="4.jpg" Stretch="Fill" Width="192" Height="276">
            <Image.Projection>
                <PlaneProjection RotationY="70" GlobalOffsetX="155" GlobalOffsetZ="-100"/>
            </Image.Projection>
        </Image>
      <Image Source="4.jpg" Stretch="Fill" Width="192" Height="276" Opacity="0.2">
            <Image.RenderTransform>
                <TransformGroup>
                    <ScaleTransform ScaleY="-1"/>
                    <TranslateTransform Y="380"/>
                    <SkewTransform AngleY="25"/>
                </TransformGroup>
            </Image.RenderTransform>
            <Image.Projection>
                <PlaneProjection RotationY="70" GlobalOffsetX="155" GlobalOffsetZ="-100"/>
            </Image.Projection>
            <Image.OpacityMask>
                <LinearGradientBrush StartPoint="0.5,0.0" EndPoint="0.5,1.0">
                    <GradientStop Offset="0.0" Color="#00000000"/>
                    <GradientStop Offset="1.0"  Color="#FF000000"/>
                </LinearGradientBrush>
            </Image.OpacityMask>
        </Image>
        <Image Source="5.jpg" Stretch="Fill" Width="192" Height="276" Opacity="{0.2}"/>
      
        <Image Source="5.jpg" Stretch="Fill" Width="192" Height="276" Opacity="0.2">
            <Image.RenderTransform>
                <TransformGroup>
                    <ScaleTransform ScaleY="-1"/>
                    <TranslateTransform Y="552"/>
                </TransformGroup>
            </Image.RenderTransform>
            <Image.OpacityMask>
                <LinearGradientBrush StartPoint="0.5,0.0" EndPoint="0.5,1.0">
                    <GradientStop Offset="0.0" Color="#00000000"/>
                    <GradientStop Offset="1.0" Color="#FF000000"/>
                </LinearGradientBrush>
            </Image.OpacityMask>
        </Image>
</Grid>

Silverlight三维透视+倒影效果的更多相关文章

  1. 【CSS3进阶】酷炫的3D旋转透视

    之前学习 react+webpack ,偶然路过 webpack 官网 ,看到顶部的 LOGO ,就很感兴趣. 最近觉得自己 CSS3 过于薄弱,想着深入学习一番,遂以这个 LOGO 为切入口,好好研 ...

  2. Windows Phone开发(19):三维透视效果

    原文:Windows Phone开发(19):三维透视效果 三维效果也可以叫透视效果,所以,我干脆叫三维透视效果.理论知识少讲,直接用例开场吧,因为这个三维效果其实很简单,比上一节中的变换更省事,不信 ...

  3. 【CSS进阶】试试酷炫的 3D 视角

    写这篇文章的缘由是因为看到了这个页面: 戳我看看(移动端页面,使用模拟器观看) 运用 CSS3 完成的 3D 视角,虽然有一些晕3D,但是使人置身于其中的交互体验感觉非常棒,运用在移动端制作一些 H5 ...

  4. css3实践—创建3D立方体

    css3实践-创建3D立方体 要想实现3D的效果,其实非常简单,只需指定一个元素为容器并设置transform-style:preserve-3d,那么它的后代元素便会有3D效果.不过有很多需要注意的 ...

  5. HTML5-36d嗨起^_^

    如果一个前端不会写css那必然会被贻笑大方,利用html5新增的一些c3属性可以做许许多多炫酷的效果. 大家先看我写的一个小demo: http://zpf92.github.io/build/ 这个 ...

  6. 用MFC实现OpenGL编程

    一.OpenGL简介 众所周知,OpenGL原先是Silicon Graphics Incorporated(SGI公司)在他们的图形工作站上开发高质量图像的接口.但最近几年它成为一个非常优秀的开放式 ...

  7. Windows Phone开发(20):当MediaElement和VideoBrush合作的时候

    原文:Windows Phone开发(20):当MediaElement和VideoBrush合作的时候 前面说的那么多控件都是"静态"的,都是"哑吧"的,今天 ...

  8. css3的2D和3D的转换

    一:2D转换: 通过 CSS3  transform转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. 2D移动:translate().使用translate()函数,你可以把元素从原来的位置移 ...

  9. 【多视图几何】TUM 课程 第3章 透视投影

    课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...

随机推荐

  1. Node组装启动过程

    elasticsearch的启动过程是根据配置和环境组装需要的模块并启动的过程.这一过程就是通过guice注入各个功能模块并启动这些模块,从而得到一个功能完整的node.正如之前所说elasticse ...

  2. AlertDialog的onCreateDialog与onPrepareDialog用法

    场景:在一个Activity中多次使用弹出对话框.而且对话框携带着动态变化的信息数据,这时假设仅仅使用onCreateDialog(int id, Bundle bundle)回调,则会发现第一次以后 ...

  3. (转)看懂类图——UML类图基础

    类图 要学懂设计模式,就需要先看得懂类图,类与类之间的关系是学习设计模式的基础,而在软件工程中,类与类之间的关系是通过UML中的类图来体现. 这篇笔记包含的不会是类图的所有东西,包含的只是各个类之间的 ...

  4. Loading half a billion rows into MySQL---转载

    Background We have a legacy system in our production environment that keeps track of when a user tak ...

  5. Surging Demo 项目之一

    原文:Surging Demo 项目之一 开发与运行环境 IDE Visual Stadio 2017/Visual Stadio 2019 Visual Stadio Core Docker 和 D ...

  6. Oracle中暂时表空间的清理

    作者:iamlaosong Oracle暂时表空间主要用来做查询和存放一些缓冲区数据. 暂时表空间消耗的主要原因是须要对查询的中间结果进行排序.暂时表空间的主要作用: 索引create或rebuild ...

  7. java——数组

    数组是多个同样数据类型数组组合,当中数据类型是不论什么数据类型. 数组变量是引用类型变量,数组能够作为对象,数组中的每个元素相当于对象的成员变量,所以数组元素能够默认初始化.(博客java--变量分类 ...

  8. BZOJ 3038 上帝造题的七分钟2 树状数组+并查集

    题目大意:一个序列,有两种操作.1.将一段数中的每个数开根号.2.查询一段数的和. 思路:和3211是一个题,有兴趣的能够看看我的那篇博客. CODE: #include <cmath> ...

  9. xxxyyy

    https://www.gaojinan.com/vps-o p e n v p n-china-telecom-unicom-mobile-mianliu-ml.html

  10. iOS开发 - Quartz2D画图

    Quartz 2D简单介绍 是一个二维画图引擎,同一时候支持iOS和Mac系统 Quartz 2D能完毕的工作 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成 ...