3D-ish旋转

即使计算机屏幕是平面和二维的,也可以在这些屏幕上绘制视觉对象,使其具有第三维的外观。 在本章的前面,您看到了一些文本效果,它们提供了第三个维度的提示,而Xamarin.Forms支持两个额外的旋转,名为RotationX和RotationY,它们似乎也突破了屏幕固有的二维平面度。
处理3D图形时,将屏幕视为3D坐标系统的一部分很方便。 像往常一样,X轴是水平的,Y轴是垂直的。 但是还有一个隐含的Z轴与屏幕正交。 该Z轴从屏幕伸出并延伸穿过屏幕的后部。
在2D空间中,旋转发生在点周围。 在3D空间中,围绕轴旋转。 RotationX属性围绕X轴旋转。 视觉对象的顶部和底部似乎向观察者移动或远离观察者。 类似地,RotationY围绕Y轴旋转。 视觉对象的左侧和右侧似乎向观察者移动或远离观察者。 通过扩展,基本的Rotation属性是围绕Z轴旋转。 为了保持一致性,Rotation属性可能应该命名为RotationZ,但这可能会使那些只考虑二维的人感到困惑。
ThreeDeeRotationDemo程序允许您尝试RotationX,RotationY和Rotation的组合,以及探索AnchorX和AnchorY如何影响这两个附加旋转属性:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"x:Class="ThreeDeeRotationDemo.ThreeDeeRotationDemoPage"><StackLayout Padding="20, 10"><Frame x:Name="frame"HorizontalOptions="Center"VerticalOptions="CenterAndExpand"OutlineColor="Accent"><Label Text="TEXT"FontSize="72" /></Frame><Slider x:Name="rotationXSlider"Maximum="360"Value="{Binding Source={x:Reference frame},Path=RotationX}" /><Label Text="{Binding Source={x:Reference rotationXSlider},Path=Value,StringFormat='RotationX = {0:F0}'}"HorizontalTextAlignment="Center" /><Slider x:Name="rotationYSlider"Maximum="360"Value="{Binding Source={x:Reference frame},Path=RotationY}" /><Label Text="{Binding Source={x:Reference rotationYSlider},Path=Value,StringFormat='RotationY = {0:F0}'}"HorizontalTextAlignment="Center" /><Slider x:Name="rotationZSlider"Maximum="360"Value="{Binding Source={x:Reference frame},Path=Rotation}" /><Label Text="{Binding Source={x:Reference rotationZSlider},Path=Value,StringFormat='Rotation(Z) = {0:F0}'}"HorizontalTextAlignment="Center" /><StackLayout Orientation="Horizontal"HorizontalOptions="Center"><Stepper x:Name="anchorXStepper"Minimum="-1"Maximum="2"Increment="0.25"Value="{Binding Source={x:Reference frame},Path=AnchorX}" /><Label Text="{Binding Source={x:Reference anchorXStepper},Path=Value,StringFormat='AnchorX = {0:F2}'}"VerticalOptions="Center"/></StackLayout><StackLayout Orientation="Horizontal"HorizontalOptions="Center"><Stepper x:Name="anchorYStepper"Minimum="-1"Maximum="2"Increment="0.25"Value="{Binding Source={x:Reference frame},Path=AnchorY}" /><Label Text="{Binding Source={x:Reference anchorYStepper},Path=Value,StringFormat='AnchorY = {0:F2}'}"VerticalOptions="Center"/></StackLayout></StackLayout>
</ContentPage>

这是一个示例屏幕,显示所有三个旋转的组合:

您会发现AnchorY属性影响RotationX但不影响RotationY。对于默认的AnchorY值0.5,RotationX会导致在可视对象的水平中心周围发生旋转。将AnchorY设置为0时,旋转位于对象顶部附近,对于值1,旋转位于底部附近。
同样,AnchorX属性会影响RotationY但不会影响RotationX。 AnchorX值为0会导致RotationY围绕其左边缘旋转可视对象,而值为1会导致围绕右边缘旋转。
三个平台的旋转方向是一致的,但最好结合三维坐标系的惯例进行描述:
您可能认为有许多方法可以排列正交的X,Y和Z轴。例如,X的增加值可能对应于X轴上的向左或向右移动而增加,并且Y的增加值可能对应于Y轴上的向上或向下移动。然而,当从不同方向观察轴时,许多这些变化变得相同。实际上,只有两种不同的方式来排列X,Y和Z轴。这两种方式称为右手和左手坐标系。
Xamarin.Forms中的三个旋转属性所暗示的3D坐标系统是左手:如果您将左手的食指指向增加X坐标(向右)的方向,并且您的中指朝向增加的方向Y坐标(向下),然后你的拇指指向增加Z坐标的方向,这些坐标是从屏幕出来的。
您的左手也可用于预测旋转方向:要围绕特定轴旋转,请先将拇指指向该轴上增加值的方向。要围绕X轴旋转,请将左拇指指向右侧。要围绕Y轴旋转,请将左手拇指向下。要围绕Z轴旋转,请将左拇指指向屏幕外。左手其他手指的卷曲表示正角度的旋转方向。
综上所述:

  • 为了增加RotationX的角度,顶部会返回,底部会出现。
  • 为了增加RotationY的角度,右侧向后,左侧出现。
  • 为增加旋转角度,旋转方向为顺时针方向。

