2.2.1以后的版本,如果想使用skew,该怎么使用3d node替代呢?

大佬,我节点里有改动rotation 和scale,我应该怎么把之前改过的rotation和scale附加到你这个公式下呢。

算这个skewX也耗尽了我残存不多的立体几何知识。。skewY这样不行,我忘记当时为什么没算出skewY了,但是可以通过两层节点实现,即外层2D节点旋转90度,内层3D节点使用skewX=(skewY的值)。

在3D的skewX节点外层再加一个2D节点控制rotation和scale,比较方便。否则要自己算3维旋转矩阵

大佬方便留个qq么。。实在头大。。我搞不懂这个。。

我准备写个一键修复skew节点的插件,传到商店免费提供大家使用。。现在不知道怎么算公式。。

1赞

感谢大佬,虽然搞定了这个,但是要加3D模块,所以这块效果最后还是被砍了,后来发现好像shader可以模拟这个功能,只是用shader的话触摸、碰撞那些就会有问题

你这种计算skewY值的算法可行吗。。

我没试过,我是学渣,大佬回复我不得行

SkewY的值怎么计算的呢 改掉skew确实有些许麻烦

前提:
欧拉角的计算有先后顺序。据我的观察,顺序是XYZ。
(如果先Y后X的话,2楼的算法得出的是skewY)

记x的旋转角为alpha ,y的旋转角为betatheta = skewX,phi = skewY,显然,z的旋转角就是phi

计算过程省略,3个轴先后旋转后,
根据skewX角度的要求,可得式子1:

式子1

根据skew面积不变,可得式子2:

式子2

最后,scale为:

scale

联立式子1和式子2,可以把未知数alphabeta 算出来。

如果skewY为0,根据式子2,alphabeta 相等,此时的结果和2楼的算法一样。

到这一步,后续的解方程我没有继续算下去。也有可能我计算过程中有错误导致结果不对。
在这里,我希望有后来者可以把方程解出来。亦或是找到一个更好的方法。

哈哈,我也希望能有个方法可以算出skewY。但是数学能力有限。如果能弄出来,我就搞个一键适配skewX,和skewY的插件免费给大家用。

let k = Math.abs(Math.tan(skewX * Math.PI / 180));
let angle = Math.acos((Math.sqrt(4 + k * k) - k) / 2) * 180 / Math.PI;
let scale = 2 / (Math.sqrt(4 + k * k) - k);
this.node.is3DNode = true;
this.node.eulerAngles = cc.v3(angle, angle * (1 - Math.floor(skewX / 90) % 2 * 2), 0);
this.node.scale = scale;

2楼的解决方案在skewX为-90~90的情况下是对的,其它情况下可能会与Creator的符号相反。这里第5行对angle符号的处理才与Creator一致。

我算出来了两个式子,接下去就是解方程,你可以试一下

我数学是真滴不行。。我问问数学系大佬吧。。

我是用矩阵分解来列式的,即一个三维Skew矩阵C,是否可分解为一个三维旋转矩阵A乘以一个三维缩放矩阵B?如果存在A*B=C的话,就可以用A的旋转角度和B的缩放倍数来模拟C。但我当时也是只计算出skewY=0的情况下有解,也就是2楼的结果。
考虑另一种情况,即skewX=0,skewY!=0,那么可以等效地先旋转-90度,然后把skewY当作skewX操作,再旋转90度复原。设D为三维旋转-90度矩阵,那么就要计算AB=DTABD=C。其中A与B就是可以模拟skewY的三维旋转与三维缩放矩阵。但是我忘记当时怎么记算的了,感觉是解不出A与B,因此只好用三层节点来模拟skewY,即第一层2D节点旋转-90度,中间层3D节点用skewX代替skewY,第三层2D节点旋转90度。

我纳闷的一点:skew是节点变形,为何修改欧拉角+scale可这样变形?

根据你的两个式子,我用matlab求解结果如下,有兴趣的同学可以自行验证:

