Unity学习笔记之UGUI模块RectTransform的变换推导

RectTransform实现了分辨率适配,我分析了一下这个机制,并试着做出相应的推导这个过程,而推导过程,就是根据面板显示的这些数据,计算控件的四个顶点位置。

可以观察,拖动Anchor的时候,会出现如图所示红线标注的一个矩形,我们称这个矩形是RC1,最终控件的四个顶点,
就是这个矩形,通过后续的旋转和缩放得来的。

我们设父控件大小为ParentSize,容易得到RC1:
RC1.minX = ParentSize.width * Anchor.minX + Left
RC1.maxX = ParentSize.width * Anchor.maxX - Right;
RC1.minY = ParentSize.height * Anchor.minY + Bottom;
RC1.maxY = ParentSize.height * Anchor.maxY - Top;

从而得到控件的Size:
Size.width = RC1.maxX - RC1.minX;
Size.height = RC1.maxY - RC2.minY;

于是算得重心位置:
CenterX = RC1.minX + Size.width * Pivot.x;
CenterY = RC1.minY + Size.height * pivot.y;

于是我们得到控件局部坐标系下四个顶点的坐标:
v1 = (-Size.x * Pivot.x, -Size.y * Pivot.y);
v2 = (Size.x * (1-Pivot.x), -Size.y * Pivot.y);
v3 = (Size.x * (1-Pivot.x), Size.y * (1-Pivot.y));
v4 = ((-Size.x * Pivot.x, Size.y * (1-Pivot.y));

好了原始的顶点终于算出来了,之后就该进行局部的旋转以及缩放变换了,变换后的顶点为:
v' = v * R * S;

下一步就是进行平移变换,平移多少?就是Center构成的平移矩阵啊!

完成!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值