除了这些约定之外,RotationX和RotationY在三个平台之间没有太多的视觉一致性。尽管所有三个平台都实现了透视 - 即,看似最接近视图的对象部分比远离对象的部分大 - 您将看到的透视量是特定于平台的。没有可以允许微调这些视觉效果的AnchorZ属性。
但最明显的是,这些不同的旋转属性对于动画来说会非常有趣。

第二十一章:变换(十四)相关推荐

  1. 第三集 怪物学院 第二十一章

    第三集 怪物学院 第二十一章 邪火凤凰(一) 史莱克七怪的最后一位就要出场了.或许大家会对他的情况有所不解.但事实上,在中国古代,男人十二岁嫖妓有很多.尤其是富家子弟 .这是斗罗大陆,大家就当这某人发 ...

  2. 计算机网络离不开光缆,九年级物理全册 第二十一章 第四节 越来越宽的信息之路习题课件 新人教版.ppt...

    九年级物理全册 第二十一章 第四节 越来越宽的信息之路习题课件 新人教版.ppt 第二十一章信息的传递,第四节越来越宽的信息之路,1微波的性质更接近光波,大致沿_______传播,需要每隔_____k ...

  3. 鸟哥的Linux私房菜(服务器)- 第二十一章、文件服务器之三: FTP 服务器

    第二十一章.文件服务器之三: FTP 服务器 最近更新日期:2011/08/08 FTP (File Transfer Protocol) 可说是最古老的协议之一了,主要是用来进行档案的传输,尤其是大 ...

  4. 鸟哥的Linux私房菜(基础篇)- 第二十一章、系统配置工具(网络与打印机)与硬件侦测

    第二十一章.系统配置工具(网络与打印机)与硬件侦测 最近升级日期:2009/09/15 除了手动配置之外,其实系统提供了一个名为 setup 的命令给系统管理员使用喔!这个命令还能够配置网络呢.此外, ...

  5. 羊皮卷的实践-第二十一章

    第二十一章 高山滑雪是人与环境以及时间的竞赛.每当我看到输赢之间只差极短的时间时,我就不禁摇头同情那些输家. 第一名的时间是一分三十七秒二二. 第二名的时间是一分二十七秒二五. 也就是说,冠军与平庸之 ...

  6. 数字图像处理:第二十一章 视频压缩标准

    第二十一章视频压缩标准 目录 引言 H.261标准 MPEG-1标准 MPEG-2标准 MPEG-4标准 MPEG-7标准 作业 1. 引言 视频压缩标准是多媒体领域中的重要内容,针对视频会议.网络通 ...

  7. 第二十一章 刘备脱险

    第二十一章 刘备脱险 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /& ...

  8. 2017.2.15 开涛shiro教程-第二十一章-授予身份与切换身份(二) controller

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 开涛shiro教程-第二十一章-授予身份与切换身份(二) 1.回顾 ...

  9. 天堂向左,深圳往右 第十三章第十四章

    天堂向左,深圳往右 第十三章第十四章[@more@] 第十三章 周振兴是肖然见过的最严谨的人.此人一年四季打着领带,头发永远硬硬地顶在头上,绝不会有一根错乱,每天上班后都有个固定的程序:上厕所.擦桌子 ...

  10. 【正点原子STM32连载】第二十一章 通用定时器实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

最新文章

  1. Windows 10:开机显示C:\WINDOWS\system32\config\systemprofile\Desktop不可用 的解决方法
  2. 右键删除选中的行总提示rowIndex
  3. java硬件编程_关于JAVA并发编程你需要知道的——硬件篇
  4. 三菱d700变频器接线图_图解PLC与变频器通讯接线
  5. Python笔记-U2解锁手机九宫格
  6. appearance—外观样式属性
  7. python plot函数label_python – Matplotlib Contour Clabel位置
  8. 算法稳定币项目Basis Cash将于2月7日启动V2迁移计划
  9. python的简单程序代码_有那些用python修改python程序代码的简单方法?
  10. 安卓app开发-02-安卓app快速开发
  11. Markdown list状态下插入代码
  12. bash大括号参数扩展(Parameter Expansion)
  13. ModBus那些傻傻分不清
  14. mov文件如何转换成mp4?巧用嗨格式视频转换器
  15. html tr行内样式左对齐,探索CSS单行文字居中,多行文字居左的实现方式
  16. MATLAB 生成均匀分布、正态分布、对数正态分布随机数
  17. 【Algorithm】GPLT L3-014 球队“食物链”
  18. 编程语言php加密与解密的方法
  19. Cannot run program‘C:\Anaconda3\envs\...\python.exe’(in directory):CreateProcess error=2,系统找不到指定文件
  20. 算法竞赛——给定ATCG的DNA环状序列,求解最小表示字典序(附python代码及时间复杂度解析)

热门文章

  1. FLEX中Tree默认展开全部节点
  2. 下一个最大2的幂 判断是否是2的幂
  3. 利用syslinux制作Dos、WinPE、Slax Linux集成u盘
  4. 19.SimLogin_case01
  5. 【转】一些linux基础命令
  6. MVC 异常处理机制
  7. 上海巴士集团公布公交整改措施和时间表
  8. Python程序中的进程操作-进程同步(multiprocess.Lock)
  9. SpringBoot数据访问-------------数据缓存
  10. Iroha and Haiku II