syms skewX skewY a b
res=solve(tan(skewX)==(sin(a)*sin(b)*cos(skewY)-cos(a)*sin(skewY))/(sin(a)*sin(b)*sin(skewY)+cos(a)*cos(skewY)),sin(a)*sin(b)*sin(skewY)+cos(a)*cos(skewY)==cos(b)*cos(skewY),a,b)
若令skewY=0,则结果是:
a的解为
  -2*atan((((tan(skewX)^2 + 4)^(1/2) - 2)/tan(skewX))^(1/2))
   2*atan((((tan(skewX)^2 + 4)^(1/2) + 2)/tan(skewX))^(1/2))
  -2*atan((((tan(skewX)^2 + 4)^(1/2) + 2)/tan(skewX))^(1/2))
   2*atan((-((tan(skewX)^2 + 4)^(1/2) - 2)/tan(skewX))^(1/2))
  -2*atan((-((tan(skewX)^2 + 4)^(1/2) - 2)/tan(skewX))^(1/2))
b的解为
  -2*atan((((tan(skewX)^2 + 4)^(1/2) - 2)/tan(skewX))^(1/2))
  -2*atan((((tan(skewX)^2 + 4)^(1/2) + 2)/tan(skewX))^(1/2))
   2*atan((((tan(skewX)^2 + 4)^(1/2) + 2)/tan(skewX))^(1/2))
  -2*atan((-((tan(skewX)^2 + 4)^(1/2) - 2)/tan(skewX))^(1/2))
   2*atan((-((tan(skewX)^2 + 4)^(1/2) - 2)/tan(skewX))^(1/2))
