win10 uwp 使用 Matrix3DProjection 进行 3d 投影
原文:
win10 uwp 使用 Matrix3DProjection 进行 3d 投影
版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问。如果当前博客图片看不到,请到 http://lindexi.gitee.io 访问博客。本文地址 https://blog.csdn.net/lindexi_gd/article/details/84252512
在UWP可以通过 Matrix3DProjection 让元素显示出来的界面进行 3d 变换 在所有的 UIElement 都可以通过 Projection 属性,设置元素的投影,可以让 2d 的元素看起来和 在 3d 上的一样 例如在界面添加一个图片 <Image x:Name="Image" Source="Assets/Square150x150Logo.png" HorizontalAlignment="Center" VerticalAlignment="Center"></Image> 在后台代码让图片点击的时候,先下和向右移动 100 像素 public MainPage() { this.InitializeComponent(); Image.PointerPressed += Image_PointerPressed; } private void Image_PointerPressed(object sender, PointerRoutedEventArgs e) { Matrix3D m = new Matrix3D(); // This matrix simply translates the image 100 pixels // down and 100 pixels right. m.M11 = 1.0; m.M12 = 0.0; m.M13 = 0.0; m.M14 = 0.0; m.M21 = 0.0; m.M22 = 1.0; m.M23 = 0.0; m.M24 = 0.0; m.M31 = 0.0; m.M32 = 0.0; m.M33 = 1.0; m.M34 = 0.0; m.M44 = 1.0; m.OffsetX = 100; m.OffsetY = 100; m.OffsetZ = 0; var m3dProjection = new Matrix3DProjection {ProjectionMatrix = m}; Image.Projection = m3dProjection; } 从上面可以看到,在后台代码写的很多,如果在 xaml 写的代码就很少 <Image x:Name="Image" Source="Assets/Square150x150Logo.png" HorizontalAlignment="Center" VerticalAlignment="Center"> <Image.Projection> <Matrix3DProjection ProjectionMatrix="001,000,001,1,100,1" /> </Image.Projection> </Image> 这里的代码和上面的后台代码点击的时候是一样的 现在来模仿做一个微软的图标,通过界面画出 2d 的微软图标 <Grid HorizontalAlignment="Center" VerticalAlignment="Center"> <StackPanel> <StackPanel.Resources> <Style TargetType="Border"> <Setter Property="BorderBrush" Value="Transparent" /> <Setter Property="BorderThickness" Value="5" /> <Setter Property="Background" Value="#0173d0" /> <Setter Property="Width" Value="100" /> <Setter Property="Height" Value="100" /> </Style> </StackPanel.Resources> <StackPanel Orientation="Horizontal"> <Border /> <Border /> </StackPanel> <StackPanel Orientation="Horizontal"> <Border /> <Border /> </StackPanel> </StackPanel> </Grid> 想要做到下图的效果,只需要修改一点代码 在 Grid 添加 <Grid HorizontalAlignment="Center" VerticalAlignment="Center"> <Grid.Projection> <PlaneProjection RotationY="20" /> </Grid.Projection> <StackPanel> <StackPanel.Resources> <Style TargetType="Border"> <Setter Property="BorderBrush" Value="Transparent" /> <Setter Property="BorderThickness" Value="5" /> <Setter Property="Background" Value="#0173d0" /> <Setter Property="Width" Value="100" /> <Setter Property="Height" Value="100" /> </Style> </StackPanel.Resources> <StackPanel Orientation="Horizontal"> <Border /> <Border /> </StackPanel> <StackPanel Orientation="Horizontal"> <Border /> <Border /> </StackPanel> </StackPanel> </Grid> 这个方法使用的是比较简单的 PlaneProjection 方法,对于大部分开发已经满足,只有在复杂的需要,如矩阵变换的时候才需要使用 Matrix3DProjection 的方法 参见 3-D perspective effects for XAML UI - UWP app developer 我搭建了自己的博客 https://lindexi.gitee.io/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新 如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 虚拟化 – 虚拟化一个非常遗留的应用程序
- 存储.NET DLL(不是EXE或Web)的配置设置
- 是否有scintilla(scilexer.dll)的版本包含HTML的“样式”(C
- windows-mobile – 安排Windows Mobile应用程序运行
- 击败Windows上的CIFS文件缓存/强制“刷新”
- windows – 为什么我不能按顺序重定向到两个输入流`0 <`和`
- Windows 2019通过网页修改域用户密码
- windows-phone-8 – 适用于Windows Phone 8的企业应用程序分
- windows-server-2008 – SQL Server 2008是否只能在Server
- windows – DirectDraw分层窗口颜色键?
- Windows缺少Python.h
- windows – 我的批处理文件(.cmd)有时会执行部分
- active-directory – Windows Small Business Se
- caffe了(window官方版win7+VS2013)
- windows – “区域可以在”不断增加之后被清除
- Windows10:Opencv4.0+Opencv4.0.1_contrib编译
- windows – 如何在Visual Studio中使用OpenSSL
- Windows Server 2016-三种方法备份还原DHCP服务器
- windows-server-2008 – 无法还原SQL 2008备份 –
- mvc partialView+kendo window