(第n行的a和第n行的b为一个解,即该方程共有5个解,看起来与之前二楼的计算过程差不多)
若没有令skewY为0,则结果非常长:
a的解为
  -2*atan(((((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) - 2*tan(skewY/2)*tan(skewX) + 2*tan(skewY/2)^4 + 2*tan(skewY/2)^3*tan(skewX) + 2)/(2*tan(skewY/2) + tan(skewX) - 2*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 + 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2)*(tan(skewY/2) - 1))/(tan(skewY/2) + 1))
   2*atan(((((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) - 2*tan(skewY/2)*tan(skewX) + 2*tan(skewY/2)^4 + 2*tan(skewY/2)^3*tan(skewX) + 2)/(2*tan(skewY/2) + tan(skewX) - 2*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 + 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2)*(tan(skewY/2) - 1))/(tan(skewY/2) + 1))
   2*atan(((((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + 2*tan(skewY/2)*tan(skewX) - 2*tan(skewY/2)^4 - 2*tan(skewY/2)^3*tan(skewX) - 2)/(2*tan(skewY/2) + tan(skewX) + 2*tan(skewY/2)*tan(skewX) + 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 - 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2)*(tan(skewY/2) + 1))/(tan(skewY/2) - 1))
  -2*atan(((((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + 2*tan(skewY/2)*tan(skewX) - 2*tan(skewY/2)^4 - 2*tan(skewY/2)^3*tan(skewX) - 2)/(2*tan(skewY/2) + tan(skewX) + 2*tan(skewY/2)*tan(skewX) + 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 - 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2)*(tan(skewY/2) + 1))/(tan(skewY/2) - 1))
  2*atan(((-((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) - 2*tan(skewY/2)*tan(skewX) + 2*tan(skewY/2)^4 + 2*tan(skewY/2)^3*tan(skewX) + 2)/(2*tan(skewY/2) + tan(skewX) + 2*tan(skewY/2)*tan(skewX) + 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 - 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2)*(tan(skewY/2) + 1))/(tan(skewY/2) - 1))
 -2*atan(((-((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) - 2*tan(skewY/2)*tan(skewX) + 2*tan(skewY/2)^4 + 2*tan(skewY/2)^3*tan(skewX) + 2)/(2*tan(skewY/2) + tan(skewX) + 2*tan(skewY/2)*tan(skewX) + 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 - 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2)*(tan(skewY/2) + 1))/(tan(skewY/2) - 1))
 -2*atan(((-((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + 2*tan(skewY/2)*tan(skewX) - 2*tan(skewY/2)^4 - 2*tan(skewY/2)^3*tan(skewX) - 2)/(2*tan(skewY/2) + tan(skewX) - 2*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 + 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2)*(tan(skewY/2) - 1))/(tan(skewY/2) + 1))
  2*atan(((-((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + 2*tan(skewY/2)*tan(skewX) - 2*tan(skewY/2)^4 - 2*tan(skewY/2)^3*tan(skewX) - 2)/(2*tan(skewY/2) + tan(skewX) - 2*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 + 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2)*(tan(skewY/2) - 1))/(tan(skewY/2) + 1))
b的解为
  -2*atan((((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) - 2*tan(skewY/2)*tan(skewX) + 2*tan(skewY/2)^4 + 2*tan(skewY/2)^3*tan(skewX) + 2)/(2*tan(skewY/2) + tan(skewX) - 2*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 + 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2))
   2*atan((((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) - 2*tan(skewY/2)*tan(skewX) + 2*tan(skewY/2)^4 + 2*tan(skewY/2)^3*tan(skewX) + 2)/(2*tan(skewY/2) + tan(skewX) - 2*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 + 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2))
  -2*atan((((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + 2*tan(skewY/2)*tan(skewX) - 2*tan(skewY/2)^4 - 2*tan(skewY/2)^3*tan(skewX) - 2)/(2*tan(skewY/2) + tan(skewX) + 2*tan(skewY/2)*tan(skewX) + 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 - 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2))
   2*atan((((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + 2*tan(skewY/2)*tan(skewX) - 2*tan(skewY/2)^4 - 2*tan(skewY/2)^3*tan(skewX) - 2)/(2*tan(skewY/2) + tan(skewX) + 2*tan(skewY/2)*tan(skewX) + 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 - 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2))
 -2*atan((-((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) - 2*tan(skewY/2)*tan(skewX) + 2*tan(skewY/2)^4 + 2*tan(skewY/2)^3*tan(skewX) + 2)/(2*tan(skewY/2) + tan(skewX) + 2*tan(skewY/2)*tan(skewX) + 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 - 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2))
  2*atan((-((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) - 2*tan(skewY/2)*tan(skewX) + 2*tan(skewY/2)^4 + 2*tan(skewY/2)^3*tan(skewX) + 2)/(2*tan(skewY/2) + tan(skewX) + 2*tan(skewY/2)*tan(skewX) + 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 - 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2))
 -2*atan((-((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + 2*tan(skewY/2)*tan(skewX) - 2*tan(skewY/2)^4 - 2*tan(skewY/2)^3*tan(skewX) - 2)/(2*tan(skewY/2) + tan(skewX) - 2*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 + 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2))
  2*atan((-((tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + tan(skewY/2)^2*(tan(skewX)^2 - 2*tan(skewY/2)^2*tan(skewX)^2 + tan(skewY/2)^4*tan(skewX)^2 - 4*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 4*tan(skewY/2)^4 + 4*tan(skewY/2)^3*tan(skewX) + 4)^(1/2) + 2*tan(skewY/2)*tan(skewX) - 2*tan(skewY/2)^4 - 2*tan(skewY/2)^3*tan(skewX) - 2)/(2*tan(skewY/2) + tan(skewX) - 2*tan(skewY/2)*tan(skewX) - 4*tan(skewY/2)^2 + 2*tan(skewY/2)^3 + 2*tan(skewY/2)^3*tan(skewX) - tan(skewY/2)^4*tan(skewX)))^(1/2))

二维的旋转加缩放是不能变形的,但是三维旋转和缩放投影到二维平面是可以的。你拿一张纸,在二维平面怎样旋转都不会变形,但是在三维情况下,比如你侧着看,它就不是长方形了。

1赞

有没有大佬推出了SkewY的式子,搞了一上午没推导出来

我后面发现,其实,2D的话可以用shader做的。。。不过我们已经放弃这个需求了。
比如skewY就是uv.x < 0.5 ===> uv.y -= a,uv > 0.5 ===> uv.y += a,a根据倾斜度计算,好像可以实现